<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>linux | Chris Titus Tech</title><description>Recent content from Chris Titus Tech</description><link>https://christitus.com/categories/linux/</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>Switch From Arch to Fedora</title><link>https://christitus.com/switch-from-arch-to-fedora/</link><guid isPermaLink="true">https://christitus.com/switch-from-arch-to-fedora/</guid><description>&lt;p&gt;Arch Linux has always been the distro for people who want control, speed, and the newest packages as soon as they land. That is also the tradeoff. When you live on the bleeding edge and pull from community package scripts, you are taking on more responsibility than most desktop Linux users realize.&lt;/p&gt;
&lt;p&gt;The recent AUR malware incident is a good reminder of why I am looking at Fedora differently now. Fedora gives me modern packages, a strong default security posture, and a predictable release model without needing to trust random build scripts for everything I install.&lt;/p&gt;

&lt;h2&gt;What Happened With the AUR&lt;/h2&gt;
&lt;p&gt;On June 12, 2026, Arch Linux posted an official notice about an active malicious package incident in the Arch User Repository. The Arch team said there was a high volume of malicious package adoptions and updates in the AUR, and they temporarily expected issues with new accounts, package updates, and package adoption while they worked through the problem.&lt;/p&gt;
&lt;p&gt;This was not the official Arch package repository being compromised. That distinction matters. The AUR is community-maintained. It is one of Arch&apos;s biggest strengths, but it is also a different trust model from the official repos.&lt;/p&gt;
&lt;p&gt;Security reporting around the incident described attackers taking over hundreds of AUR packages and changing build or install scripts so users would execute malware when building packages. Phoronix reported more than 400 affected packages. The Hacker News described the payload as a credential stealer with optional eBPF rootkit behavior when it already had enough privileges. Other reports and community trackers discussed higher package counts as the investigation expanded.&lt;/p&gt;
&lt;p&gt;The exact number matters less than the lesson: if a package build script runs code on your machine, then the package manager did not save you from trusting that script.&lt;/p&gt;
&lt;h2&gt;The AUR Is Powerful, But You Are the Security Boundary&lt;/h2&gt;
&lt;p&gt;The AUR is not pacman. It is not the same thing as installing from Arch&apos;s signed official repositories. An AUR helper makes the process feel automatic:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;paru -S package-name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;yay -S package-name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But underneath that convenience, the helper is downloading a &lt;code&gt;PKGBUILD&lt;/code&gt;, reading build instructions, pulling sources, and running shell commands to build and install the package. That is fine when you trust the maintainer, understand the script, and verify the changes. It is dangerous when you treat it like an app store.&lt;/p&gt;
&lt;p&gt;This is where a lot of Arch users get lazy. I have done it too. You install something from the AUR because it is easy. You update 30 packages. The helper asks if you want to view diffs. You skip it. That is exactly the habit attackers are counting on.&lt;/p&gt;
&lt;p&gt;The correct Arch workflow is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;paru -Syu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then review the diffs when AUR packages change. Look at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PKGBUILD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.install&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;new curl, wget, npm, pip, cargo, or binary download steps&lt;/li&gt;
&lt;li&gt;changed source URLs&lt;/li&gt;
&lt;li&gt;added systemd services&lt;/li&gt;
&lt;li&gt;post-install commands&lt;/li&gt;
&lt;li&gt;anything that runs before you have a chance to inspect the built package&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If that sounds tedious, that is the point. Arch gives you power, but it also makes you the person responsible for using that power correctly.&lt;/p&gt;
&lt;h2&gt;Arch Is Secure If You Make It Secure&lt;/h2&gt;
&lt;p&gt;Arch is not &quot;insecure&quot; because it is Arch. That is too simple. The official repositories use package signing, the project moves quickly on fixes, and the Arch community is full of people who know exactly what they are doing.&lt;/p&gt;
&lt;p&gt;The issue is the default posture.&lt;/p&gt;
&lt;p&gt;Arch starts minimal. You choose the desktop, services, firewall, sandboxing, backup strategy, update cadence, and how much third-party packaging you trust. That is great for advanced users. It is not great for people who want sane security defaults without building the entire operating model themselves.&lt;/p&gt;
&lt;p&gt;On a default Arch install, you are often the one deciding:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;whether a firewall is installed and enabled&lt;/li&gt;
&lt;li&gt;whether services should be confined&lt;/li&gt;
&lt;li&gt;whether Flatpak apps should be preferred over random AUR packages&lt;/li&gt;
&lt;li&gt;whether snapshots are configured before big updates&lt;/li&gt;
&lt;li&gt;whether AUR changes are reviewed or blindly accepted&lt;/li&gt;
&lt;li&gt;whether a proprietary binary from a random source belongs on the system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is not a failure of Arch. It is the design. Arch gives you a clean base and expects you to know what you are doing.&lt;/p&gt;
&lt;h2&gt;Bleeding Edge Has a Cost&lt;/h2&gt;
&lt;p&gt;Arch is a rolling release. That means package updates arrive continuously instead of being held for a traditional versioned release. For many desktop users, this is amazing. You get new kernels, Mesa, desktop environments, compilers, and applications fast.&lt;/p&gt;
&lt;p&gt;The cost is that the whole system is always moving.&lt;/p&gt;
&lt;p&gt;Most of the time, this works. Sometimes, a library changes and a proprietary application breaks. Sometimes, a kernel update exposes a driver problem. Sometimes, an AUR package assumes something about the system that changed yesterday. Sometimes, upstream shipped a regression and Arch users are among the first people to find it.&lt;/p&gt;
&lt;p&gt;If you like debugging, Arch is fantastic. If you need the machine to be boring, Arch can become work.&lt;/p&gt;
&lt;p&gt;That is the real question: do you want your daily driver to be a hobby project or a workstation?&lt;/p&gt;
&lt;h2&gt;Why Fedora Looks Better Right Now&lt;/h2&gt;
&lt;p&gt;Fedora is not technically a rolling release in the same way Arch is. Fedora Rawhide is the rolling development branch. Normal Fedora releases are versioned releases, with a new release about every six months and updates for about 13 months.&lt;/p&gt;
&lt;p&gt;That difference is exactly why Fedora hits a useful middle ground.&lt;/p&gt;
&lt;p&gt;Fedora is modern without being reckless. You get current kernels, Mesa, GNOME, KDE, development tools, PipeWire, Wayland work, container tooling, and a fast-moving desktop stack. But those packages move through Fedora&apos;s packaging, testing, and release process instead of landing as a nonstop rolling stream like Arch.&lt;/p&gt;
&lt;p&gt;For a desktop user, that means Fedora usually feels fresh without making every update feel like a mini migration.&lt;/p&gt;
&lt;h2&gt;Fedora&apos;s Security Defaults Matter&lt;/h2&gt;
&lt;p&gt;Fedora also starts from a stronger security baseline. SELinux is enabled by default in enforcing mode. Firewalld is installed by default. The project has a long history of pushing hardening changes early and integrating them into the distro instead of leaving every user to bolt them on later.&lt;/p&gt;
&lt;p&gt;That does not make Fedora magically secure. You can still install bad software, run random scripts, weaken SELinux, open firewall ports, or add unsafe third-party repositories. But the default posture is different.&lt;/p&gt;
&lt;p&gt;On Fedora, a normal user starts with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SELinux enforcing&lt;/li&gt;
&lt;li&gt;firewalld available by default&lt;/li&gt;
&lt;li&gt;signed RPM repositories&lt;/li&gt;
&lt;li&gt;a predictable release lifecycle&lt;/li&gt;
&lt;li&gt;Flatpak as a common desktop app path&lt;/li&gt;
&lt;li&gt;strong upstream alignment with Red Hat and the wider Linux ecosystem&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a better default for most people than a minimal system where every security decision is pushed onto the user.&lt;/p&gt;
&lt;h2&gt;Stable Does Not Mean Old&lt;/h2&gt;
&lt;p&gt;People hear &quot;stable packages&quot; and think &quot;ancient packages.&quot; That is more Debian than Fedora.&lt;/p&gt;
&lt;p&gt;Fedora is not an LTS distro. It is not trying to freeze the desktop for five years. Fedora is closer to a fast, tested snapshot of the Linux ecosystem. You get new software quickly, but within a release structure that is easier to reason about than a pure rolling release.&lt;/p&gt;
&lt;p&gt;That is why Fedora makes sense for a power user who still wants modern hardware support and current desktop features. You do not have to choose between &quot;everything is old&quot; and &quot;everything changes every day.&quot;&lt;/p&gt;
&lt;p&gt;For most users, Fedora is the better balance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;newer than Ubuntu LTS or Debian Stable&lt;/li&gt;
&lt;li&gt;more predictable than Arch&lt;/li&gt;
&lt;li&gt;more secure out of the box than a minimal DIY install&lt;/li&gt;
&lt;li&gt;less dependent on community build scripts for common software&lt;/li&gt;
&lt;li&gt;still flexible enough for advanced users&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;When Arch Still Makes Sense&lt;/h2&gt;
&lt;p&gt;I am not saying everyone should delete Arch.&lt;/p&gt;
&lt;p&gt;Arch still makes sense if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you enjoy building the system yourself&lt;/li&gt;
&lt;li&gt;you want the newest packages immediately&lt;/li&gt;
&lt;li&gt;you read update news before upgrading&lt;/li&gt;
&lt;li&gt;you review AUR diffs&lt;/li&gt;
&lt;li&gt;you keep backups or snapshots&lt;/li&gt;
&lt;li&gt;you understand how to recover from a broken system&lt;/li&gt;
&lt;li&gt;you know which AUR packages you actually trust&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Arch is still one of the best learning distros ever made. It forces you to understand Linux in a way most distros do not. That is valuable.&lt;/p&gt;
&lt;p&gt;But there is a difference between a learning system and a production daily driver. If your machine is how you make videos, write code, run a business, manage servers, or do client work, then predictable defaults matter more.&lt;/p&gt;
&lt;h2&gt;My Takeaway&lt;/h2&gt;
&lt;p&gt;The AUR incident did not prove that Arch is bad. It proved that the AUR trust model requires attention, and most users do not give it enough attention.&lt;/p&gt;
&lt;p&gt;That is the part that should make people rethink their setup.&lt;/p&gt;
&lt;p&gt;If you are using Arch because you love the control and you actually review what you install, keep using Arch. If you are using Arch because a helper made the AUR feel like a giant one-command app store, you are probably taking more risk than you think.&lt;/p&gt;
&lt;p&gt;Fedora gives me most of what I want from modern Linux without making the whole system a constant trust exercise. It is current, secure by default, stable enough for real work, and still close enough to upstream that it does not feel stale.&lt;/p&gt;
&lt;p&gt;That is why switching from Arch to Fedora makes sense now.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Arch Linux: &lt;a href=&quot;https://archlinux.org/news/active-aur-malicious-packages-incident/&quot;&gt;https://archlinux.org/news/active-aur-malicious-packages-incident/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Phoronix: &lt;a href=&quot;https://www.phoronix.com/news/Arch-Linux-AUR-400-Compromised&quot;&gt;https://www.phoronix.com/news/Arch-Linux-AUR-400-Compromised&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Hacker News: &lt;a href=&quot;https://thehackernews.com/2026/06/over-400-arch-linux-aur-packages.html&quot;&gt;https://thehackernews.com/2026/06/over-400-arch-linux-aur-packages.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fedora release lifecycle: &lt;a href=&quot;https://docs.fedoraproject.org/en-US/releases/lifecycle/&quot;&gt;https://docs.fedoraproject.org/en-US/releases/lifecycle/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fedora security features: &lt;a href=&quot;https://fedoraproject.org/wiki/Security_Features&quot;&gt;https://fedoraproject.org/wiki/Security_Features&lt;/a&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/ybm1KwlGKA0&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, 29 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Arch Linux has always been the distro for people who want control, speed, and the newest packages as soon as they land. That is also the tradeoff. When you live on the bleeding edge and pull from community package scripts, you are taking on more responsibility than most desktop Linux users realize.&lt;/p&gt;
&lt;p&gt;The recent AUR malware incident is a good reminder of why I am looking at Fedora differently now. Fedora gives me modern packages, a strong default security posture, and a predictable release model without needing to trust random build scripts for everything I install.&lt;/p&gt;

&lt;h2&gt;What Happened With the AUR&lt;/h2&gt;
&lt;p&gt;On June 12, 2026, Arch Linux posted an official notice about an active malicious package incident in the Arch User Repository. The Arch team said there was a high volume of malicious package adoptions and updates in the AUR, and they temporarily expected issues with new accounts, package updates, and package adoption while they worked through the problem.&lt;/p&gt;
&lt;p&gt;This was not the official Arch package repository being compromised. That distinction matters. The AUR is community-maintained. It is one of Arch&apos;s biggest strengths, but it is also a different trust model from the official repos.&lt;/p&gt;
&lt;p&gt;Security reporting around the incident described attackers taking over hundreds of AUR packages and changing build or install scripts so users would execute malware when building packages. Phoronix reported more than 400 affected packages. The Hacker News described the payload as a credential stealer with optional eBPF rootkit behavior when it already had enough privileges. Other reports and community trackers discussed higher package counts as the investigation expanded.&lt;/p&gt;
&lt;p&gt;The exact number matters less than the lesson: if a package build script runs code on your machine, then the package manager did not save you from trusting that script.&lt;/p&gt;
&lt;h2&gt;The AUR Is Powerful, But You Are the Security Boundary&lt;/h2&gt;
&lt;p&gt;The AUR is not pacman. It is not the same thing as installing from Arch&apos;s signed official repositories. An AUR helper makes the process feel automatic:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;paru -S package-name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;yay -S package-name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But underneath that convenience, the helper is downloading a &lt;code&gt;PKGBUILD&lt;/code&gt;, reading build instructions, pulling sources, and running shell commands to build and install the package. That is fine when you trust the maintainer, understand the script, and verify the changes. It is dangerous when you treat it like an app store.&lt;/p&gt;
&lt;p&gt;This is where a lot of Arch users get lazy. I have done it too. You install something from the AUR because it is easy. You update 30 packages. The helper asks if you want to view diffs. You skip it. That is exactly the habit attackers are counting on.&lt;/p&gt;
&lt;p&gt;The correct Arch workflow is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;paru -Syu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then review the diffs when AUR packages change. Look at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PKGBUILD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.install&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;new curl, wget, npm, pip, cargo, or binary download steps&lt;/li&gt;
&lt;li&gt;changed source URLs&lt;/li&gt;
&lt;li&gt;added systemd services&lt;/li&gt;
&lt;li&gt;post-install commands&lt;/li&gt;
&lt;li&gt;anything that runs before you have a chance to inspect the built package&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If that sounds tedious, that is the point. Arch gives you power, but it also makes you the person responsible for using that power correctly.&lt;/p&gt;
&lt;h2&gt;Arch Is Secure If You Make It Secure&lt;/h2&gt;
&lt;p&gt;Arch is not &quot;insecure&quot; because it is Arch. That is too simple. The official repositories use package signing, the project moves quickly on fixes, and the Arch community is full of people who know exactly what they are doing.&lt;/p&gt;
&lt;p&gt;The issue is the default posture.&lt;/p&gt;
&lt;p&gt;Arch starts minimal. You choose the desktop, services, firewall, sandboxing, backup strategy, update cadence, and how much third-party packaging you trust. That is great for advanced users. It is not great for people who want sane security defaults without building the entire operating model themselves.&lt;/p&gt;
&lt;p&gt;On a default Arch install, you are often the one deciding:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;whether a firewall is installed and enabled&lt;/li&gt;
&lt;li&gt;whether services should be confined&lt;/li&gt;
&lt;li&gt;whether Flatpak apps should be preferred over random AUR packages&lt;/li&gt;
&lt;li&gt;whether snapshots are configured before big updates&lt;/li&gt;
&lt;li&gt;whether AUR changes are reviewed or blindly accepted&lt;/li&gt;
&lt;li&gt;whether a proprietary binary from a random source belongs on the system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is not a failure of Arch. It is the design. Arch gives you a clean base and expects you to know what you are doing.&lt;/p&gt;
&lt;h2&gt;Bleeding Edge Has a Cost&lt;/h2&gt;
&lt;p&gt;Arch is a rolling release. That means package updates arrive continuously instead of being held for a traditional versioned release. For many desktop users, this is amazing. You get new kernels, Mesa, desktop environments, compilers, and applications fast.&lt;/p&gt;
&lt;p&gt;The cost is that the whole system is always moving.&lt;/p&gt;
&lt;p&gt;Most of the time, this works. Sometimes, a library changes and a proprietary application breaks. Sometimes, a kernel update exposes a driver problem. Sometimes, an AUR package assumes something about the system that changed yesterday. Sometimes, upstream shipped a regression and Arch users are among the first people to find it.&lt;/p&gt;
&lt;p&gt;If you like debugging, Arch is fantastic. If you need the machine to be boring, Arch can become work.&lt;/p&gt;
&lt;p&gt;That is the real question: do you want your daily driver to be a hobby project or a workstation?&lt;/p&gt;
&lt;h2&gt;Why Fedora Looks Better Right Now&lt;/h2&gt;
&lt;p&gt;Fedora is not technically a rolling release in the same way Arch is. Fedora Rawhide is the rolling development branch. Normal Fedora releases are versioned releases, with a new release about every six months and updates for about 13 months.&lt;/p&gt;
&lt;p&gt;That difference is exactly why Fedora hits a useful middle ground.&lt;/p&gt;
&lt;p&gt;Fedora is modern without being reckless. You get current kernels, Mesa, GNOME, KDE, development tools, PipeWire, Wayland work, container tooling, and a fast-moving desktop stack. But those packages move through Fedora&apos;s packaging, testing, and release process instead of landing as a nonstop rolling stream like Arch.&lt;/p&gt;
&lt;p&gt;For a desktop user, that means Fedora usually feels fresh without making every update feel like a mini migration.&lt;/p&gt;
&lt;h2&gt;Fedora&apos;s Security Defaults Matter&lt;/h2&gt;
&lt;p&gt;Fedora also starts from a stronger security baseline. SELinux is enabled by default in enforcing mode. Firewalld is installed by default. The project has a long history of pushing hardening changes early and integrating them into the distro instead of leaving every user to bolt them on later.&lt;/p&gt;
&lt;p&gt;That does not make Fedora magically secure. You can still install bad software, run random scripts, weaken SELinux, open firewall ports, or add unsafe third-party repositories. But the default posture is different.&lt;/p&gt;
&lt;p&gt;On Fedora, a normal user starts with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SELinux enforcing&lt;/li&gt;
&lt;li&gt;firewalld available by default&lt;/li&gt;
&lt;li&gt;signed RPM repositories&lt;/li&gt;
&lt;li&gt;a predictable release lifecycle&lt;/li&gt;
&lt;li&gt;Flatpak as a common desktop app path&lt;/li&gt;
&lt;li&gt;strong upstream alignment with Red Hat and the wider Linux ecosystem&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a better default for most people than a minimal system where every security decision is pushed onto the user.&lt;/p&gt;
&lt;h2&gt;Stable Does Not Mean Old&lt;/h2&gt;
&lt;p&gt;People hear &quot;stable packages&quot; and think &quot;ancient packages.&quot; That is more Debian than Fedora.&lt;/p&gt;
&lt;p&gt;Fedora is not an LTS distro. It is not trying to freeze the desktop for five years. Fedora is closer to a fast, tested snapshot of the Linux ecosystem. You get new software quickly, but within a release structure that is easier to reason about than a pure rolling release.&lt;/p&gt;
&lt;p&gt;That is why Fedora makes sense for a power user who still wants modern hardware support and current desktop features. You do not have to choose between &quot;everything is old&quot; and &quot;everything changes every day.&quot;&lt;/p&gt;
&lt;p&gt;For most users, Fedora is the better balance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;newer than Ubuntu LTS or Debian Stable&lt;/li&gt;
&lt;li&gt;more predictable than Arch&lt;/li&gt;
&lt;li&gt;more secure out of the box than a minimal DIY install&lt;/li&gt;
&lt;li&gt;less dependent on community build scripts for common software&lt;/li&gt;
&lt;li&gt;still flexible enough for advanced users&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;When Arch Still Makes Sense&lt;/h2&gt;
&lt;p&gt;I am not saying everyone should delete Arch.&lt;/p&gt;
&lt;p&gt;Arch still makes sense if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you enjoy building the system yourself&lt;/li&gt;
&lt;li&gt;you want the newest packages immediately&lt;/li&gt;
&lt;li&gt;you read update news before upgrading&lt;/li&gt;
&lt;li&gt;you review AUR diffs&lt;/li&gt;
&lt;li&gt;you keep backups or snapshots&lt;/li&gt;
&lt;li&gt;you understand how to recover from a broken system&lt;/li&gt;
&lt;li&gt;you know which AUR packages you actually trust&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Arch is still one of the best learning distros ever made. It forces you to understand Linux in a way most distros do not. That is valuable.&lt;/p&gt;
&lt;p&gt;But there is a difference between a learning system and a production daily driver. If your machine is how you make videos, write code, run a business, manage servers, or do client work, then predictable defaults matter more.&lt;/p&gt;
&lt;h2&gt;My Takeaway&lt;/h2&gt;
&lt;p&gt;The AUR incident did not prove that Arch is bad. It proved that the AUR trust model requires attention, and most users do not give it enough attention.&lt;/p&gt;
&lt;p&gt;That is the part that should make people rethink their setup.&lt;/p&gt;
&lt;p&gt;If you are using Arch because you love the control and you actually review what you install, keep using Arch. If you are using Arch because a helper made the AUR feel like a giant one-command app store, you are probably taking more risk than you think.&lt;/p&gt;
&lt;p&gt;Fedora gives me most of what I want from modern Linux without making the whole system a constant trust exercise. It is current, secure by default, stable enough for real work, and still close enough to upstream that it does not feel stale.&lt;/p&gt;
&lt;p&gt;That is why switching from Arch to Fedora makes sense now.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Arch Linux: &lt;a href=&quot;https://archlinux.org/news/active-aur-malicious-packages-incident/&quot;&gt;https://archlinux.org/news/active-aur-malicious-packages-incident/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Phoronix: &lt;a href=&quot;https://www.phoronix.com/news/Arch-Linux-AUR-400-Compromised&quot;&gt;https://www.phoronix.com/news/Arch-Linux-AUR-400-Compromised&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The Hacker News: &lt;a href=&quot;https://thehackernews.com/2026/06/over-400-arch-linux-aur-packages.html&quot;&gt;https://thehackernews.com/2026/06/over-400-arch-linux-aur-packages.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fedora release lifecycle: &lt;a href=&quot;https://docs.fedoraproject.org/en-US/releases/lifecycle/&quot;&gt;https://docs.fedoraproject.org/en-US/releases/lifecycle/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fedora security features: &lt;a href=&quot;https://fedoraproject.org/wiki/Security_Features&quot;&gt;https://fedoraproject.org/wiki/Security_Features&lt;/a&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/ybm1KwlGKA0&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>Resolve in Arch Linux</title><link>https://christitus.com/resolve-in-arch-linux/</link><guid isPermaLink="true">https://christitus.com/resolve-in-arch-linux/</guid><description>&lt;p&gt;DaVinci Resolve on Arch Linux is one of those setups that can be perfect for weeks and then break after one system update. The problem is not that Arch is bad or Resolve is bad. The problem is that Resolve is a proprietary professional video editor built and tested against a conservative Linux stack, while Arch is a rolling-release distribution that moves libraries, GPU drivers, and desktop components quickly.&lt;/p&gt;
&lt;p&gt;This post goes through the common problems, the fixes that matter, and the workflow I use to make Resolve usable on Arch Linux.&lt;/p&gt;

&lt;h2&gt;The Big Picture&lt;/h2&gt;
&lt;p&gt;Blackmagic Design&apos;s Linux target is Rocky Linux, not Arch. Arch users rely on the AUR, community packaging, and wrapper fixes when Resolve expects older or different system libraries. That means the install can work extremely well, but you need to understand what is being fixed.&lt;/p&gt;
&lt;p&gt;There are three major problem areas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resolve launch errors caused by library/runtime mismatch&lt;/li&gt;
&lt;li&gt;GPU and OpenCL/CUDA setup&lt;/li&gt;
&lt;li&gt;Codec support, especially H.264, H.265, and AAC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The practical fix is to install Resolve cleanly, verify GPU compute, run Resolve through a compatibility wrapper when needed, and transcode unsupported media into native Resolve-friendly formats.&lt;/p&gt;
&lt;h2&gt;Install Resolve on Arch&lt;/h2&gt;
&lt;p&gt;Use the AUR package for the free version:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;paru -S davinci-resolve
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or the Studio version:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;paru -S davinci-resolve-studio
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Blackmagic requires a manual download for the Linux installer. If the AUR build fails because the ZIP is missing, download the exact version requested by the package from Blackmagic&apos;s support page, place it in the AUR build directory shown in the error, and run the install again.&lt;/p&gt;
&lt;p&gt;For a clean build environment, make sure you have the basics:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed base-devel git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do not randomly install old libraries from random mirrors. If the AUR package expects a specific dependency, use the package sources and comments from the AUR package first. Arch partial upgrades and manually pinned libraries are a great way to break this later.&lt;/p&gt;
&lt;h2&gt;GPU Compute Is Required&lt;/h2&gt;
&lt;p&gt;Resolve is not a normal desktop video editor. It expects GPU acceleration. If Resolve starts but says it cannot find a GPU, crashes when opening a project, or shows broken playback, check OpenCL or CUDA first.&lt;/p&gt;
&lt;p&gt;Install the correct stack for your GPU.&lt;/p&gt;
&lt;h3&gt;NVIDIA&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed nvidia nvidia-utils opencl-nvidia cuda
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify OpenCL:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clinfo | less
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If &lt;code&gt;clinfo&lt;/code&gt; does not show your NVIDIA GPU, Resolve will not be happy. Reboot after driver changes and make sure Secure Boot is not blocking the NVIDIA kernel module.&lt;/p&gt;
&lt;h3&gt;AMD&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed rocm-opencl-runtime
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clinfo | less
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AMD on Arch has changed over time. Some users used &lt;code&gt;opencl-amd&lt;/code&gt; from the AUR, but ROCm version changes can break Resolve. If Resolve crashes after an AMD OpenCL update, test &lt;code&gt;rocm-opencl-runtime&lt;/code&gt; from the official repos before chasing random downgrade guides.&lt;/p&gt;
&lt;h3&gt;Intel&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed intel-compute-runtime
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then verify:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clinfo | less
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Intel can work, but NVIDIA remains the least painful Resolve path on Linux because Blackmagic&apos;s Linux support matrix is CUDA-focused.&lt;/p&gt;
&lt;h2&gt;The Library Launch Problem&lt;/h2&gt;
&lt;p&gt;The classic Arch problem is that Resolve launches from &lt;code&gt;/opt/resolve/bin/resolve&lt;/code&gt;, then fails with library or symbol errors after an update. This happens because Resolve bundles some libraries but still interacts with system libraries. On a rolling distro, the ABI can move faster than Resolve.&lt;/p&gt;
&lt;p&gt;The quick fix is my &lt;code&gt;resolve-fix&lt;/code&gt; wrapper from:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ChrisTitusTech/resolve-linux&quot;&gt;https://github.com/ChrisTitusTech/resolve-linux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clone it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ChrisTitusTech/resolve-linux.git
cd resolve-linux
chmod +x resolve-fix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Run Resolve through the wrapper:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve-fix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The wrapper preloads Arch&apos;s GLib stack and puts &lt;code&gt;/usr/lib&lt;/code&gt; earlier in &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; before launching Resolve:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export LD_PRELOAD=/usr/lib/libglib-2.0.so.0:/usr/lib/libgobject-2.0.so.0:/usr/lib/libgio-2.0.so.0:/usr/lib/libgmodule-2.0.so.0
export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
exec /opt/resolve/bin/resolve &quot;$@&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If that fixes the launch, make it your normal Resolve command:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo install -m 755 resolve-fix /usr/local/bin/resolve-fix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then launch:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;resolve-fix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also edit your desktop launcher to run &lt;code&gt;/usr/local/bin/resolve-fix&lt;/code&gt; instead of the default Resolve binary.&lt;/p&gt;
&lt;h2&gt;Check Missing Libraries&lt;/h2&gt;
&lt;p&gt;If Resolve still will not launch, run:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ldd /opt/resolve/bin/resolve | grep &quot;not found&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Common fixes include:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed libxcrypt-compat glu apr-util
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do not install packages blindly. Run &lt;code&gt;ldd&lt;/code&gt;, see what is missing, then install the package that owns that library.&lt;/p&gt;
&lt;p&gt;To find the package for a missing library:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pacman -Fyx &apos;libcrypt.so.1&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If file database search is not enabled:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -Fy
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The Codec Problem&lt;/h2&gt;
&lt;p&gt;This is the part that confuses most people because MP4 is a container, not a codec.&lt;/p&gt;
&lt;p&gt;On Linux, Resolve codec support is different from Windows and macOS. Blackmagic&apos;s supported codec document for Resolve 20 lists Rocky Linux 8.6 CUDA as the Linux platform. In that Linux matrix, AAC is not available, while embedded audio support is limited to decodable formats such as PCM, MP3, FLAC, OPUS, and AC-3 depending on the container.&lt;/p&gt;
&lt;p&gt;That means common camera, phone, OBS, and downloaded clips can fail in weird ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MP4 imports but video is missing&lt;/li&gt;
&lt;li&gt;Video imports but audio is silent&lt;/li&gt;
&lt;li&gt;H.264 or H.265 media shows as offline&lt;/li&gt;
&lt;li&gt;Free Resolve cannot decode formats that Studio can&lt;/li&gt;
&lt;li&gt;Studio still does not magically fix AAC audio on Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The most reliable answer is to transcode footage before editing.&lt;/p&gt;
&lt;h2&gt;Convert Footage to Native Resolve Formats&lt;/h2&gt;
&lt;p&gt;Use the conversion script from the same repo:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ChrisTitusTech/resolve-linux&quot;&gt;https://github.com/ChrisTitusTech/resolve-linux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install dependencies:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed ffmpeg parallel
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Clone and prepare the script:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ChrisTitusTech/resolve-linux.git
cd resolve-linux
chmod +x resolve_convert.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Preview what will be converted:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh -n /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Convert the folder:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The script recursively scans the folder, skips its own output directory, and mirrors the original folder layout under &lt;code&gt;resolve_ready/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Video is converted to:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;DNxHR in a .mov container
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Audio is converted to:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;PCM 24-bit 48 kHz .wav
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That avoids the common Linux Resolve problems with H.264, H.265, and AAC. DNxHR takes much more disk space than camera originals, but it edits smoothly and imports cleanly.&lt;/p&gt;
&lt;h2&gt;Quality Profiles&lt;/h2&gt;
&lt;p&gt;The conversion script supports multiple DNxHR profiles:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh -q lb /path/to/footage
./resolve_convert.sh -q sq /path/to/footage
./resolve_convert.sh -q hq /path/to/footage
./resolve_convert.sh -q hqx /path/to/footage
./resolve_convert.sh -q 444 /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Use them like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lb&lt;/code&gt;: proxy/offline editing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sq&lt;/code&gt;: smaller intermediate files&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hq&lt;/code&gt;: good default&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hqx&lt;/code&gt;: high quality 12-bit work&lt;/li&gt;
&lt;li&gt;&lt;code&gt;444&lt;/code&gt;: maximum quality when you actually need it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For most YouTube and screen-recording workflows, &lt;code&gt;hq&lt;/code&gt; is the default I would use. For rough cuts on a laptop, use &lt;code&gt;lb&lt;/code&gt; and relink later if needed.&lt;/p&gt;
&lt;p&gt;Parallel conversion:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh -q hq -j 4 /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do not point this at a nearly full disk. DNxHR files are large.&lt;/p&gt;
&lt;h2&gt;Fix Silent Audio&lt;/h2&gt;
&lt;p&gt;If the clip imports but has no audio, it is probably AAC. Convert the file:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh /path/to/clip-folder
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or convert just the audio manually:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg -i input.mp4 -vn -c:a pcm_s24le -ar 48000 output.wav
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then import the WAV into Resolve and sync it with the video.&lt;/p&gt;
&lt;p&gt;For batch work, the script is easier because it keeps the folder structure and handles video plus audio together.&lt;/p&gt;
&lt;h2&gt;Fix Media Offline for MP4&lt;/h2&gt;
&lt;p&gt;If an MP4 shows &quot;Media Offline&quot;, inspect it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ffprobe input.mp4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If it is H.264 or H.265, convert it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh -q hq /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then import the converted &lt;code&gt;.mov&lt;/code&gt; from &lt;code&gt;resolve_ready/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Do not waste time installing random codec packs. Resolve does not use your desktop media player codec stack the same way VLC or Kdenlive does.&lt;/p&gt;
&lt;h2&gt;Fix Fonts Missing in Resolve&lt;/h2&gt;
&lt;p&gt;Resolve may only look at system font paths. If fonts installed under your home directory do not appear, open Fusion settings and update the font path map from:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;SystemFonts:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;to:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;SystemFonts:;$HOME/.local/share/fonts
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Restart Resolve after changing it.&lt;/p&gt;
&lt;h2&gt;Backup Before You Break It&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;resolve-linux&lt;/code&gt; repo also includes &lt;code&gt;resolve_backup.sh&lt;/code&gt;, which can archive the Resolve install and user configuration. This is useful before reinstalling, moving to another Linux machine, or testing a big driver update.&lt;/p&gt;
&lt;p&gt;Run a dry run first:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_backup.sh --dry-run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create a backup:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_backup.sh --output-dir ~/backups
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Restore from an archive:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_backup.sh --restore inputfile.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is not a replacement for real system snapshots, but it is useful for preserving Resolve settings, LUTs, scripts, fonts, and the application install.&lt;/p&gt;
&lt;h2&gt;Troubleshooting Checklist&lt;/h2&gt;
&lt;h3&gt;Resolve does not launch&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;resolve-fix
ldd /opt/resolve/bin/resolve | grep &quot;not found&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install missing libraries with &lt;code&gt;pacman&lt;/code&gt;, not random downloads.&lt;/p&gt;
&lt;h3&gt;Resolve cannot find a GPU&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clinfo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install the correct OpenCL/CUDA stack for your GPU and reboot.&lt;/p&gt;
&lt;h3&gt;Resolve crashes after a system update&lt;/h3&gt;
&lt;p&gt;Try the wrapper first:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;resolve-fix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then check AUR comments for the exact Resolve package version. Rolling distros break proprietary apps when runtime libraries move.&lt;/p&gt;
&lt;h3&gt;MP4 imports without audio&lt;/h3&gt;
&lt;p&gt;Convert AAC to PCM:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;MP4 or H.265 shows Media Offline&lt;/h3&gt;
&lt;p&gt;Convert to DNxHR:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh -q hq /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Conversion script says DNxHD/DNxHR is missing&lt;/h3&gt;
&lt;p&gt;Reinstall Arch&apos;s ffmpeg package:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S ffmpeg
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Recommended Workflow&lt;/h2&gt;
&lt;p&gt;My practical Arch workflow is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install Resolve from the AUR.&lt;/li&gt;
&lt;li&gt;Install the right GPU compute stack.&lt;/li&gt;
&lt;li&gt;Verify with &lt;code&gt;clinfo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Launch with &lt;code&gt;resolve-fix&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Convert all questionable footage with &lt;code&gt;resolve_convert.sh&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Edit from &lt;code&gt;resolve_ready/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Backup Resolve settings before major system or driver updates.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Arch Linux can be a great Resolve workstation, but only if you stop treating Resolve like a normal Arch-native package. It is proprietary software with Linux-specific codec limitations and runtime assumptions. Once you wrap the launch and feed it DNxHR/PCM media, the experience becomes much more predictable.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ChrisTitusTech Resolve Linux tools: &lt;a href=&quot;https://github.com/ChrisTitusTech/resolve-linux&quot;&gt;https://github.com/ChrisTitusTech/resolve-linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Arch Wiki DaVinci Resolve page: &lt;a href=&quot;https://wiki.archlinux.org/title/DaVinci_Resolve&quot;&gt;https://wiki.archlinux.org/title/DaVinci_Resolve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DaVinci Resolve 20 supported codecs: &lt;a href=&quot;https://documents.blackmagicdesign.com/SupportNotes/DaVinci_Resolve_20_Supported_Codec_List.pdf&quot;&gt;https://documents.blackmagicdesign.com/SupportNotes/DaVinci_Resolve_20_Supported_Codec_List.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AUR &lt;code&gt;davinci-resolve&lt;/code&gt; package: &lt;a href=&quot;https://aur.archlinux.org/packages/davinci-resolve&quot;&gt;https://aur.archlinux.org/packages/davinci-resolve&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;YouTube Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/oHsboGBxUuc&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>Tue, 23 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;DaVinci Resolve on Arch Linux is one of those setups that can be perfect for weeks and then break after one system update. The problem is not that Arch is bad or Resolve is bad. The problem is that Resolve is a proprietary professional video editor built and tested against a conservative Linux stack, while Arch is a rolling-release distribution that moves libraries, GPU drivers, and desktop components quickly.&lt;/p&gt;
&lt;p&gt;This post goes through the common problems, the fixes that matter, and the workflow I use to make Resolve usable on Arch Linux.&lt;/p&gt;

&lt;h2&gt;The Big Picture&lt;/h2&gt;
&lt;p&gt;Blackmagic Design&apos;s Linux target is Rocky Linux, not Arch. Arch users rely on the AUR, community packaging, and wrapper fixes when Resolve expects older or different system libraries. That means the install can work extremely well, but you need to understand what is being fixed.&lt;/p&gt;
&lt;p&gt;There are three major problem areas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resolve launch errors caused by library/runtime mismatch&lt;/li&gt;
&lt;li&gt;GPU and OpenCL/CUDA setup&lt;/li&gt;
&lt;li&gt;Codec support, especially H.264, H.265, and AAC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The practical fix is to install Resolve cleanly, verify GPU compute, run Resolve through a compatibility wrapper when needed, and transcode unsupported media into native Resolve-friendly formats.&lt;/p&gt;
&lt;h2&gt;Install Resolve on Arch&lt;/h2&gt;
&lt;p&gt;Use the AUR package for the free version:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;paru -S davinci-resolve
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or the Studio version:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;paru -S davinci-resolve-studio
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Blackmagic requires a manual download for the Linux installer. If the AUR build fails because the ZIP is missing, download the exact version requested by the package from Blackmagic&apos;s support page, place it in the AUR build directory shown in the error, and run the install again.&lt;/p&gt;
&lt;p&gt;For a clean build environment, make sure you have the basics:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed base-devel git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do not randomly install old libraries from random mirrors. If the AUR package expects a specific dependency, use the package sources and comments from the AUR package first. Arch partial upgrades and manually pinned libraries are a great way to break this later.&lt;/p&gt;
&lt;h2&gt;GPU Compute Is Required&lt;/h2&gt;
&lt;p&gt;Resolve is not a normal desktop video editor. It expects GPU acceleration. If Resolve starts but says it cannot find a GPU, crashes when opening a project, or shows broken playback, check OpenCL or CUDA first.&lt;/p&gt;
&lt;p&gt;Install the correct stack for your GPU.&lt;/p&gt;
&lt;h3&gt;NVIDIA&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed nvidia nvidia-utils opencl-nvidia cuda
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify OpenCL:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clinfo | less
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If &lt;code&gt;clinfo&lt;/code&gt; does not show your NVIDIA GPU, Resolve will not be happy. Reboot after driver changes and make sure Secure Boot is not blocking the NVIDIA kernel module.&lt;/p&gt;
&lt;h3&gt;AMD&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed rocm-opencl-runtime
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clinfo | less
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;AMD on Arch has changed over time. Some users used &lt;code&gt;opencl-amd&lt;/code&gt; from the AUR, but ROCm version changes can break Resolve. If Resolve crashes after an AMD OpenCL update, test &lt;code&gt;rocm-opencl-runtime&lt;/code&gt; from the official repos before chasing random downgrade guides.&lt;/p&gt;
&lt;h3&gt;Intel&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed intel-compute-runtime
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then verify:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clinfo | less
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Intel can work, but NVIDIA remains the least painful Resolve path on Linux because Blackmagic&apos;s Linux support matrix is CUDA-focused.&lt;/p&gt;
&lt;h2&gt;The Library Launch Problem&lt;/h2&gt;
&lt;p&gt;The classic Arch problem is that Resolve launches from &lt;code&gt;/opt/resolve/bin/resolve&lt;/code&gt;, then fails with library or symbol errors after an update. This happens because Resolve bundles some libraries but still interacts with system libraries. On a rolling distro, the ABI can move faster than Resolve.&lt;/p&gt;
&lt;p&gt;The quick fix is my &lt;code&gt;resolve-fix&lt;/code&gt; wrapper from:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ChrisTitusTech/resolve-linux&quot;&gt;https://github.com/ChrisTitusTech/resolve-linux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clone it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ChrisTitusTech/resolve-linux.git
cd resolve-linux
chmod +x resolve-fix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Run Resolve through the wrapper:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve-fix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The wrapper preloads Arch&apos;s GLib stack and puts &lt;code&gt;/usr/lib&lt;/code&gt; earlier in &lt;code&gt;LD_LIBRARY_PATH&lt;/code&gt; before launching Resolve:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export LD_PRELOAD=/usr/lib/libglib-2.0.so.0:/usr/lib/libgobject-2.0.so.0:/usr/lib/libgio-2.0.so.0:/usr/lib/libgmodule-2.0.so.0
export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH
exec /opt/resolve/bin/resolve &quot;$@&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If that fixes the launch, make it your normal Resolve command:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo install -m 755 resolve-fix /usr/local/bin/resolve-fix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then launch:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;resolve-fix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also edit your desktop launcher to run &lt;code&gt;/usr/local/bin/resolve-fix&lt;/code&gt; instead of the default Resolve binary.&lt;/p&gt;
&lt;h2&gt;Check Missing Libraries&lt;/h2&gt;
&lt;p&gt;If Resolve still will not launch, run:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ldd /opt/resolve/bin/resolve | grep &quot;not found&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Common fixes include:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed libxcrypt-compat glu apr-util
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do not install packages blindly. Run &lt;code&gt;ldd&lt;/code&gt;, see what is missing, then install the package that owns that library.&lt;/p&gt;
&lt;p&gt;To find the package for a missing library:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pacman -Fyx &apos;libcrypt.so.1&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If file database search is not enabled:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -Fy
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The Codec Problem&lt;/h2&gt;
&lt;p&gt;This is the part that confuses most people because MP4 is a container, not a codec.&lt;/p&gt;
&lt;p&gt;On Linux, Resolve codec support is different from Windows and macOS. Blackmagic&apos;s supported codec document for Resolve 20 lists Rocky Linux 8.6 CUDA as the Linux platform. In that Linux matrix, AAC is not available, while embedded audio support is limited to decodable formats such as PCM, MP3, FLAC, OPUS, and AC-3 depending on the container.&lt;/p&gt;
&lt;p&gt;That means common camera, phone, OBS, and downloaded clips can fail in weird ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MP4 imports but video is missing&lt;/li&gt;
&lt;li&gt;Video imports but audio is silent&lt;/li&gt;
&lt;li&gt;H.264 or H.265 media shows as offline&lt;/li&gt;
&lt;li&gt;Free Resolve cannot decode formats that Studio can&lt;/li&gt;
&lt;li&gt;Studio still does not magically fix AAC audio on Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The most reliable answer is to transcode footage before editing.&lt;/p&gt;
&lt;h2&gt;Convert Footage to Native Resolve Formats&lt;/h2&gt;
&lt;p&gt;Use the conversion script from the same repo:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ChrisTitusTech/resolve-linux&quot;&gt;https://github.com/ChrisTitusTech/resolve-linux&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install dependencies:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S --needed ffmpeg parallel
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Clone and prepare the script:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ChrisTitusTech/resolve-linux.git
cd resolve-linux
chmod +x resolve_convert.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Preview what will be converted:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh -n /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Convert the folder:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The script recursively scans the folder, skips its own output directory, and mirrors the original folder layout under &lt;code&gt;resolve_ready/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Video is converted to:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;DNxHR in a .mov container
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Audio is converted to:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;PCM 24-bit 48 kHz .wav
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That avoids the common Linux Resolve problems with H.264, H.265, and AAC. DNxHR takes much more disk space than camera originals, but it edits smoothly and imports cleanly.&lt;/p&gt;
&lt;h2&gt;Quality Profiles&lt;/h2&gt;
&lt;p&gt;The conversion script supports multiple DNxHR profiles:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh -q lb /path/to/footage
./resolve_convert.sh -q sq /path/to/footage
./resolve_convert.sh -q hq /path/to/footage
./resolve_convert.sh -q hqx /path/to/footage
./resolve_convert.sh -q 444 /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Use them like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lb&lt;/code&gt;: proxy/offline editing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sq&lt;/code&gt;: smaller intermediate files&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hq&lt;/code&gt;: good default&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hqx&lt;/code&gt;: high quality 12-bit work&lt;/li&gt;
&lt;li&gt;&lt;code&gt;444&lt;/code&gt;: maximum quality when you actually need it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For most YouTube and screen-recording workflows, &lt;code&gt;hq&lt;/code&gt; is the default I would use. For rough cuts on a laptop, use &lt;code&gt;lb&lt;/code&gt; and relink later if needed.&lt;/p&gt;
&lt;p&gt;Parallel conversion:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh -q hq -j 4 /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do not point this at a nearly full disk. DNxHR files are large.&lt;/p&gt;
&lt;h2&gt;Fix Silent Audio&lt;/h2&gt;
&lt;p&gt;If the clip imports but has no audio, it is probably AAC. Convert the file:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh /path/to/clip-folder
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or convert just the audio manually:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ffmpeg -i input.mp4 -vn -c:a pcm_s24le -ar 48000 output.wav
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then import the WAV into Resolve and sync it with the video.&lt;/p&gt;
&lt;p&gt;For batch work, the script is easier because it keeps the folder structure and handles video plus audio together.&lt;/p&gt;
&lt;h2&gt;Fix Media Offline for MP4&lt;/h2&gt;
&lt;p&gt;If an MP4 shows &quot;Media Offline&quot;, inspect it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ffprobe input.mp4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If it is H.264 or H.265, convert it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh -q hq /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then import the converted &lt;code&gt;.mov&lt;/code&gt; from &lt;code&gt;resolve_ready/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Do not waste time installing random codec packs. Resolve does not use your desktop media player codec stack the same way VLC or Kdenlive does.&lt;/p&gt;
&lt;h2&gt;Fix Fonts Missing in Resolve&lt;/h2&gt;
&lt;p&gt;Resolve may only look at system font paths. If fonts installed under your home directory do not appear, open Fusion settings and update the font path map from:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;SystemFonts:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;to:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;SystemFonts:;$HOME/.local/share/fonts
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Restart Resolve after changing it.&lt;/p&gt;
&lt;h2&gt;Backup Before You Break It&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;resolve-linux&lt;/code&gt; repo also includes &lt;code&gt;resolve_backup.sh&lt;/code&gt;, which can archive the Resolve install and user configuration. This is useful before reinstalling, moving to another Linux machine, or testing a big driver update.&lt;/p&gt;
&lt;p&gt;Run a dry run first:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_backup.sh --dry-run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create a backup:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_backup.sh --output-dir ~/backups
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Restore from an archive:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_backup.sh --restore inputfile.tar.gz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is not a replacement for real system snapshots, but it is useful for preserving Resolve settings, LUTs, scripts, fonts, and the application install.&lt;/p&gt;
&lt;h2&gt;Troubleshooting Checklist&lt;/h2&gt;
&lt;h3&gt;Resolve does not launch&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;resolve-fix
ldd /opt/resolve/bin/resolve | grep &quot;not found&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install missing libraries with &lt;code&gt;pacman&lt;/code&gt;, not random downloads.&lt;/p&gt;
&lt;h3&gt;Resolve cannot find a GPU&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;clinfo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install the correct OpenCL/CUDA stack for your GPU and reboot.&lt;/p&gt;
&lt;h3&gt;Resolve crashes after a system update&lt;/h3&gt;
&lt;p&gt;Try the wrapper first:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;resolve-fix
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then check AUR comments for the exact Resolve package version. Rolling distros break proprietary apps when runtime libraries move.&lt;/p&gt;
&lt;h3&gt;MP4 imports without audio&lt;/h3&gt;
&lt;p&gt;Convert AAC to PCM:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;MP4 or H.265 shows Media Offline&lt;/h3&gt;
&lt;p&gt;Convert to DNxHR:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./resolve_convert.sh -q hq /path/to/footage
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Conversion script says DNxHD/DNxHR is missing&lt;/h3&gt;
&lt;p&gt;Reinstall Arch&apos;s ffmpeg package:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -S ffmpeg
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Recommended Workflow&lt;/h2&gt;
&lt;p&gt;My practical Arch workflow is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install Resolve from the AUR.&lt;/li&gt;
&lt;li&gt;Install the right GPU compute stack.&lt;/li&gt;
&lt;li&gt;Verify with &lt;code&gt;clinfo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Launch with &lt;code&gt;resolve-fix&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Convert all questionable footage with &lt;code&gt;resolve_convert.sh&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Edit from &lt;code&gt;resolve_ready/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Backup Resolve settings before major system or driver updates.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Arch Linux can be a great Resolve workstation, but only if you stop treating Resolve like a normal Arch-native package. It is proprietary software with Linux-specific codec limitations and runtime assumptions. Once you wrap the launch and feed it DNxHR/PCM media, the experience becomes much more predictable.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ChrisTitusTech Resolve Linux tools: &lt;a href=&quot;https://github.com/ChrisTitusTech/resolve-linux&quot;&gt;https://github.com/ChrisTitusTech/resolve-linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Arch Wiki DaVinci Resolve page: &lt;a href=&quot;https://wiki.archlinux.org/title/DaVinci_Resolve&quot;&gt;https://wiki.archlinux.org/title/DaVinci_Resolve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DaVinci Resolve 20 supported codecs: &lt;a href=&quot;https://documents.blackmagicdesign.com/SupportNotes/DaVinci_Resolve_20_Supported_Codec_List.pdf&quot;&gt;https://documents.blackmagicdesign.com/SupportNotes/DaVinci_Resolve_20_Supported_Codec_List.pdf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AUR &lt;code&gt;davinci-resolve&lt;/code&gt; package: &lt;a href=&quot;https://aur.archlinux.org/packages/davinci-resolve&quot;&gt;https://aur.archlinux.org/packages/davinci-resolve&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;YouTube Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/oHsboGBxUuc&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>How to Benchmark in Linux</title><link>https://christitus.com/how-to-benchmark-in-linux/</link><guid isPermaLink="true">https://christitus.com/how-to-benchmark-in-linux/</guid><description>&lt;p&gt;Proper Linux benchmarking is not about the biggest single run. It is about building a clean baseline, controlling variables, repeating runs for statistical validity, and generating charts that show the data clearly.&lt;/p&gt;
&lt;p&gt;The Phoronix Test Suite provides the structure: repeatable workloads, saved results, baseline comparison, and batch automation. MangoHud captures frame-time data. Together with a Python plotting tool, you get a complete workflow from raw test data to publication-ready charts.&lt;/p&gt;

&lt;h2&gt;Core Principle: Test One Variable at a Time&lt;/h2&gt;
&lt;p&gt;Before running any benchmarks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Same hardware, distro, and driver stack each time&lt;/li&gt;
&lt;li&gt;Same game patch or application version&lt;/li&gt;
&lt;li&gt;Same graphics preset and resolution&lt;/li&gt;
&lt;li&gt;Baseline run first, then one controlled change, then re-run&lt;/li&gt;
&lt;li&gt;Repeat at least 3 to 5 times per configuration&lt;/li&gt;
&lt;li&gt;Log hardware info (CPU, GPU, kernel, Mesa version) before each session&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Phoronix Test Suite saves this metadata automatically. If you change multiple variables at once, your data proves nothing.&lt;/p&gt;
&lt;h2&gt;Install the Tools&lt;/h2&gt;
&lt;h3&gt;Phoronix Test Suite&lt;/h3&gt;
&lt;h4&gt;Install Phoronix Test Suite on Debian&lt;/h4&gt;
&lt;p&gt;Debian no longer ships &lt;code&gt;phoronix-test-suite&lt;/code&gt;; its tracker marks the package as removed. The supported alternative is installing from the &lt;a href=&quot;https://github.com/phoronix-test-suite/phoronix-test-suite&quot;&gt;upstream Git repository&lt;/a&gt;. See the &lt;a href=&quot;https://tracker.debian.org/pkg/phoronix-test-suite&quot;&gt;Debian Package Tracker&lt;/a&gt; for the package status.&lt;/p&gt;
&lt;h5&gt;1. Install prerequisites&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt update
sudo apt install git php-cli ca-certificates
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Only PHP CLI is mandatory for the test-suite framework. Individual benchmarks may require additional compilers and libraries, which Phoronix can usually install through APT. See the &lt;a href=&quot;https://www.phoronix-test-suite.com/?k=downloads&quot;&gt;official download documentation&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h5&gt;2. Download the source&lt;/h5&gt;
&lt;p&gt;Keep the repository so it can be updated later:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p &quot;$HOME/src&quot;
cd &quot;$HOME/src&quot;

git clone --depth 1 \
  https://github.com/phoronix-test-suite/phoronix-test-suite.git

cd phoronix-test-suite
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Test it directly before installing:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./phoronix-test-suite version
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3. Install system-wide&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo ./install-sh
hash -r
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify the installation:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;phoronix-test-suite version
phoronix-test-suite system-info
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The command should now be installed as &lt;code&gt;/usr/bin/phoronix-test-suite&lt;/code&gt;.&lt;/p&gt;
&lt;h5&gt;4. Run a benchmark&lt;/h5&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;phoronix-test-suite benchmark smallpt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or inspect available tests:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;phoronix-test-suite list-available-tests
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Phoronix will prompt before downloading benchmarks, installing dependencies, or uploading results.&lt;/p&gt;
&lt;h5&gt;Updating manually&lt;/h5&gt;
&lt;p&gt;This installation is not managed by APT. Update it with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd &quot;$HOME/src/phoronix-test-suite&quot;
git pull --ff-only
sudo ./install-sh
phoronix-test-suite version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Re-running &lt;code&gt;install-sh&lt;/code&gt; replaces the existing installation with the updated source.&lt;/p&gt;
&lt;h4&gt;Other distributions&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Ubuntu
sudo apt install phoronix-test-suite

# Fedora
sudo dnf install phoronix-test-suite

# Arch
sudo pacman -S phoronix-test-suite
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;MangoHud (required for 1% lows and frame consistency)&lt;/h3&gt;
&lt;p&gt;MangoHud captures frame-time data needed to calculate 1% lows and analyze frame pacing. Without it, you only get average FPS.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Debian/Ubuntu
sudo apt install mangohud

# Fedora
sudo dnf install mangohud

# Arch
sudo pacman -S mangohud
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;a href=&quot;http://Plot.py&quot;&gt;Plot.py&lt;/a&gt; for Charts&lt;/h3&gt;
&lt;p&gt;Clone the Linux benchmarks repository to get the plotting script:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ChrisTitusTech/linux-benchmarks.git
cd linux-benchmarks
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Python dependencies:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install numpy pandas matplotlib
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Prep Your System&lt;/h2&gt;
&lt;p&gt;Before every test session:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reboot and let the system settle&lt;/li&gt;
&lt;li&gt;Close browsers, Discord, RGB software, and unnecessary services&lt;/li&gt;
&lt;li&gt;Plug in laptops and use the same power mode for every run&lt;/li&gt;
&lt;li&gt;Keep the same CPU governor and GPU mode&lt;/li&gt;
&lt;li&gt;Check kernel, Mesa version, and game patch level&lt;/li&gt;
&lt;li&gt;Note the date/time and save this metadata somewhere&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Phoronix automatically logs hardware info, so you just need to know what you changed between runs.&lt;/p&gt;
&lt;h2&gt;Quick Workflow: Batch Setup and Benchmark&lt;/h2&gt;
&lt;h3&gt;1. Configure Batch Mode Once&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;phoronix-test-suite batch-setup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This prompts you to set defaults for automated testing: whether to save results to OpenBenchmarking, how many times to run each test, and whether to use strict mode. Set these once and reuse them for consistency.&lt;/p&gt;
&lt;h3&gt;2. Run Batch Benchmarks&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export MANGOHUD=1
export MANGOHUD_CONFIG=&quot;output_folder=$HOME/benchmark-logs,autostart_log=1,benchmark_percentiles=AVG+1+0.1&quot;

TEST_RESULTS_NAME=&quot;baseline&quot; \
TEST_RESULTS_IDENTIFIER=&quot;stock-system&quot; \
TEST_RESULTS_DESCRIPTION=&quot;Baseline on stock kernel&quot; \
TEST_EXEC_PREPEND=&quot;mangohud&quot; \
phoronix-test-suite batch-benchmark pts/c-ray pts/compress-7zip pts/openssl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The batch mode processes all tests without prompting you. Logs are saved to &lt;code&gt;~/.phoronix-test-suite/&lt;/code&gt; with metadata automatically included.&lt;/p&gt;
&lt;p&gt;Repeat this command after making one change (kernel, driver, Proton version) with a different identifier:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export MANGOHUD=1
export MANGOHUD_CONFIG=&quot;output_folder=$HOME/benchmark-logs,autostart_log=1,benchmark_percentiles=AVG+1+0.1&quot;

TEST_RESULTS_NAME=&quot;tested&quot; \
TEST_RESULTS_IDENTIFIER=&quot;zen-kernel&quot; \
TEST_RESULTS_DESCRIPTION=&quot;Same workload on Zen kernel&quot; \
TEST_EXEC_PREPEND=&quot;mangohud&quot; \
phoronix-test-suite batch-benchmark pts/c-ray pts/compress-7zip pts/openssl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you have two saved result sets to compare.&lt;/p&gt;
&lt;h3&gt;3. Export Results to CSV&lt;/h3&gt;
&lt;p&gt;After running benchmarks, export the results to ~/benchmark-logs:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;phoronix-test-suite result-file-to-csv baseline ~/benchmark-logs/baseline.csv
phoronix-test-suite result-file-to-csv tested ~/benchmark-logs/tested.csv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This creates CSV files that &lt;code&gt;plot.py&lt;/code&gt; can read. The CSV contains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Benchmark name&lt;/li&gt;
&lt;li&gt;Average score (or FPS)&lt;/li&gt;
&lt;li&gt;Run count&lt;/li&gt;
&lt;li&gt;Variance, standard deviation, and standard error (if available)&lt;/li&gt;
&lt;li&gt;System metadata (CPU, GPU, kernel)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MangoHud logs are already being saved to ~/benchmark-logs as individual CSV files with frame-time data.&lt;/p&gt;
&lt;h3&gt;4. Understanding the Export-CSV Workflow&lt;/h3&gt;
&lt;p&gt;The export process transforms Phoronix binary result files into text formats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;result-file-to-csv&lt;/strong&gt;: Standard export with aggregated stats per benchmark&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;result-file-raw-to-csv&lt;/strong&gt;: Individual run data; useful if you need to inspect variance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;result-file-stats&lt;/strong&gt;: Statistical summary&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For &lt;code&gt;plot.py&lt;/code&gt;, you need CSV files with:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Phoronix CSV exports&lt;/strong&gt; — Benchmark names, average FPS/scores, run count, variance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MangoHud CSV logs&lt;/strong&gt; — Frame-time data with columns like &lt;code&gt;fps&lt;/code&gt; and &lt;code&gt;frametime&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Both get saved in the same directory and &lt;code&gt;plot.py&lt;/code&gt; finds them automatically.&lt;/p&gt;
&lt;h2&gt;Running &lt;a href=&quot;http://plot.py&quot;&gt;plot.py&lt;/a&gt; to Generate Charts&lt;/h2&gt;
&lt;p&gt;Once you have CSV files from both Phoronix exports and MangoHud logs in ~/benchmark-logs, generate visualizations:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd /path/to/linux-benchmarks
python plot.py --log-dir ~/benchmark-logs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The script generates two types of charts:&lt;/p&gt;
&lt;h3&gt;1. MangoHud FPS Distribution Heatmap&lt;/h3&gt;
&lt;p&gt;Shows frame-time consistency across all runs. Each row is one run, and the heatmap colors show how many frames hit each FPS bucket. Vertical lines mark:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;0.1%ile&lt;/strong&gt; (darkest): lowest 0.1% of frames&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1%ile&lt;/strong&gt; (dark): lowest 1% of frames&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;50%ile&lt;/strong&gt; (blue): median frame rate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the heatmap is wide and flat, frames are inconsistent. If it is tall and narrow, frame pacing is smooth.&lt;/p&gt;
&lt;h3&gt;2. Phoronix Average FPS Bar Chart&lt;/h3&gt;
&lt;p&gt;Shows average performance per benchmark with run count, variance, and standard error labeled. If variance is high or run count is low, that test may not be stable yet.&lt;/p&gt;
&lt;h3&gt;Output Files&lt;/h3&gt;
&lt;p&gt;Both charts are saved as PNG files in ~/benchmark-logs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mangohud_bar_chart.png&lt;/code&gt; — FPS distribution heatmap (frame consistency from MangoHud logs)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;*_avg_fps_bar_chart.png&lt;/code&gt; — One per Phoronix CSV export (average FPS per benchmark)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Enriching Phoronix Data with MangoHud Stats&lt;/h2&gt;
&lt;p&gt;If your Phoronix export only has one aggregate result per benchmark (common when exporting from the GUI), &lt;code&gt;plot.py&lt;/code&gt; automatically matches MangoHud runs by name pattern and enriches the Phoronix data with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Actual run count from multiple MangoHud passes&lt;/li&gt;
&lt;li&gt;Calculated variance and standard error&lt;/li&gt;
&lt;li&gt;Frame-time percentiles (0.1%, 1%, 50%)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Complete Example: Kernel Comparison&lt;/h2&gt;
&lt;p&gt;Here&apos;s a real-world walkthrough:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. Configure batch mode
phoronix-test-suite batch-setup

# 2. Set up logging environment
export MANGOHUD=1
export MANGOHUD_CONFIG=&quot;output_folder=$HOME/benchmark-logs,autostart_log=1,benchmark_percentiles=AVG+1+0.1&quot;

# 3. Run baseline on stock kernel (reboot first)
TEST_RESULTS_NAME=&quot;kernel-compare&quot; \
TEST_RESULTS_IDENTIFIER=&quot;stock-distro&quot; \
TEST_RESULTS_DESCRIPTION=&quot;Stock distro kernel&quot; \
TEST_EXEC_PREPEND=&quot;mangohud&quot; \
phoronix-test-suite batch-benchmark pts/c-ray pts/compress-7zip pts/openssl

# 4. Reboot into Zen kernel and run same tests
TEST_RESULTS_NAME=&quot;kernel-compare&quot; \
TEST_RESULTS_IDENTIFIER=&quot;zen-kernel&quot; \
TEST_RESULTS_DESCRIPTION=&quot;CachyOS Zen kernel&quot; \
TEST_EXEC_PREPEND=&quot;mangohud&quot; \
phoronix-test-suite batch-benchmark pts/c-ray pts/compress-7zip pts/openssl

# 5. Export both results to CSV
phoronix-test-suite result-file-to-csv kernel-compare ~/benchmark-logs/kernel-compare.csv

# 6. Run plot.py to generate charts
cd /path/to/linux-benchmarks
python plot.py --log-dir ~/benchmark-logs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One bar chart showing average FPS for each test under both kernels&lt;/li&gt;
&lt;li&gt;Run counts, variance, and error bars on the chart&lt;/li&gt;
&lt;li&gt;MangoHud frame-time heatmaps if you also logged with MangoHud&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is publication-ready data: controlled variables, multiple runs, statistical validity, and clear visualization.&lt;/p&gt;
&lt;h2&gt;What the Charts Tell You&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bar chart reading:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Higher bars = better performance&lt;/li&gt;
&lt;li&gt;Variance labeled in red: if it is high, the result is noisy&lt;/li&gt;
&lt;li&gt;Small error bars = consistent performance across runs&lt;/li&gt;
&lt;li&gt;Large error bars = inconsistent or thermal-throttled performance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Heatmap reading:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tall narrow heatmap = consistent frame pacing&lt;/li&gt;
&lt;li&gt;Wide scattered heatmap = erratic frame delivery, even if average FPS is high&lt;/li&gt;
&lt;li&gt;Compare rows: if one kernel produces more consistent colors, it has better frame consistency&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Workflow Checklist&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Reboot and verify kernel/driver/Mesa version&lt;/li&gt;
&lt;li&gt;[ ] Close unnecessary services&lt;/li&gt;
&lt;li&gt;[ ] Run &lt;code&gt;phoronix-test-suite batch-setup&lt;/code&gt; once&lt;/li&gt;
&lt;li&gt;[ ] Run baseline: &lt;code&gt;phoronix-test-suite batch-benchmark pts/...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[ ] Make one change only (kernel, driver, etc.)&lt;/li&gt;
&lt;li&gt;[ ] Run same tests again with new identifier&lt;/li&gt;
&lt;li&gt;[ ] Export: &lt;code&gt;phoronix-test-suite result-file-to-csv &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[ ] Generate charts: &lt;code&gt;python plot.py --log-dir &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[ ] Compare against baseline&lt;/li&gt;
&lt;li&gt;[ ] Repeat for next variable&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Final Results&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/pts-benchmark.webp&quot; alt=&quot;pts-benchmark&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/mangohud-benchmark.webp&quot; alt=&quot;mangohud-benchmark&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/gn0x-Tg1qxk&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, 15 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Proper Linux benchmarking is not about the biggest single run. It is about building a clean baseline, controlling variables, repeating runs for statistical validity, and generating charts that show the data clearly.&lt;/p&gt;
&lt;p&gt;The Phoronix Test Suite provides the structure: repeatable workloads, saved results, baseline comparison, and batch automation. MangoHud captures frame-time data. Together with a Python plotting tool, you get a complete workflow from raw test data to publication-ready charts.&lt;/p&gt;

&lt;h2&gt;Core Principle: Test One Variable at a Time&lt;/h2&gt;
&lt;p&gt;Before running any benchmarks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Same hardware, distro, and driver stack each time&lt;/li&gt;
&lt;li&gt;Same game patch or application version&lt;/li&gt;
&lt;li&gt;Same graphics preset and resolution&lt;/li&gt;
&lt;li&gt;Baseline run first, then one controlled change, then re-run&lt;/li&gt;
&lt;li&gt;Repeat at least 3 to 5 times per configuration&lt;/li&gt;
&lt;li&gt;Log hardware info (CPU, GPU, kernel, Mesa version) before each session&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Phoronix Test Suite saves this metadata automatically. If you change multiple variables at once, your data proves nothing.&lt;/p&gt;
&lt;h2&gt;Install the Tools&lt;/h2&gt;
&lt;h3&gt;Phoronix Test Suite&lt;/h3&gt;
&lt;h4&gt;Install Phoronix Test Suite on Debian&lt;/h4&gt;
&lt;p&gt;Debian no longer ships &lt;code&gt;phoronix-test-suite&lt;/code&gt;; its tracker marks the package as removed. The supported alternative is installing from the &lt;a href=&quot;https://github.com/phoronix-test-suite/phoronix-test-suite&quot;&gt;upstream Git repository&lt;/a&gt;. See the &lt;a href=&quot;https://tracker.debian.org/pkg/phoronix-test-suite&quot;&gt;Debian Package Tracker&lt;/a&gt; for the package status.&lt;/p&gt;
&lt;h5&gt;1. Install prerequisites&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt update
sudo apt install git php-cli ca-certificates
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Only PHP CLI is mandatory for the test-suite framework. Individual benchmarks may require additional compilers and libraries, which Phoronix can usually install through APT. See the &lt;a href=&quot;https://www.phoronix-test-suite.com/?k=downloads&quot;&gt;official download documentation&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h5&gt;2. Download the source&lt;/h5&gt;
&lt;p&gt;Keep the repository so it can be updated later:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p &quot;$HOME/src&quot;
cd &quot;$HOME/src&quot;

git clone --depth 1 \
  https://github.com/phoronix-test-suite/phoronix-test-suite.git

cd phoronix-test-suite
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Test it directly before installing:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;./phoronix-test-suite version
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;3. Install system-wide&lt;/h5&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo ./install-sh
hash -r
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify the installation:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;phoronix-test-suite version
phoronix-test-suite system-info
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The command should now be installed as &lt;code&gt;/usr/bin/phoronix-test-suite&lt;/code&gt;.&lt;/p&gt;
&lt;h5&gt;4. Run a benchmark&lt;/h5&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;phoronix-test-suite benchmark smallpt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or inspect available tests:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;phoronix-test-suite list-available-tests
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Phoronix will prompt before downloading benchmarks, installing dependencies, or uploading results.&lt;/p&gt;
&lt;h5&gt;Updating manually&lt;/h5&gt;
&lt;p&gt;This installation is not managed by APT. Update it with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd &quot;$HOME/src/phoronix-test-suite&quot;
git pull --ff-only
sudo ./install-sh
phoronix-test-suite version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Re-running &lt;code&gt;install-sh&lt;/code&gt; replaces the existing installation with the updated source.&lt;/p&gt;
&lt;h4&gt;Other distributions&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Ubuntu
sudo apt install phoronix-test-suite

# Fedora
sudo dnf install phoronix-test-suite

# Arch
sudo pacman -S phoronix-test-suite
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;MangoHud (required for 1% lows and frame consistency)&lt;/h3&gt;
&lt;p&gt;MangoHud captures frame-time data needed to calculate 1% lows and analyze frame pacing. Without it, you only get average FPS.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Debian/Ubuntu
sudo apt install mangohud

# Fedora
sudo dnf install mangohud

# Arch
sudo pacman -S mangohud
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;a href=&quot;http://Plot.py&quot;&gt;Plot.py&lt;/a&gt; for Charts&lt;/h3&gt;
&lt;p&gt;Clone the Linux benchmarks repository to get the plotting script:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ChrisTitusTech/linux-benchmarks.git
cd linux-benchmarks
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Python dependencies:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pip install numpy pandas matplotlib
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Prep Your System&lt;/h2&gt;
&lt;p&gt;Before every test session:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reboot and let the system settle&lt;/li&gt;
&lt;li&gt;Close browsers, Discord, RGB software, and unnecessary services&lt;/li&gt;
&lt;li&gt;Plug in laptops and use the same power mode for every run&lt;/li&gt;
&lt;li&gt;Keep the same CPU governor and GPU mode&lt;/li&gt;
&lt;li&gt;Check kernel, Mesa version, and game patch level&lt;/li&gt;
&lt;li&gt;Note the date/time and save this metadata somewhere&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Phoronix automatically logs hardware info, so you just need to know what you changed between runs.&lt;/p&gt;
&lt;h2&gt;Quick Workflow: Batch Setup and Benchmark&lt;/h2&gt;
&lt;h3&gt;1. Configure Batch Mode Once&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;phoronix-test-suite batch-setup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This prompts you to set defaults for automated testing: whether to save results to OpenBenchmarking, how many times to run each test, and whether to use strict mode. Set these once and reuse them for consistency.&lt;/p&gt;
&lt;h3&gt;2. Run Batch Benchmarks&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export MANGOHUD=1
export MANGOHUD_CONFIG=&quot;output_folder=$HOME/benchmark-logs,autostart_log=1,benchmark_percentiles=AVG+1+0.1&quot;

TEST_RESULTS_NAME=&quot;baseline&quot; \
TEST_RESULTS_IDENTIFIER=&quot;stock-system&quot; \
TEST_RESULTS_DESCRIPTION=&quot;Baseline on stock kernel&quot; \
TEST_EXEC_PREPEND=&quot;mangohud&quot; \
phoronix-test-suite batch-benchmark pts/c-ray pts/compress-7zip pts/openssl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The batch mode processes all tests without prompting you. Logs are saved to &lt;code&gt;~/.phoronix-test-suite/&lt;/code&gt; with metadata automatically included.&lt;/p&gt;
&lt;p&gt;Repeat this command after making one change (kernel, driver, Proton version) with a different identifier:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export MANGOHUD=1
export MANGOHUD_CONFIG=&quot;output_folder=$HOME/benchmark-logs,autostart_log=1,benchmark_percentiles=AVG+1+0.1&quot;

TEST_RESULTS_NAME=&quot;tested&quot; \
TEST_RESULTS_IDENTIFIER=&quot;zen-kernel&quot; \
TEST_RESULTS_DESCRIPTION=&quot;Same workload on Zen kernel&quot; \
TEST_EXEC_PREPEND=&quot;mangohud&quot; \
phoronix-test-suite batch-benchmark pts/c-ray pts/compress-7zip pts/openssl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you have two saved result sets to compare.&lt;/p&gt;
&lt;h3&gt;3. Export Results to CSV&lt;/h3&gt;
&lt;p&gt;After running benchmarks, export the results to ~/benchmark-logs:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;phoronix-test-suite result-file-to-csv baseline ~/benchmark-logs/baseline.csv
phoronix-test-suite result-file-to-csv tested ~/benchmark-logs/tested.csv
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This creates CSV files that &lt;code&gt;plot.py&lt;/code&gt; can read. The CSV contains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Benchmark name&lt;/li&gt;
&lt;li&gt;Average score (or FPS)&lt;/li&gt;
&lt;li&gt;Run count&lt;/li&gt;
&lt;li&gt;Variance, standard deviation, and standard error (if available)&lt;/li&gt;
&lt;li&gt;System metadata (CPU, GPU, kernel)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MangoHud logs are already being saved to ~/benchmark-logs as individual CSV files with frame-time data.&lt;/p&gt;
&lt;h3&gt;4. Understanding the Export-CSV Workflow&lt;/h3&gt;
&lt;p&gt;The export process transforms Phoronix binary result files into text formats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;result-file-to-csv&lt;/strong&gt;: Standard export with aggregated stats per benchmark&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;result-file-raw-to-csv&lt;/strong&gt;: Individual run data; useful if you need to inspect variance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;result-file-stats&lt;/strong&gt;: Statistical summary&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For &lt;code&gt;plot.py&lt;/code&gt;, you need CSV files with:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Phoronix CSV exports&lt;/strong&gt; — Benchmark names, average FPS/scores, run count, variance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MangoHud CSV logs&lt;/strong&gt; — Frame-time data with columns like &lt;code&gt;fps&lt;/code&gt; and &lt;code&gt;frametime&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Both get saved in the same directory and &lt;code&gt;plot.py&lt;/code&gt; finds them automatically.&lt;/p&gt;
&lt;h2&gt;Running &lt;a href=&quot;http://plot.py&quot;&gt;plot.py&lt;/a&gt; to Generate Charts&lt;/h2&gt;
&lt;p&gt;Once you have CSV files from both Phoronix exports and MangoHud logs in ~/benchmark-logs, generate visualizations:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd /path/to/linux-benchmarks
python plot.py --log-dir ~/benchmark-logs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The script generates two types of charts:&lt;/p&gt;
&lt;h3&gt;1. MangoHud FPS Distribution Heatmap&lt;/h3&gt;
&lt;p&gt;Shows frame-time consistency across all runs. Each row is one run, and the heatmap colors show how many frames hit each FPS bucket. Vertical lines mark:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;0.1%ile&lt;/strong&gt; (darkest): lowest 0.1% of frames&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1%ile&lt;/strong&gt; (dark): lowest 1% of frames&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;50%ile&lt;/strong&gt; (blue): median frame rate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the heatmap is wide and flat, frames are inconsistent. If it is tall and narrow, frame pacing is smooth.&lt;/p&gt;
&lt;h3&gt;2. Phoronix Average FPS Bar Chart&lt;/h3&gt;
&lt;p&gt;Shows average performance per benchmark with run count, variance, and standard error labeled. If variance is high or run count is low, that test may not be stable yet.&lt;/p&gt;
&lt;h3&gt;Output Files&lt;/h3&gt;
&lt;p&gt;Both charts are saved as PNG files in ~/benchmark-logs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mangohud_bar_chart.png&lt;/code&gt; — FPS distribution heatmap (frame consistency from MangoHud logs)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;*_avg_fps_bar_chart.png&lt;/code&gt; — One per Phoronix CSV export (average FPS per benchmark)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Enriching Phoronix Data with MangoHud Stats&lt;/h2&gt;
&lt;p&gt;If your Phoronix export only has one aggregate result per benchmark (common when exporting from the GUI), &lt;code&gt;plot.py&lt;/code&gt; automatically matches MangoHud runs by name pattern and enriches the Phoronix data with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Actual run count from multiple MangoHud passes&lt;/li&gt;
&lt;li&gt;Calculated variance and standard error&lt;/li&gt;
&lt;li&gt;Frame-time percentiles (0.1%, 1%, 50%)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Complete Example: Kernel Comparison&lt;/h2&gt;
&lt;p&gt;Here&apos;s a real-world walkthrough:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. Configure batch mode
phoronix-test-suite batch-setup

# 2. Set up logging environment
export MANGOHUD=1
export MANGOHUD_CONFIG=&quot;output_folder=$HOME/benchmark-logs,autostart_log=1,benchmark_percentiles=AVG+1+0.1&quot;

# 3. Run baseline on stock kernel (reboot first)
TEST_RESULTS_NAME=&quot;kernel-compare&quot; \
TEST_RESULTS_IDENTIFIER=&quot;stock-distro&quot; \
TEST_RESULTS_DESCRIPTION=&quot;Stock distro kernel&quot; \
TEST_EXEC_PREPEND=&quot;mangohud&quot; \
phoronix-test-suite batch-benchmark pts/c-ray pts/compress-7zip pts/openssl

# 4. Reboot into Zen kernel and run same tests
TEST_RESULTS_NAME=&quot;kernel-compare&quot; \
TEST_RESULTS_IDENTIFIER=&quot;zen-kernel&quot; \
TEST_RESULTS_DESCRIPTION=&quot;CachyOS Zen kernel&quot; \
TEST_EXEC_PREPEND=&quot;mangohud&quot; \
phoronix-test-suite batch-benchmark pts/c-ray pts/compress-7zip pts/openssl

# 5. Export both results to CSV
phoronix-test-suite result-file-to-csv kernel-compare ~/benchmark-logs/kernel-compare.csv

# 6. Run plot.py to generate charts
cd /path/to/linux-benchmarks
python plot.py --log-dir ~/benchmark-logs
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One bar chart showing average FPS for each test under both kernels&lt;/li&gt;
&lt;li&gt;Run counts, variance, and error bars on the chart&lt;/li&gt;
&lt;li&gt;MangoHud frame-time heatmaps if you also logged with MangoHud&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is publication-ready data: controlled variables, multiple runs, statistical validity, and clear visualization.&lt;/p&gt;
&lt;h2&gt;What the Charts Tell You&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Bar chart reading:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Higher bars = better performance&lt;/li&gt;
&lt;li&gt;Variance labeled in red: if it is high, the result is noisy&lt;/li&gt;
&lt;li&gt;Small error bars = consistent performance across runs&lt;/li&gt;
&lt;li&gt;Large error bars = inconsistent or thermal-throttled performance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Heatmap reading:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tall narrow heatmap = consistent frame pacing&lt;/li&gt;
&lt;li&gt;Wide scattered heatmap = erratic frame delivery, even if average FPS is high&lt;/li&gt;
&lt;li&gt;Compare rows: if one kernel produces more consistent colors, it has better frame consistency&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Workflow Checklist&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Reboot and verify kernel/driver/Mesa version&lt;/li&gt;
&lt;li&gt;[ ] Close unnecessary services&lt;/li&gt;
&lt;li&gt;[ ] Run &lt;code&gt;phoronix-test-suite batch-setup&lt;/code&gt; once&lt;/li&gt;
&lt;li&gt;[ ] Run baseline: &lt;code&gt;phoronix-test-suite batch-benchmark pts/...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[ ] Make one change only (kernel, driver, etc.)&lt;/li&gt;
&lt;li&gt;[ ] Run same tests again with new identifier&lt;/li&gt;
&lt;li&gt;[ ] Export: &lt;code&gt;phoronix-test-suite result-file-to-csv &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[ ] Generate charts: &lt;code&gt;python plot.py --log-dir &amp;lt;path&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;[ ] Compare against baseline&lt;/li&gt;
&lt;li&gt;[ ] Repeat for next variable&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Final Results&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/pts-benchmark.webp&quot; alt=&quot;pts-benchmark&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/mangohud-benchmark.webp&quot; alt=&quot;mangohud-benchmark&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/gn0x-Tg1qxk&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 Elite Editor</title><link>https://christitus.com/neovim-the-elite-editor/</link><guid isPermaLink="true">https://christitus.com/neovim-the-elite-editor/</guid><description>&lt;p&gt;Most editors today are bloated, slow, and pretending to be IDEs while burning your RAM. Neovim 0.12 goes the other direction: less junk, more control, better speed.&lt;/p&gt;
&lt;p&gt;This is the no-BS breakdown of what changed in my Neovim setup, why I removed the old pieces, and what actually matters in daily use.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/neovim.webp&quot; alt=&quot;neovim&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;What Changed in the 0.12 Upgrade&lt;/h2&gt;
&lt;p&gt;The big architectural change was ripping out the old plugin flow and moving to Neovim&apos;s native package path:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Removed &lt;code&gt;lazy.nvim&lt;/code&gt; from the stack.&lt;/li&gt;
&lt;li&gt;Migrated plugin loading to built-in &lt;code&gt;vim.pack.add(...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cut back external Treesitter management and used Neovim 0.12 built-in behavior first.&lt;/li&gt;
&lt;li&gt;Kept one focused Treesitter UI addon (&lt;code&gt;nvim-treesitter-context&lt;/code&gt;) for sticky context lines.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Why This Matters&lt;/h3&gt;
&lt;p&gt;This is not just &quot;new syntax.&quot; It is a real maintenance win:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fewer moving parts at startup.&lt;/li&gt;
&lt;li&gt;Native APIs instead of plugin-specific abstractions.&lt;/li&gt;
&lt;li&gt;Easier debugging because package flow is visible and explicit.&lt;/li&gt;
&lt;li&gt;Cleaner upgrades for future Neovim releases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The New Design Philosophy&lt;/h2&gt;
&lt;p&gt;This config is structured like a real project, not a spaghetti pile:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;init.lua&lt;/code&gt; handles global options and startup behavior.&lt;/li&gt;
&lt;li&gt;Plugin responsibilities are split by concern (&lt;code&gt;lsp.lua&lt;/code&gt;, &lt;code&gt;ui.lua&lt;/code&gt;, &lt;code&gt;completion.lua&lt;/code&gt;, etc).&lt;/li&gt;
&lt;li&gt;Keymaps are centralized and predictable.&lt;/li&gt;
&lt;li&gt;Linux and Windows dependency scripts fix missing tools fast.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result is opinionated, fast, and resilient.&lt;/p&gt;
&lt;h2&gt;Feature Highlights&lt;/h2&gt;
&lt;h3&gt;1) Modern Navigation and Search&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;snacks.nvim&lt;/code&gt; runs project/file/symbol/grep workflows with a fast picker experience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Smart file picking&lt;/li&gt;
&lt;li&gt;Live grep&lt;/li&gt;
&lt;li&gt;Project switching&lt;/li&gt;
&lt;li&gt;Diagnostics search&lt;/li&gt;
&lt;li&gt;Explorer tree + status column enhancements&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/explorer-snacks.webp&quot; alt=&quot;explorer-snacks&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If you bounce between repos all day, this is a massive quality-of-life upgrade.&lt;/p&gt;
&lt;h3&gt;2) LSP That Feels Native&lt;/h3&gt;
&lt;p&gt;The LSP stack uses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nvim-lspconfig&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mason.nvim&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mason-tool-installer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fidget.nvim&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;conform.nvim&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why this stack works:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Auto-provisioning of language tools&lt;/li&gt;
&lt;li&gt;Clean per-server config&lt;/li&gt;
&lt;li&gt;Fast formatting workflow&lt;/li&gt;
&lt;li&gt;Better diagnostics defaults and symbols&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It behaves like a serious IDE without turning into one of those slow, opaque monsters.&lt;/p&gt;
&lt;h3&gt;3) Completion + AI That Do Not Fight Each Other&lt;/h3&gt;
&lt;p&gt;Completion is built around &lt;code&gt;blink.cmp&lt;/code&gt; and &lt;code&gt;LuaSnip&lt;/code&gt;, with GitHub Copilot integrated as a completion source:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;blink.cmp&lt;/code&gt; as core engine&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blink-cmp-copilot&lt;/code&gt; for AI suggestions in the same completion flow&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CopilotChat&lt;/code&gt; for interactive prompts and model switching&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This avoids the classic popup wars where completion systems fight each other.&lt;/p&gt;
&lt;h3&gt;4) UI That Is Clean, Not Bloated&lt;/h3&gt;
&lt;p&gt;Core UI stack includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bufferline.nvim&lt;/code&gt; for tab-like buffers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;which-key.nvim&lt;/code&gt; for discoverability&lt;/li&gt;
&lt;li&gt;&lt;code&gt;trouble.nvim&lt;/code&gt; + &lt;code&gt;aerial.nvim&lt;/code&gt; for code structure and diagnostics&lt;/li&gt;
&lt;li&gt;&lt;code&gt;oil.nvim&lt;/code&gt; for file-system editing inside Neovim&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toggleterm.nvim&lt;/code&gt; for terminal workflow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Everything here has a job. No filler, no random plugin bloat.&lt;/p&gt;
&lt;h3&gt;5) Editing and Content Workflows&lt;/h3&gt;
&lt;p&gt;This setup is not only for code. It also handles writing and content production:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown linting with &lt;code&gt;markdownlint-cli2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Image paste pipeline with automatic WebP conversion&lt;/li&gt;
&lt;li&gt;TODO highlighting&lt;/li&gt;
&lt;li&gt;Multi-cursor editing&lt;/li&gt;
&lt;li&gt;Undo tree visualization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For content creators and technical writing, these are huge time savers.&lt;/p&gt;
&lt;h2&gt;Before vs After (0.12 Direction)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plugin Management&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lazy.nvim&lt;/code&gt; lifecycle&lt;/td&gt;
&lt;td&gt;Native &lt;code&gt;vim.pack.add(...)&lt;/code&gt; flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Treesitter Strategy&lt;/td&gt;
&lt;td&gt;Heavier external management&lt;/td&gt;
&lt;td&gt;Built-in Treesitter first, targeted extras only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Config Structure&lt;/td&gt;
&lt;td&gt;More centralized complexity&lt;/td&gt;
&lt;td&gt;Concern-based modular plugin files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debuggability&lt;/td&gt;
&lt;td&gt;Plugin-manager indirection&lt;/td&gt;
&lt;td&gt;Direct, native, inspectable startup path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upgrade Path&lt;/td&gt;
&lt;td&gt;Plugin compatibility friction&lt;/td&gt;
&lt;td&gt;Closer alignment with Neovim core APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Quick Start&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ChrisTitusTech/neovim ~/.config/nvim
cd ~/.config/nvim
nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If dependencies are missing, run the repair script for your platform:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash lin-depend.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;.\win-depend.ps1
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Who This Setup Is For&lt;/h2&gt;
&lt;p&gt;Use this setup if you want:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code-like discoverability with terminal speed&lt;/li&gt;
&lt;li&gt;Strong Lua customization&lt;/li&gt;
&lt;li&gt;Native Neovim 0.12 direction instead of legacy glue&lt;/li&gt;
&lt;li&gt;AI-assisted coding without UI clutter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Skip this if you want a forever hands-off setup. This is for people who care about control, speed, and clarity.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Neovim 0.12 is a maturity milestone. The point is not swapping one trendy plugin manager for another. The point is reducing complexity by leaning on core Neovim features and adding only plugins that pull their weight.&lt;/p&gt;
&lt;p&gt;That is exactly what this project does now: fewer hacks, better defaults, and a tighter editing loop.&lt;/p&gt;
&lt;p&gt;The official Project is at &lt;a href=&quot;https://github.com/ChrisTitusTech/neovim&quot;&gt;https://github.com/ChrisTitusTech/neovim&lt;/a&gt; and the README has detailed installation and troubleshooting steps.&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>Tue, 05 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most editors today are bloated, slow, and pretending to be IDEs while burning your RAM. Neovim 0.12 goes the other direction: less junk, more control, better speed.&lt;/p&gt;
&lt;p&gt;This is the no-BS breakdown of what changed in my Neovim setup, why I removed the old pieces, and what actually matters in daily use.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2026/neovim.webp&quot; alt=&quot;neovim&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;What Changed in the 0.12 Upgrade&lt;/h2&gt;
&lt;p&gt;The big architectural change was ripping out the old plugin flow and moving to Neovim&apos;s native package path:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Removed &lt;code&gt;lazy.nvim&lt;/code&gt; from the stack.&lt;/li&gt;
&lt;li&gt;Migrated plugin loading to built-in &lt;code&gt;vim.pack.add(...)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cut back external Treesitter management and used Neovim 0.12 built-in behavior first.&lt;/li&gt;
&lt;li&gt;Kept one focused Treesitter UI addon (&lt;code&gt;nvim-treesitter-context&lt;/code&gt;) for sticky context lines.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Why This Matters&lt;/h3&gt;
&lt;p&gt;This is not just &quot;new syntax.&quot; It is a real maintenance win:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fewer moving parts at startup.&lt;/li&gt;
&lt;li&gt;Native APIs instead of plugin-specific abstractions.&lt;/li&gt;
&lt;li&gt;Easier debugging because package flow is visible and explicit.&lt;/li&gt;
&lt;li&gt;Cleaner upgrades for future Neovim releases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The New Design Philosophy&lt;/h2&gt;
&lt;p&gt;This config is structured like a real project, not a spaghetti pile:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;init.lua&lt;/code&gt; handles global options and startup behavior.&lt;/li&gt;
&lt;li&gt;Plugin responsibilities are split by concern (&lt;code&gt;lsp.lua&lt;/code&gt;, &lt;code&gt;ui.lua&lt;/code&gt;, &lt;code&gt;completion.lua&lt;/code&gt;, etc).&lt;/li&gt;
&lt;li&gt;Keymaps are centralized and predictable.&lt;/li&gt;
&lt;li&gt;Linux and Windows dependency scripts fix missing tools fast.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The result is opinionated, fast, and resilient.&lt;/p&gt;
&lt;h2&gt;Feature Highlights&lt;/h2&gt;
&lt;h3&gt;1) Modern Navigation and Search&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;snacks.nvim&lt;/code&gt; runs project/file/symbol/grep workflows with a fast picker experience:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Smart file picking&lt;/li&gt;
&lt;li&gt;Live grep&lt;/li&gt;
&lt;li&gt;Project switching&lt;/li&gt;
&lt;li&gt;Diagnostics search&lt;/li&gt;
&lt;li&gt;Explorer tree + status column enhancements&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/explorer-snacks.webp&quot; alt=&quot;explorer-snacks&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If you bounce between repos all day, this is a massive quality-of-life upgrade.&lt;/p&gt;
&lt;h3&gt;2) LSP That Feels Native&lt;/h3&gt;
&lt;p&gt;The LSP stack uses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nvim-lspconfig&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mason.nvim&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mason-tool-installer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fidget.nvim&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;conform.nvim&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why this stack works:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Auto-provisioning of language tools&lt;/li&gt;
&lt;li&gt;Clean per-server config&lt;/li&gt;
&lt;li&gt;Fast formatting workflow&lt;/li&gt;
&lt;li&gt;Better diagnostics defaults and symbols&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It behaves like a serious IDE without turning into one of those slow, opaque monsters.&lt;/p&gt;
&lt;h3&gt;3) Completion + AI That Do Not Fight Each Other&lt;/h3&gt;
&lt;p&gt;Completion is built around &lt;code&gt;blink.cmp&lt;/code&gt; and &lt;code&gt;LuaSnip&lt;/code&gt;, with GitHub Copilot integrated as a completion source:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;blink.cmp&lt;/code&gt; as core engine&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blink-cmp-copilot&lt;/code&gt; for AI suggestions in the same completion flow&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CopilotChat&lt;/code&gt; for interactive prompts and model switching&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This avoids the classic popup wars where completion systems fight each other.&lt;/p&gt;
&lt;h3&gt;4) UI That Is Clean, Not Bloated&lt;/h3&gt;
&lt;p&gt;Core UI stack includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bufferline.nvim&lt;/code&gt; for tab-like buffers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;which-key.nvim&lt;/code&gt; for discoverability&lt;/li&gt;
&lt;li&gt;&lt;code&gt;trouble.nvim&lt;/code&gt; + &lt;code&gt;aerial.nvim&lt;/code&gt; for code structure and diagnostics&lt;/li&gt;
&lt;li&gt;&lt;code&gt;oil.nvim&lt;/code&gt; for file-system editing inside Neovim&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toggleterm.nvim&lt;/code&gt; for terminal workflow&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Everything here has a job. No filler, no random plugin bloat.&lt;/p&gt;
&lt;h3&gt;5) Editing and Content Workflows&lt;/h3&gt;
&lt;p&gt;This setup is not only for code. It also handles writing and content production:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Markdown linting with &lt;code&gt;markdownlint-cli2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Image paste pipeline with automatic WebP conversion&lt;/li&gt;
&lt;li&gt;TODO highlighting&lt;/li&gt;
&lt;li&gt;Multi-cursor editing&lt;/li&gt;
&lt;li&gt;Undo tree visualization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For content creators and technical writing, these are huge time savers.&lt;/p&gt;
&lt;h2&gt;Before vs After (0.12 Direction)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plugin Management&lt;/td&gt;
&lt;td&gt;&lt;code&gt;lazy.nvim&lt;/code&gt; lifecycle&lt;/td&gt;
&lt;td&gt;Native &lt;code&gt;vim.pack.add(...)&lt;/code&gt; flow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Treesitter Strategy&lt;/td&gt;
&lt;td&gt;Heavier external management&lt;/td&gt;
&lt;td&gt;Built-in Treesitter first, targeted extras only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Config Structure&lt;/td&gt;
&lt;td&gt;More centralized complexity&lt;/td&gt;
&lt;td&gt;Concern-based modular plugin files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debuggability&lt;/td&gt;
&lt;td&gt;Plugin-manager indirection&lt;/td&gt;
&lt;td&gt;Direct, native, inspectable startup path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upgrade Path&lt;/td&gt;
&lt;td&gt;Plugin compatibility friction&lt;/td&gt;
&lt;td&gt;Closer alignment with Neovim core APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Quick Start&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/ChrisTitusTech/neovim ~/.config/nvim
cd ~/.config/nvim
nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If dependencies are missing, run the repair script for your platform:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash lin-depend.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;.\win-depend.ps1
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Who This Setup Is For&lt;/h2&gt;
&lt;p&gt;Use this setup if you want:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code-like discoverability with terminal speed&lt;/li&gt;
&lt;li&gt;Strong Lua customization&lt;/li&gt;
&lt;li&gt;Native Neovim 0.12 direction instead of legacy glue&lt;/li&gt;
&lt;li&gt;AI-assisted coding without UI clutter&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Skip this if you want a forever hands-off setup. This is for people who care about control, speed, and clarity.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Neovim 0.12 is a maturity milestone. The point is not swapping one trendy plugin manager for another. The point is reducing complexity by leaning on core Neovim features and adding only plugins that pull their weight.&lt;/p&gt;
&lt;p&gt;That is exactly what this project does now: fewer hacks, better defaults, and a tighter editing loop.&lt;/p&gt;
&lt;p&gt;The official Project is at &lt;a href=&quot;https://github.com/ChrisTitusTech/neovim&quot;&gt;https://github.com/ChrisTitusTech/neovim&lt;/a&gt; and the README has detailed installation and troubleshooting steps.&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>Brave Origin: The Browser Brave Power Users Have Been Asking For</title><link>https://christitus.com/brave-origin-new-browser/</link><guid isPermaLink="true">https://christitus.com/brave-origin-new-browser/</guid><description>&lt;p&gt;Brave Origin is Brave stripped back to what most of us actually want: fast browsing, strong privacy, and aggressive blocking. If you have ever opened a browser and thought, &quot;Why is there a crypto wallet button, rewards UI, and extra services I never asked for?&quot; this is the answer.&lt;/p&gt;

&lt;p&gt;This is not a different engine and not some weird fork from a random dev. It is an official Brave option focused on a cleaner experience.&lt;/p&gt;
&lt;h2&gt;What Brave Origin Actually Is&lt;/h2&gt;
&lt;p&gt;Brave Origin is a minimalist Brave mode that removes or disables many optional, revenue-related, or bundled features while keeping the core browser stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chromium updates and security patches&lt;/li&gt;
&lt;li&gt;Brave Shields (ad/tracker blocking)&lt;/li&gt;
&lt;li&gt;Performance and privacy improvements in core browsing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is offered in two ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Standalone Brave Origin app (desktop)&lt;/li&gt;
&lt;li&gt;Upgrade mode inside regular Brave (desktop and mobile)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;One purchase can activate up to 10 times across devices, and Linux users also get a free path.&lt;/p&gt;
&lt;h2&gt;The Big Difference: Standalone vs Upgrade&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;th&gt;What happens to extra features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Standalone app&lt;/td&gt;
&lt;td&gt;Separate Brave Origin install&lt;/td&gt;
&lt;td&gt;Features are compiled out entirely&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upgrade mode&lt;/td&gt;
&lt;td&gt;Existing Brave gets an Origin settings panel&lt;/td&gt;
&lt;td&gt;Features are toggled off by default&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you are truly anti-bloat, standalone is the purest option.&lt;/p&gt;
&lt;h2&gt;Features Affected By Brave Origin&lt;/h2&gt;
&lt;p&gt;According to Brave, Origin targets the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leo&lt;/li&gt;
&lt;li&gt;News&lt;/li&gt;
&lt;li&gt;Playlist (iOS currently)&lt;/li&gt;
&lt;li&gt;Rewards (and browser-based Brave Ads)&lt;/li&gt;
&lt;li&gt;Speedreader&lt;/li&gt;
&lt;li&gt;Stats and analytics items (daily ping, crash logs, P3A)&lt;/li&gt;
&lt;li&gt;Talk&lt;/li&gt;
&lt;li&gt;Tor integration&lt;/li&gt;
&lt;li&gt;VPN&lt;/li&gt;
&lt;li&gt;Wallet (and Web3 domains)&lt;/li&gt;
&lt;li&gt;Wayback Machine integration&lt;/li&gt;
&lt;li&gt;Web Discovery Project&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;My Take&lt;/h3&gt;
&lt;p&gt;For most users, this list is a win. The average person benefits more from less noise and fewer moving parts than from an overloaded browser UI. If you need one of these, enable it in upgrade mode, or stay on standard Brave.&lt;/p&gt;
&lt;h2&gt;Availability Matrix&lt;/h2&gt;
&lt;p&gt;Brave lists support as follows:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Upgrade&lt;/th&gt;
&lt;th&gt;Standalone&lt;/th&gt;
&lt;th&gt;One-time purchase&lt;/th&gt;
&lt;th&gt;Free option&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Android (1.91.x+)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iOS (1.91.x+)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS (1.91.x+)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows (1.91.x+)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux (1.91.x+)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Linux users can install and continue with Origin for free using Brave&apos;s Linux-specific prompt.&lt;/p&gt;
&lt;h2&gt;Setup Paths&lt;/h2&gt;
&lt;h3&gt;Desktop Standalone (Best for &quot;just give me clean Brave&quot;)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Download Brave Origin standalone build.&lt;/li&gt;
&lt;li&gt;Install and launch.&lt;/li&gt;
&lt;li&gt;Enter your purchase ID, or on Linux use the free option prompt.&lt;/li&gt;
&lt;li&gt;Finish onboarding and browse.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Upgrade Existing Brave (Desktop)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open Settings, then System, then Brave Origin.&lt;/li&gt;
&lt;li&gt;Buy or log in for your code.&lt;/li&gt;
&lt;li&gt;Refresh Origin and relaunch browser.&lt;/li&gt;
&lt;li&gt;Reopen Settings and configure feature toggles.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Upgrade Existing Brave (Mobile)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open Settings, then Brave Origin.&lt;/li&gt;
&lt;li&gt;Buy now or get login code.&lt;/li&gt;
&lt;li&gt;Restart app.&lt;/li&gt;
&lt;li&gt;Reopen Brave Origin settings and toggle features.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Privacy Model: How Purchase Works Without Tracking You&lt;/h2&gt;
&lt;p&gt;This is where people usually get suspicious: &quot;If I buy it, are they tying my identity to my browsing?&quot;&lt;/p&gt;
&lt;p&gt;Brave says Origin uses blind token flows based on Privacy Pass, so payment identity and browser usage remain decoupled. In plain English: they can verify entitlement without needing to build a personal profile around your browsing activity.&lt;/p&gt;
&lt;p&gt;That design is exactly what you want from a privacy-first premium feature.&lt;/p&gt;
&lt;h2&gt;Managed Devices and Work Environments&lt;/h2&gt;
&lt;p&gt;If your browser is managed by organization policies (Group Policy and similar), admin rules can override local Origin toggles. So yes, your work machine may still show or hide features based on corporate policy, even if your personal Origin settings differ.&lt;/p&gt;
&lt;p&gt;This behavior applies to upgrade mode.&lt;/p&gt;
&lt;h2&gt;Is Brave Origin Worth It?&lt;/h2&gt;
&lt;p&gt;If you want a browser with fewer distractions, fewer bundled services, and a tighter privacy posture, Brave Origin is one of the most interesting browser moves in years.&lt;/p&gt;
&lt;p&gt;If you rely on Brave VPN, Wallet, Rewards, or other optional services, standard Brave may still fit you better.&lt;/p&gt;
&lt;h3&gt;Chris Titus Tech Verdict&lt;/h3&gt;
&lt;p&gt;Brave Origin is a solid direction. Minimal by default is the right default.&lt;/p&gt;
&lt;p&gt;I would love to see this philosophy spread across more software: let users opt into extras, not opt out of them.&lt;/p&gt;
&lt;h2&gt;Quick FAQ&lt;/h2&gt;
&lt;h3&gt;Is Brave Origin a different browser engine?&lt;/h3&gt;
&lt;p&gt;No. It is still Brave on Chromium, with the core stack intact.&lt;/p&gt;
&lt;h3&gt;Can I use one purchase on multiple devices?&lt;/h3&gt;
&lt;p&gt;Yes. Brave documents up to 10 activations.&lt;/p&gt;
&lt;h3&gt;Can Linux users run it for free?&lt;/h3&gt;
&lt;p&gt;Yes. Brave currently offers a free Linux flow for Origin.&lt;/p&gt;
&lt;h3&gt;Can I switch back after upgrade mode?&lt;/h3&gt;
&lt;p&gt;Yes. Brave documents a downgrade path using their flag toggle and relaunch.&lt;/p&gt;
&lt;h2&gt;Source Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Official Brave Help Center article: What is Brave Origin &lt;a href=&quot;https://support.brave.app/hc/en-us/articles/38561489788173-What-is-Brave-Origin&quot;&gt;https://support.brave.app/hc/en-us/articles/38561489788173-What-is-Brave-Origin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Version and availability details reflect Brave documentation at publication time&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/7VTWbFqySxg&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, 29 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Brave Origin is Brave stripped back to what most of us actually want: fast browsing, strong privacy, and aggressive blocking. If you have ever opened a browser and thought, &quot;Why is there a crypto wallet button, rewards UI, and extra services I never asked for?&quot; this is the answer.&lt;/p&gt;

&lt;p&gt;This is not a different engine and not some weird fork from a random dev. It is an official Brave option focused on a cleaner experience.&lt;/p&gt;
&lt;h2&gt;What Brave Origin Actually Is&lt;/h2&gt;
&lt;p&gt;Brave Origin is a minimalist Brave mode that removes or disables many optional, revenue-related, or bundled features while keeping the core browser stack:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chromium updates and security patches&lt;/li&gt;
&lt;li&gt;Brave Shields (ad/tracker blocking)&lt;/li&gt;
&lt;li&gt;Performance and privacy improvements in core browsing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is offered in two ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Standalone Brave Origin app (desktop)&lt;/li&gt;
&lt;li&gt;Upgrade mode inside regular Brave (desktop and mobile)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;One purchase can activate up to 10 times across devices, and Linux users also get a free path.&lt;/p&gt;
&lt;h2&gt;The Big Difference: Standalone vs Upgrade&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;How it works&lt;/th&gt;
&lt;th&gt;What happens to extra features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Standalone app&lt;/td&gt;
&lt;td&gt;Separate Brave Origin install&lt;/td&gt;
&lt;td&gt;Features are compiled out entirely&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Upgrade mode&lt;/td&gt;
&lt;td&gt;Existing Brave gets an Origin settings panel&lt;/td&gt;
&lt;td&gt;Features are toggled off by default&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you are truly anti-bloat, standalone is the purest option.&lt;/p&gt;
&lt;h2&gt;Features Affected By Brave Origin&lt;/h2&gt;
&lt;p&gt;According to Brave, Origin targets the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leo&lt;/li&gt;
&lt;li&gt;News&lt;/li&gt;
&lt;li&gt;Playlist (iOS currently)&lt;/li&gt;
&lt;li&gt;Rewards (and browser-based Brave Ads)&lt;/li&gt;
&lt;li&gt;Speedreader&lt;/li&gt;
&lt;li&gt;Stats and analytics items (daily ping, crash logs, P3A)&lt;/li&gt;
&lt;li&gt;Talk&lt;/li&gt;
&lt;li&gt;Tor integration&lt;/li&gt;
&lt;li&gt;VPN&lt;/li&gt;
&lt;li&gt;Wallet (and Web3 domains)&lt;/li&gt;
&lt;li&gt;Wayback Machine integration&lt;/li&gt;
&lt;li&gt;Web Discovery Project&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;My Take&lt;/h3&gt;
&lt;p&gt;For most users, this list is a win. The average person benefits more from less noise and fewer moving parts than from an overloaded browser UI. If you need one of these, enable it in upgrade mode, or stay on standard Brave.&lt;/p&gt;
&lt;h2&gt;Availability Matrix&lt;/h2&gt;
&lt;p&gt;Brave lists support as follows:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Upgrade&lt;/th&gt;
&lt;th&gt;Standalone&lt;/th&gt;
&lt;th&gt;One-time purchase&lt;/th&gt;
&lt;th&gt;Free option&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Android (1.91.x+)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iOS (1.91.x+)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS (1.91.x+)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows (1.91.x+)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux (1.91.x+)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Linux users can install and continue with Origin for free using Brave&apos;s Linux-specific prompt.&lt;/p&gt;
&lt;h2&gt;Setup Paths&lt;/h2&gt;
&lt;h3&gt;Desktop Standalone (Best for &quot;just give me clean Brave&quot;)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Download Brave Origin standalone build.&lt;/li&gt;
&lt;li&gt;Install and launch.&lt;/li&gt;
&lt;li&gt;Enter your purchase ID, or on Linux use the free option prompt.&lt;/li&gt;
&lt;li&gt;Finish onboarding and browse.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Upgrade Existing Brave (Desktop)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open Settings, then System, then Brave Origin.&lt;/li&gt;
&lt;li&gt;Buy or log in for your code.&lt;/li&gt;
&lt;li&gt;Refresh Origin and relaunch browser.&lt;/li&gt;
&lt;li&gt;Reopen Settings and configure feature toggles.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Upgrade Existing Brave (Mobile)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Open Settings, then Brave Origin.&lt;/li&gt;
&lt;li&gt;Buy now or get login code.&lt;/li&gt;
&lt;li&gt;Restart app.&lt;/li&gt;
&lt;li&gt;Reopen Brave Origin settings and toggle features.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Privacy Model: How Purchase Works Without Tracking You&lt;/h2&gt;
&lt;p&gt;This is where people usually get suspicious: &quot;If I buy it, are they tying my identity to my browsing?&quot;&lt;/p&gt;
&lt;p&gt;Brave says Origin uses blind token flows based on Privacy Pass, so payment identity and browser usage remain decoupled. In plain English: they can verify entitlement without needing to build a personal profile around your browsing activity.&lt;/p&gt;
&lt;p&gt;That design is exactly what you want from a privacy-first premium feature.&lt;/p&gt;
&lt;h2&gt;Managed Devices and Work Environments&lt;/h2&gt;
&lt;p&gt;If your browser is managed by organization policies (Group Policy and similar), admin rules can override local Origin toggles. So yes, your work machine may still show or hide features based on corporate policy, even if your personal Origin settings differ.&lt;/p&gt;
&lt;p&gt;This behavior applies to upgrade mode.&lt;/p&gt;
&lt;h2&gt;Is Brave Origin Worth It?&lt;/h2&gt;
&lt;p&gt;If you want a browser with fewer distractions, fewer bundled services, and a tighter privacy posture, Brave Origin is one of the most interesting browser moves in years.&lt;/p&gt;
&lt;p&gt;If you rely on Brave VPN, Wallet, Rewards, or other optional services, standard Brave may still fit you better.&lt;/p&gt;
&lt;h3&gt;Chris Titus Tech Verdict&lt;/h3&gt;
&lt;p&gt;Brave Origin is a solid direction. Minimal by default is the right default.&lt;/p&gt;
&lt;p&gt;I would love to see this philosophy spread across more software: let users opt into extras, not opt out of them.&lt;/p&gt;
&lt;h2&gt;Quick FAQ&lt;/h2&gt;
&lt;h3&gt;Is Brave Origin a different browser engine?&lt;/h3&gt;
&lt;p&gt;No. It is still Brave on Chromium, with the core stack intact.&lt;/p&gt;
&lt;h3&gt;Can I use one purchase on multiple devices?&lt;/h3&gt;
&lt;p&gt;Yes. Brave documents up to 10 activations.&lt;/p&gt;
&lt;h3&gt;Can Linux users run it for free?&lt;/h3&gt;
&lt;p&gt;Yes. Brave currently offers a free Linux flow for Origin.&lt;/p&gt;
&lt;h3&gt;Can I switch back after upgrade mode?&lt;/h3&gt;
&lt;p&gt;Yes. Brave documents a downgrade path using their flag toggle and relaunch.&lt;/p&gt;
&lt;h2&gt;Source Notes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Official Brave Help Center article: What is Brave Origin &lt;a href=&quot;https://support.brave.app/hc/en-us/articles/38561489788173-What-is-Brave-Origin&quot;&gt;https://support.brave.app/hc/en-us/articles/38561489788173-What-is-Brave-Origin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Version and availability details reflect Brave documentation at publication time&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/7VTWbFqySxg&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>Topgrade Linux</title><link>https://christitus.com/topgrade-linux/</link><guid isPermaLink="true">https://christitus.com/topgrade-linux/</guid><description>&lt;p&gt;Most Linux users only run their package manager and call it a day. That updates your system packages, but it often leaves the rest of your machine in a partially updated state. If you use &lt;code&gt;pip&lt;/code&gt;, &lt;code&gt;cargo&lt;/code&gt;, &lt;code&gt;flatpak&lt;/code&gt;, &lt;code&gt;snap&lt;/code&gt;, &lt;code&gt;brew&lt;/code&gt;, &lt;code&gt;oh-my-zsh&lt;/code&gt;, VS Code extensions, or even dotfile repos, those pieces can all drift out of date separately.&lt;/p&gt;
&lt;p&gt;Topgrade exists to solve this exact problem. It gives you one command to update almost everything you actually use.&lt;/p&gt;

&lt;p&gt;Keeping your machine consistently updated is not just about getting shiny new versions. It is about reducing weird breakage from version mismatch, closing security holes faster, and spending less time doing repetitive maintenance.&lt;/p&gt;
&lt;h2&gt;What Topgrade Is&lt;/h2&gt;
&lt;p&gt;Topgrade is a command-line tool that runs update commands across multiple package managers and tools in sequence. Instead of remembering ten different commands, you run one:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Topgrade handles things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System package managers (&lt;code&gt;apt&lt;/code&gt;, &lt;code&gt;dnf&lt;/code&gt;, &lt;code&gt;pacman&lt;/code&gt;, &lt;code&gt;zypper&lt;/code&gt;, &lt;code&gt;eopkg&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Language package managers (&lt;code&gt;pip&lt;/code&gt;, &lt;code&gt;cargo&lt;/code&gt;, &lt;code&gt;npm&lt;/code&gt;, &lt;code&gt;gem&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Universal package managers (&lt;code&gt;flatpak&lt;/code&gt;, &lt;code&gt;snap&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Tooling ecosystems (&lt;code&gt;rustup&lt;/code&gt;, &lt;code&gt;asdf&lt;/code&gt;, &lt;code&gt;sdkman&lt;/code&gt;, &lt;code&gt;mise&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Repository pulls (dotfiles or any local git repos)&lt;/li&gt;
&lt;li&gt;Shell and plugin ecosystems (Oh My Zsh, Fish plugins, Vim/Neovim plugins, etc.)&lt;/li&gt;
&lt;li&gt;VS Code extensions&lt;/li&gt;
&lt;li&gt;Container images (&lt;code&gt;docker&lt;/code&gt;, &lt;code&gt;podman&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Firmware via &lt;code&gt;fwupd&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The exact behavior depends on your distro and what tools you have installed, but the core idea is the same: centralize updates.&lt;/p&gt;
&lt;h2&gt;The Problem with &quot;Just Do System Updates&quot;&lt;/h2&gt;
&lt;p&gt;When people say &quot;I update regularly,&quot; they usually mean one command:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Debian/Ubuntu: &lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fedora: &lt;code&gt;sudo dnf upgrade&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Arch: &lt;code&gt;sudo pacman -Syu&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is good, but incomplete for most power users.&lt;/p&gt;
&lt;h3&gt;You Are Only Updating One Layer&lt;/h3&gt;
&lt;p&gt;Modern Linux setups have multiple software layers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OS packages&lt;/li&gt;
&lt;li&gt;Userland language packages&lt;/li&gt;
&lt;li&gt;Third-party tools installed outside distro repos&lt;/li&gt;
&lt;li&gt;Application stores (&lt;code&gt;flatpak&lt;/code&gt;, &lt;code&gt;snap&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Git-managed configs and scripts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If only one layer is current, your system is still effectively behind.&lt;/p&gt;
&lt;h3&gt;Human Memory Is the Bottleneck&lt;/h3&gt;
&lt;p&gt;Nobody wants a giant sticky note of update commands. Even experienced users forget steps when busy.&lt;/p&gt;
&lt;p&gt;Topgrade removes this memory tax. You no longer need to think, &quot;Did I update &lt;code&gt;cargo&lt;/code&gt; crates this week? Did I pull dotfiles?&quot;&lt;/p&gt;
&lt;h3&gt;Drift Causes Hard-to-Debug Issues&lt;/h3&gt;
&lt;p&gt;Many random issues come from version drift between tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A CLI tool expects newer dependencies than your local setup has&lt;/li&gt;
&lt;li&gt;A shell plugin manager is old while the shell itself is new&lt;/li&gt;
&lt;li&gt;User-level packages lag behind system-level updates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Topgrade reduces this drift by making full-stack updates routine.&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Topgrade is available through a wide range of package managers. Pick whichever fits your setup:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Arch Linux (AUR)
yay -S topgrade-bin
# or build from source:
yay -S topgrade

# Fedora / RHEL / AlmaLinux (Copr)
sudo dnf copr enable lilay/topgrade
sudo dnf install topgrade

# Debian / Ubuntu (via deb-get)
deb-get install topgrade

# macOS or Linux (Homebrew)
brew install topgrade

# NixOS / Nix
nix-env -iA nixpkgs.topgrade

# Alpine Linux
sudo apk add topgrade

# Void Linux
sudo xbps-install -S topgrade

# Python (pip / pipx / uv)
pipx install topgrade

# Via Cargo (always gets latest release)
cargo install topgrade
&lt;/code&gt;&lt;/pre&gt;
&lt;aside class=&quot;notice notice-tip&quot;&gt;&lt;p class=&quot;notice-title&quot;&gt;Tip&lt;/p&gt;&lt;p&gt;If your distro repo version is old, installing via &lt;code&gt;cargo&lt;/code&gt; or &lt;code&gt;pipx&lt;/code&gt; is the fastest way to get the latest release without waiting for a package maintainer.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;You can also grab a pre-built self-updating binary directly from the &lt;a href=&quot;https://github.com/topgrade-rs/topgrade/releases&quot;&gt;releases page&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;First Run: What to Expect&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You may be prompted for &lt;code&gt;sudo&lt;/code&gt; depending on what update steps need elevated privileges. The first run can take a while because it catches up everything at once — that is normal.&lt;/p&gt;
&lt;h3&gt;Useful Flags&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--dry-run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Preview what would run without making changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-y&lt;/code&gt; / &lt;code&gt;--yes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skip all confirmation prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--only &amp;lt;step&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run only specific steps (e.g. &lt;code&gt;--only system flatpak&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--disable &amp;lt;step&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skip specific steps for this run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--edit-config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open your config file in &lt;code&gt;$EDITOR&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--config-reference&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Print all available config options&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--remote-host-limit &amp;lt;host&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Limit remote execution to specific hosts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Safety: How to Use It Responsibly&lt;/h2&gt;
&lt;p&gt;Topgrade is powerful, so use it with a sane workflow.&lt;/p&gt;
&lt;h3&gt;Start with a Dry Run&lt;/h3&gt;
&lt;p&gt;Preview what it would do before committing:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade --dry-run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is especially useful the first time you set it up, or after making major changes to your configuration.&lt;/p&gt;
&lt;h3&gt;Keep Backups and Snapshots&lt;/h3&gt;
&lt;p&gt;Before major updates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Snapshot with Btrfs/Timeshift/ZFS if available&lt;/li&gt;
&lt;li&gt;Backup important config and data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No update tool replaces backups.&lt;/p&gt;
&lt;h3&gt;Exclude What You Do Not Want&lt;/h3&gt;
&lt;p&gt;You can configure Topgrade to skip specific steps you do not trust or do not need. That lets you keep one-command convenience while controlling risk.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Recommended exclusion for cautious users — firmware updates:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I had firmware updates break my system before, so I prefer to review them separately. Disable them in your config:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;~/.config/topgrade.toml&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[misc]
# Skip firmware updates entirely
disable = [&quot;firmware&quot;]

[firmware]
# If firmware step does run, only show available updates — do not install
upgrade = false
&lt;/code&gt;&lt;/pre&gt;
&lt;aside class=&quot;notice notice-note&quot;&gt;&lt;p class=&quot;notice-title&quot;&gt;Note&lt;/p&gt;&lt;p&gt;The double-exclusion is intentional. &lt;code&gt;disable&lt;/code&gt; skips the step outright; &lt;code&gt;upgrade = false&lt;/code&gt; under &lt;code&gt;[firmware]&lt;/code&gt; acts as a fallback safety net so that even if the step runs, nothing actually gets flashed.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;For a one-off skip without editing your config:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade --disable firmware
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Read the Output&lt;/h3&gt;
&lt;p&gt;Treat updates like maintenance, not background noise. If one step fails, investigate before your next cycle. Topgrade reports each step&apos;s result clearly — use it.&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Topgrade&apos;s config lives at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.config/topgrade.toml&lt;/code&gt; (primary location)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/topgrade/topgrade.toml&lt;/code&gt; (alternative; both are checked)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the first run with no config present, Topgrade creates one for you automatically. Open and edit it with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade --edit-config
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Print every available option with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade --config-reference
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Key Configuration Options&lt;/h3&gt;
&lt;p&gt;Here is a practical subset of the most useful settings:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[misc]
# Cache sudo credentials upfront to avoid mid-run password prompts
pre_sudo = true

# Steps to always skip
disable = [&quot;firmware&quot;, &quot;snap&quot;]

# Steps to run before all others
first = [&quot;chezmoi&quot;]

# Steps to run after all others
last = [&quot;flatpak&quot;]

# Ignore failures for noisy or unreliable steps
ignore_failures = [&quot;pip3&quot;]

# Clean up old temp files after a run
cleanup = true

# Send a desktop notification when done
notify_end = &quot;on_failure&quot;

[git]
# Pull these repos every time you run topgrade
repos = [
    &quot;~/dotfiles&quot;,
    &quot;~/src/*/&quot;,
]
# Pull in parallel (default: 5)
max_concurrency = 5
# Rebase and autostash instead of plain merge
arguments = &quot;--rebase --autostash&quot;

[linux]
# Arch: choose your AUR helper (autodetect, paru, yay, pikaur, etc.)
arch_package_manager = &quot;paru&quot;
# Extra args passed to yay/paru
yay_arguments = &quot;--nodevel&quot;

[flatpak]
# Update system-wide Flatpak installs (requires sudo)
use_sudo = true

[python]
# Update pip packages (disabled by default)
enable_pip_review = true

[firmware]
# Only show available firmware updates, do not install
upgrade = false
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Full syntax and every available option: &lt;a href=&quot;https://github.com/topgrade-rs/topgrade/blob/main/config.example.toml&quot;&gt;https://github.com/topgrade-rs/topgrade/blob/main/config.example.toml&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Custom Commands&lt;/h3&gt;
&lt;p&gt;You can hook your own scripts into the update pipeline using &lt;code&gt;pre_commands&lt;/code&gt;, &lt;code&gt;post_commands&lt;/code&gt;, or &lt;code&gt;commands&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;# Runs before anything else
[pre_commands]
&quot;Backup dotfiles&quot; = &quot;chezmoi git -- push&quot;

# Runs after everything else
[post_commands]
&quot;Reload shell&quot; = &quot;exec $SHELL&quot;

# Custom named steps that appear in the Topgrade run
[commands]
&quot;Update Python env&quot; = &quot;~/dev/.venv/bin/pip install -U pip&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Remote Execution&lt;/h3&gt;
&lt;p&gt;If you maintain multiple machines, Topgrade can SSH into them and run updates before acting locally:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[misc]
remote_topgrades = [&quot;homeserver&quot;, &quot;nas&quot;, &quot;pi&quot;]
ssh_arguments = &quot;-o ConnectTimeout=2&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Limit to a single host ad hoc:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade --remote-host-limit homeserver
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Recommended Update Workflow&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;For desktops and workstations:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;topgrade --dry-run&lt;/code&gt; if you have made major config changes&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;topgrade&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Reboot when kernel, drivers, or core libraries update&lt;/li&gt;
&lt;li&gt;Quickly test key workflows: browser, editor, shell, audio, GPU apps&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;For servers and critical machines:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Snapshot or backup first&lt;/li&gt;
&lt;li&gt;Run Topgrade with a limited scope: &lt;code&gt;topgrade --only system&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Validate services and logs after the update&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Topgrade is a force multiplier, but your operational discipline still matters.&lt;/p&gt;
&lt;h2&gt;When You Might Not Want Topgrade&lt;/h2&gt;
&lt;p&gt;Topgrade is not mandatory for every scenario:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Minimal systems that only use a single package manager&lt;/li&gt;
&lt;li&gt;Locked-down enterprise environments with strict patch management pipelines&lt;/li&gt;
&lt;li&gt;Users who want explicit manual control over every update decision&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your stack is simple, manual updates are fine. But for most modern Linux users running layered tooling across multiple ecosystems, Topgrade saves real time and reduces silent drift.&lt;/p&gt;
&lt;h2&gt;Topgrade vs Manual Updates&lt;/h2&gt;
&lt;p&gt;Manual updates are fine when your environment is tiny.&lt;/p&gt;
&lt;p&gt;Topgrade wins when your environment is real-world:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multiple package ecosystems&lt;/li&gt;
&lt;li&gt;Frequent toolchain changes&lt;/li&gt;
&lt;li&gt;Several machines to maintain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The benefit is not just speed. It is reliability through repeatability.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;If you are serious about Linux reliability, &quot;just update the system packages&quot; is no longer enough.&lt;/p&gt;
&lt;p&gt;Topgrade gives you a practical middle ground between fully manual maintenance and fragile home-rolled shell scripts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One command&lt;/li&gt;
&lt;li&gt;Broad coverage across every ecosystem you actually use&lt;/li&gt;
&lt;li&gt;Configurable behavior and custom hooks&lt;/li&gt;
&lt;li&gt;Better long-term system hygiene&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use it weekly, keep backups, and stop letting half your toolchain lag behind.&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/YuozYQ6kILg&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>Tue, 28 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most Linux users only run their package manager and call it a day. That updates your system packages, but it often leaves the rest of your machine in a partially updated state. If you use &lt;code&gt;pip&lt;/code&gt;, &lt;code&gt;cargo&lt;/code&gt;, &lt;code&gt;flatpak&lt;/code&gt;, &lt;code&gt;snap&lt;/code&gt;, &lt;code&gt;brew&lt;/code&gt;, &lt;code&gt;oh-my-zsh&lt;/code&gt;, VS Code extensions, or even dotfile repos, those pieces can all drift out of date separately.&lt;/p&gt;
&lt;p&gt;Topgrade exists to solve this exact problem. It gives you one command to update almost everything you actually use.&lt;/p&gt;

&lt;p&gt;Keeping your machine consistently updated is not just about getting shiny new versions. It is about reducing weird breakage from version mismatch, closing security holes faster, and spending less time doing repetitive maintenance.&lt;/p&gt;
&lt;h2&gt;What Topgrade Is&lt;/h2&gt;
&lt;p&gt;Topgrade is a command-line tool that runs update commands across multiple package managers and tools in sequence. Instead of remembering ten different commands, you run one:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Topgrade handles things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System package managers (&lt;code&gt;apt&lt;/code&gt;, &lt;code&gt;dnf&lt;/code&gt;, &lt;code&gt;pacman&lt;/code&gt;, &lt;code&gt;zypper&lt;/code&gt;, &lt;code&gt;eopkg&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Language package managers (&lt;code&gt;pip&lt;/code&gt;, &lt;code&gt;cargo&lt;/code&gt;, &lt;code&gt;npm&lt;/code&gt;, &lt;code&gt;gem&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Universal package managers (&lt;code&gt;flatpak&lt;/code&gt;, &lt;code&gt;snap&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Tooling ecosystems (&lt;code&gt;rustup&lt;/code&gt;, &lt;code&gt;asdf&lt;/code&gt;, &lt;code&gt;sdkman&lt;/code&gt;, &lt;code&gt;mise&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Repository pulls (dotfiles or any local git repos)&lt;/li&gt;
&lt;li&gt;Shell and plugin ecosystems (Oh My Zsh, Fish plugins, Vim/Neovim plugins, etc.)&lt;/li&gt;
&lt;li&gt;VS Code extensions&lt;/li&gt;
&lt;li&gt;Container images (&lt;code&gt;docker&lt;/code&gt;, &lt;code&gt;podman&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Firmware via &lt;code&gt;fwupd&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The exact behavior depends on your distro and what tools you have installed, but the core idea is the same: centralize updates.&lt;/p&gt;
&lt;h2&gt;The Problem with &quot;Just Do System Updates&quot;&lt;/h2&gt;
&lt;p&gt;When people say &quot;I update regularly,&quot; they usually mean one command:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Debian/Ubuntu: &lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Fedora: &lt;code&gt;sudo dnf upgrade&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Arch: &lt;code&gt;sudo pacman -Syu&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is good, but incomplete for most power users.&lt;/p&gt;
&lt;h3&gt;You Are Only Updating One Layer&lt;/h3&gt;
&lt;p&gt;Modern Linux setups have multiple software layers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OS packages&lt;/li&gt;
&lt;li&gt;Userland language packages&lt;/li&gt;
&lt;li&gt;Third-party tools installed outside distro repos&lt;/li&gt;
&lt;li&gt;Application stores (&lt;code&gt;flatpak&lt;/code&gt;, &lt;code&gt;snap&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Git-managed configs and scripts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If only one layer is current, your system is still effectively behind.&lt;/p&gt;
&lt;h3&gt;Human Memory Is the Bottleneck&lt;/h3&gt;
&lt;p&gt;Nobody wants a giant sticky note of update commands. Even experienced users forget steps when busy.&lt;/p&gt;
&lt;p&gt;Topgrade removes this memory tax. You no longer need to think, &quot;Did I update &lt;code&gt;cargo&lt;/code&gt; crates this week? Did I pull dotfiles?&quot;&lt;/p&gt;
&lt;h3&gt;Drift Causes Hard-to-Debug Issues&lt;/h3&gt;
&lt;p&gt;Many random issues come from version drift between tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A CLI tool expects newer dependencies than your local setup has&lt;/li&gt;
&lt;li&gt;A shell plugin manager is old while the shell itself is new&lt;/li&gt;
&lt;li&gt;User-level packages lag behind system-level updates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Topgrade reduces this drift by making full-stack updates routine.&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Topgrade is available through a wide range of package managers. Pick whichever fits your setup:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Arch Linux (AUR)
yay -S topgrade-bin
# or build from source:
yay -S topgrade

# Fedora / RHEL / AlmaLinux (Copr)
sudo dnf copr enable lilay/topgrade
sudo dnf install topgrade

# Debian / Ubuntu (via deb-get)
deb-get install topgrade

# macOS or Linux (Homebrew)
brew install topgrade

# NixOS / Nix
nix-env -iA nixpkgs.topgrade

# Alpine Linux
sudo apk add topgrade

# Void Linux
sudo xbps-install -S topgrade

# Python (pip / pipx / uv)
pipx install topgrade

# Via Cargo (always gets latest release)
cargo install topgrade
&lt;/code&gt;&lt;/pre&gt;
&lt;aside class=&quot;notice notice-tip&quot;&gt;&lt;p class=&quot;notice-title&quot;&gt;Tip&lt;/p&gt;&lt;p&gt;If your distro repo version is old, installing via &lt;code&gt;cargo&lt;/code&gt; or &lt;code&gt;pipx&lt;/code&gt; is the fastest way to get the latest release without waiting for a package maintainer.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;You can also grab a pre-built self-updating binary directly from the &lt;a href=&quot;https://github.com/topgrade-rs/topgrade/releases&quot;&gt;releases page&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;First Run: What to Expect&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You may be prompted for &lt;code&gt;sudo&lt;/code&gt; depending on what update steps need elevated privileges. The first run can take a while because it catches up everything at once — that is normal.&lt;/p&gt;
&lt;h3&gt;Useful Flags&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--dry-run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Preview what would run without making changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-y&lt;/code&gt; / &lt;code&gt;--yes&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skip all confirmation prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--only &amp;lt;step&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run only specific steps (e.g. &lt;code&gt;--only system flatpak&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--disable &amp;lt;step&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Skip specific steps for this run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--edit-config&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open your config file in &lt;code&gt;$EDITOR&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--config-reference&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Print all available config options&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--remote-host-limit &amp;lt;host&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Limit remote execution to specific hosts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Safety: How to Use It Responsibly&lt;/h2&gt;
&lt;p&gt;Topgrade is powerful, so use it with a sane workflow.&lt;/p&gt;
&lt;h3&gt;Start with a Dry Run&lt;/h3&gt;
&lt;p&gt;Preview what it would do before committing:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade --dry-run
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is especially useful the first time you set it up, or after making major changes to your configuration.&lt;/p&gt;
&lt;h3&gt;Keep Backups and Snapshots&lt;/h3&gt;
&lt;p&gt;Before major updates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Snapshot with Btrfs/Timeshift/ZFS if available&lt;/li&gt;
&lt;li&gt;Backup important config and data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No update tool replaces backups.&lt;/p&gt;
&lt;h3&gt;Exclude What You Do Not Want&lt;/h3&gt;
&lt;p&gt;You can configure Topgrade to skip specific steps you do not trust or do not need. That lets you keep one-command convenience while controlling risk.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Recommended exclusion for cautious users — firmware updates:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I had firmware updates break my system before, so I prefer to review them separately. Disable them in your config:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;~/.config/topgrade.toml&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[misc]
# Skip firmware updates entirely
disable = [&quot;firmware&quot;]

[firmware]
# If firmware step does run, only show available updates — do not install
upgrade = false
&lt;/code&gt;&lt;/pre&gt;
&lt;aside class=&quot;notice notice-note&quot;&gt;&lt;p class=&quot;notice-title&quot;&gt;Note&lt;/p&gt;&lt;p&gt;The double-exclusion is intentional. &lt;code&gt;disable&lt;/code&gt; skips the step outright; &lt;code&gt;upgrade = false&lt;/code&gt; under &lt;code&gt;[firmware]&lt;/code&gt; acts as a fallback safety net so that even if the step runs, nothing actually gets flashed.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;For a one-off skip without editing your config:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade --disable firmware
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Read the Output&lt;/h3&gt;
&lt;p&gt;Treat updates like maintenance, not background noise. If one step fails, investigate before your next cycle. Topgrade reports each step&apos;s result clearly — use it.&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Topgrade&apos;s config lives at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.config/topgrade.toml&lt;/code&gt; (primary location)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/topgrade/topgrade.toml&lt;/code&gt; (alternative; both are checked)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the first run with no config present, Topgrade creates one for you automatically. Open and edit it with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade --edit-config
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Print every available option with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade --config-reference
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Key Configuration Options&lt;/h3&gt;
&lt;p&gt;Here is a practical subset of the most useful settings:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[misc]
# Cache sudo credentials upfront to avoid mid-run password prompts
pre_sudo = true

# Steps to always skip
disable = [&quot;firmware&quot;, &quot;snap&quot;]

# Steps to run before all others
first = [&quot;chezmoi&quot;]

# Steps to run after all others
last = [&quot;flatpak&quot;]

# Ignore failures for noisy or unreliable steps
ignore_failures = [&quot;pip3&quot;]

# Clean up old temp files after a run
cleanup = true

# Send a desktop notification when done
notify_end = &quot;on_failure&quot;

[git]
# Pull these repos every time you run topgrade
repos = [
    &quot;~/dotfiles&quot;,
    &quot;~/src/*/&quot;,
]
# Pull in parallel (default: 5)
max_concurrency = 5
# Rebase and autostash instead of plain merge
arguments = &quot;--rebase --autostash&quot;

[linux]
# Arch: choose your AUR helper (autodetect, paru, yay, pikaur, etc.)
arch_package_manager = &quot;paru&quot;
# Extra args passed to yay/paru
yay_arguments = &quot;--nodevel&quot;

[flatpak]
# Update system-wide Flatpak installs (requires sudo)
use_sudo = true

[python]
# Update pip packages (disabled by default)
enable_pip_review = true

[firmware]
# Only show available firmware updates, do not install
upgrade = false
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Full syntax and every available option: &lt;a href=&quot;https://github.com/topgrade-rs/topgrade/blob/main/config.example.toml&quot;&gt;https://github.com/topgrade-rs/topgrade/blob/main/config.example.toml&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Custom Commands&lt;/h3&gt;
&lt;p&gt;You can hook your own scripts into the update pipeline using &lt;code&gt;pre_commands&lt;/code&gt;, &lt;code&gt;post_commands&lt;/code&gt;, or &lt;code&gt;commands&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;# Runs before anything else
[pre_commands]
&quot;Backup dotfiles&quot; = &quot;chezmoi git -- push&quot;

# Runs after everything else
[post_commands]
&quot;Reload shell&quot; = &quot;exec $SHELL&quot;

# Custom named steps that appear in the Topgrade run
[commands]
&quot;Update Python env&quot; = &quot;~/dev/.venv/bin/pip install -U pip&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Remote Execution&lt;/h3&gt;
&lt;p&gt;If you maintain multiple machines, Topgrade can SSH into them and run updates before acting locally:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[misc]
remote_topgrades = [&quot;homeserver&quot;, &quot;nas&quot;, &quot;pi&quot;]
ssh_arguments = &quot;-o ConnectTimeout=2&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Limit to a single host ad hoc:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;topgrade --remote-host-limit homeserver
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Recommended Update Workflow&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;For desktops and workstations:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;topgrade --dry-run&lt;/code&gt; if you have made major config changes&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;topgrade&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Reboot when kernel, drivers, or core libraries update&lt;/li&gt;
&lt;li&gt;Quickly test key workflows: browser, editor, shell, audio, GPU apps&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;For servers and critical machines:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Snapshot or backup first&lt;/li&gt;
&lt;li&gt;Run Topgrade with a limited scope: &lt;code&gt;topgrade --only system&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Validate services and logs after the update&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Topgrade is a force multiplier, but your operational discipline still matters.&lt;/p&gt;
&lt;h2&gt;When You Might Not Want Topgrade&lt;/h2&gt;
&lt;p&gt;Topgrade is not mandatory for every scenario:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Minimal systems that only use a single package manager&lt;/li&gt;
&lt;li&gt;Locked-down enterprise environments with strict patch management pipelines&lt;/li&gt;
&lt;li&gt;Users who want explicit manual control over every update decision&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your stack is simple, manual updates are fine. But for most modern Linux users running layered tooling across multiple ecosystems, Topgrade saves real time and reduces silent drift.&lt;/p&gt;
&lt;h2&gt;Topgrade vs Manual Updates&lt;/h2&gt;
&lt;p&gt;Manual updates are fine when your environment is tiny.&lt;/p&gt;
&lt;p&gt;Topgrade wins when your environment is real-world:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multiple package ecosystems&lt;/li&gt;
&lt;li&gt;Frequent toolchain changes&lt;/li&gt;
&lt;li&gt;Several machines to maintain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The benefit is not just speed. It is reliability through repeatability.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;If you are serious about Linux reliability, &quot;just update the system packages&quot; is no longer enough.&lt;/p&gt;
&lt;p&gt;Topgrade gives you a practical middle ground between fully manual maintenance and fragile home-rolled shell scripts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One command&lt;/li&gt;
&lt;li&gt;Broad coverage across every ecosystem you actually use&lt;/li&gt;
&lt;li&gt;Configurable behavior and custom hooks&lt;/li&gt;
&lt;li&gt;Better long-term system hygiene&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use it weekly, keep backups, and stop letting half your toolchain lag behind.&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/YuozYQ6kILg&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 NFS Network Drive Settings for Linux</title><link>https://christitus.com/fix-nfs-network-drives/</link><guid isPermaLink="true">https://christitus.com/fix-nfs-network-drives/</guid><description>&lt;p&gt;Most people mount NFS shares with a short line and move on. That works, but if you use network storage heavily (media libraries, VMs, homelab backups, project files), your mount options directly affect reliability, boot behavior, and performance.&lt;/p&gt;
&lt;p&gt;This guide breaks down a practical high-reliability NFS option set and compares it to a basic mount setup, using Linux &lt;code&gt;nfs-utils&lt;/code&gt; mount documentation (&lt;code&gt;man 5 nfs&lt;/code&gt;) and systemd mount behavior (&lt;code&gt;man 5 systemd.mount&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;Quick Comparison: Basic vs Tuned&lt;/h2&gt;
&lt;h3&gt;Basic fstab entry&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Tuned fstab entry (example)&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,bg,hard,nofail,noatime,rsize=1048576,wsize=1048576,timeo=600,retrans=5,x-systemd.automount,x-systemd.mount-timeout=90,_netdev 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;What changes?&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Basic (&lt;code&gt;defaults&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Tuned Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NFS protocol version&lt;/td&gt;
&lt;td&gt;Auto-negotiate&lt;/td&gt;
&lt;td&gt;Pinned to &lt;code&gt;4.1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure behavior&lt;/td&gt;
&lt;td&gt;Default retry behavior&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;hard&lt;/code&gt; retries forever (safer for data integrity)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boot experience&lt;/td&gt;
&lt;td&gt;May block depending on environment&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nofail&lt;/code&gt; + &lt;code&gt;x-systemd.automount&lt;/code&gt; helps avoid boot hangs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network timing&lt;/td&gt;
&lt;td&gt;Generic defaults&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;timeo=600,retrans=5&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Throughput tuning&lt;/td&gt;
&lt;td&gt;Negotiated defaults&lt;/td&gt;
&lt;td&gt;Forces &lt;code&gt;rsize/wsize&lt;/code&gt; up to 1 MiB cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access-time writes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;relatime&lt;/code&gt; typically&lt;/td&gt;
&lt;td&gt;&lt;code&gt;noatime&lt;/code&gt; to reduce metadata writes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network ordering&lt;/td&gt;
&lt;td&gt;Auto-detected for NFS&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;_netdev&lt;/code&gt; dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Option-by-Option Breakdown&lt;/h2&gt;
&lt;p&gt;Reference base: &lt;code&gt;man 5 nfs&lt;/code&gt; and &lt;code&gt;man 5 systemd.mount&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;nfsvers=4.1&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Pins the client to NFSv4.1.&lt;/li&gt;
&lt;li&gt;Official behavior: Without &lt;code&gt;nfsvers&lt;/code&gt; (or &lt;code&gt;vers&lt;/code&gt;), Linux clients typically try newer NFS versions first and negotiate down.&lt;/li&gt;
&lt;li&gt;Why use it: Predictability. If server and clients are known-good on 4.1, pinning avoids surprises after updates.&lt;/li&gt;
&lt;li&gt;Tradeoff: You lose automatic use of newer protocol features (for example, if 4.2 is supported and useful).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;bg&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: If mount fails/timeouts, mount helper retries in the background.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Parent returns success while child keeps retrying.&lt;/li&gt;
&lt;li&gt;systemd detail (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): &lt;code&gt;systemd-fstab-generator&lt;/code&gt; translates &lt;code&gt;bg&lt;/code&gt; semantics and effectively applies behavior similar to long retries plus &lt;code&gt;fg,nofail&lt;/code&gt; handling under systemd job control.&lt;/li&gt;
&lt;li&gt;Why use it: Better boot resilience when NAS/network is slow.&lt;/li&gt;
&lt;li&gt;Tradeoff: Failure may be less obvious immediately because retries continue in background.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;hard&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: NFS operations retry indefinitely after timeout.&lt;/li&gt;
&lt;li&gt;Official behavior: &lt;code&gt;hard&lt;/code&gt; is default and strongly preferred for data integrity; &lt;code&gt;soft&lt;/code&gt; can return I/O errors and may risk silent corruption in some workflows.&lt;/li&gt;
&lt;li&gt;Why use it: Correctness and durability over convenience.&lt;/li&gt;
&lt;li&gt;Tradeoff: Apps can hang waiting for server recovery.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;nofail&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Mount is wanted, not required, during boot.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Boot continues even if mount is unavailable; unit is not ordered to block boot target completion.&lt;/li&gt;
&lt;li&gt;Why use it: Prevent boot failures when NAS is down.&lt;/li&gt;
&lt;li&gt;Tradeoff: Service depending on that path may fail later unless you handle dependency checks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;noatime&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Disables access-time updates on reads.&lt;/li&gt;
&lt;li&gt;Why use it: Reduces metadata traffic and write amplification on busy shares.&lt;/li&gt;
&lt;li&gt;Tradeoff: Loses accurate &lt;code&gt;atime&lt;/code&gt; semantics for tools/workflows that rely on access timestamps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;rsize=1048576&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets max read request payload to 1,048,576 bytes (1 MiB).&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Linux NFS client max read payload is 1 MiB; unsupported values are clamped/rounded according to rules.&lt;/li&gt;
&lt;li&gt;Why use it: High-throughput sequential read workloads can benefit.&lt;/li&gt;
&lt;li&gt;Tradeoff: If network/server path can’t handle large I/O well, negotiated defaults may perform more consistently.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;wsize=1048576&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets max write request payload to 1 MiB.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Same cap/rounding behavior as &lt;code&gt;rsize&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Why use it: Helps throughput for large sequential writes.&lt;/li&gt;
&lt;li&gt;Tradeoff: Same caution as &lt;code&gt;rsize&lt;/code&gt;; test with your server/network.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;timeo=600&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets RPC timeout in deciseconds.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): For TCP, &lt;code&gt;600&lt;/code&gt; means 60 seconds; TCP uses linear backoff and this value is already the standard default for TCP/RDMA.&lt;/li&gt;
&lt;li&gt;Why use it: Mainly explicitness/documentation in your &lt;code&gt;fstab&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Tradeoff: Usually redundant for TCP NFS because it matches default behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;retrans=5&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Number of retries before the client escalates recovery behavior.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): TCP default retry count is lower by default; with &lt;code&gt;hard&lt;/code&gt;, the client still continues broader recovery even after retry cycles.&lt;/li&gt;
&lt;li&gt;Why use it: More tolerance for transient network stalls before warning/recovery transitions.&lt;/li&gt;
&lt;li&gt;Tradeoff: Longer delay before surfacing responsiveness issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;x-systemd.automount&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Creates an automount unit so the share mounts on first access rather than during early boot.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Generates an automount unit from &lt;code&gt;fstab&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Why use it: Excellent for laptops/desktops/homelabs where network readiness timing is inconsistent.&lt;/li&gt;
&lt;li&gt;Tradeoff: First access to the path incurs mount latency.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;x-systemd.mount-timeout=90&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Limits how long systemd waits for mount command completion.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): &lt;code&gt;fstab&lt;/code&gt;-only option that maps to mount job timeout behavior.&lt;/li&gt;
&lt;li&gt;Why use it: Prevents very long hangs on dead endpoints.&lt;/li&gt;
&lt;li&gt;Tradeoff: Too short a timeout can fail mounts on slow links/startup races.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;_netdev&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Explicitly marks mount as network-dependent.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Pulls in network-online ordering and treats mount as remote fs.&lt;/li&gt;
&lt;li&gt;Why use it: Makes dependency intent explicit, especially in complex setups/VPN/overlay networks.&lt;/li&gt;
&lt;li&gt;Tradeoff: Usually redundant for plain NFS, but helpful for clarity and edge cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Final &lt;code&gt;0 0&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;First &lt;code&gt;0&lt;/code&gt;: dump backup utility field (commonly unused, usually &lt;code&gt;0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Second &lt;code&gt;0&lt;/code&gt;: &lt;code&gt;fsck&lt;/code&gt; order. NFS is network fs and not checked via local &lt;code&gt;fsck&lt;/code&gt;, so &lt;code&gt;0&lt;/code&gt; is correct.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Is the Tuned Line Always Better?&lt;/h2&gt;
&lt;p&gt;No. A basic entry is fine for light use:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is often enough for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Home media shares&lt;/li&gt;
&lt;li&gt;Occasional backups&lt;/li&gt;
&lt;li&gt;Non-critical personal files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use the tuned profile when you care about predictable behavior under failure and want stricter control over boot/mount characteristics.&lt;/p&gt;
&lt;h2&gt;Practical Recommended Profiles&lt;/h2&gt;
&lt;h3&gt;1) Balanced desktop/laptop&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,hard,nofail,_netdev,x-systemd.automount,x-systemd.mount-timeout=90 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2) Throughput-focused LAN workstation&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,hard,noatime,rsize=1048576,wsize=1048576,timeo=600,retrans=5,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3) Minimal and safe&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Verify What Is Actually Active&lt;/h2&gt;
&lt;p&gt;After mounting, validate effective options (especially negotiated &lt;code&gt;rsize/wsize&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;findmnt -t nfs,nfs4
nfsstat -m
cat /proc/mounts | grep &apos; /mnt/data &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The value in &lt;code&gt;fstab&lt;/code&gt; is your request. The effective value can differ after client/server negotiation.&lt;/p&gt;
&lt;h2&gt;Official Documentation Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;man 5 nfs&lt;/code&gt; (from nfs-utils package on Linux)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man 8 mount.nfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man 5 systemd.mount&lt;/code&gt; (for &lt;code&gt;x-systemd.*&lt;/code&gt;, &lt;code&gt;_netdev&lt;/code&gt;, and &lt;code&gt;nofail&lt;/code&gt; behavior)&lt;/li&gt;
&lt;li&gt;Upstream nfs-utils project: &lt;a href=&quot;https://github.com/stefanha/nfs-utils&quot;&gt;https://github.com/stefanha/nfs-utils&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;If you just want a stable setup, start with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you want stronger control over reliability and behavior under failures, your advanced line is a strong baseline, especially with &lt;code&gt;hard&lt;/code&gt;, &lt;code&gt;nofail&lt;/code&gt;, and &lt;code&gt;x-systemd.automount&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The best NFS config is not the longest one. It is the one you can explain, verify, and maintain.&lt;/p&gt;
</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most people mount NFS shares with a short line and move on. That works, but if you use network storage heavily (media libraries, VMs, homelab backups, project files), your mount options directly affect reliability, boot behavior, and performance.&lt;/p&gt;
&lt;p&gt;This guide breaks down a practical high-reliability NFS option set and compares it to a basic mount setup, using Linux &lt;code&gt;nfs-utils&lt;/code&gt; mount documentation (&lt;code&gt;man 5 nfs&lt;/code&gt;) and systemd mount behavior (&lt;code&gt;man 5 systemd.mount&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;Quick Comparison: Basic vs Tuned&lt;/h2&gt;
&lt;h3&gt;Basic fstab entry&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Tuned fstab entry (example)&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,bg,hard,nofail,noatime,rsize=1048576,wsize=1048576,timeo=600,retrans=5,x-systemd.automount,x-systemd.mount-timeout=90,_netdev 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;What changes?&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Basic (&lt;code&gt;defaults&lt;/code&gt;)&lt;/th&gt;
&lt;th&gt;Tuned Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NFS protocol version&lt;/td&gt;
&lt;td&gt;Auto-negotiate&lt;/td&gt;
&lt;td&gt;Pinned to &lt;code&gt;4.1&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure behavior&lt;/td&gt;
&lt;td&gt;Default retry behavior&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;hard&lt;/code&gt; retries forever (safer for data integrity)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boot experience&lt;/td&gt;
&lt;td&gt;May block depending on environment&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nofail&lt;/code&gt; + &lt;code&gt;x-systemd.automount&lt;/code&gt; helps avoid boot hangs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network timing&lt;/td&gt;
&lt;td&gt;Generic defaults&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;timeo=600,retrans=5&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Throughput tuning&lt;/td&gt;
&lt;td&gt;Negotiated defaults&lt;/td&gt;
&lt;td&gt;Forces &lt;code&gt;rsize/wsize&lt;/code&gt; up to 1 MiB cap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access-time writes&lt;/td&gt;
&lt;td&gt;&lt;code&gt;relatime&lt;/code&gt; typically&lt;/td&gt;
&lt;td&gt;&lt;code&gt;noatime&lt;/code&gt; to reduce metadata writes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network ordering&lt;/td&gt;
&lt;td&gt;Auto-detected for NFS&lt;/td&gt;
&lt;td&gt;Explicit &lt;code&gt;_netdev&lt;/code&gt; dependency&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Option-by-Option Breakdown&lt;/h2&gt;
&lt;p&gt;Reference base: &lt;code&gt;man 5 nfs&lt;/code&gt; and &lt;code&gt;man 5 systemd.mount&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;nfsvers=4.1&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Pins the client to NFSv4.1.&lt;/li&gt;
&lt;li&gt;Official behavior: Without &lt;code&gt;nfsvers&lt;/code&gt; (or &lt;code&gt;vers&lt;/code&gt;), Linux clients typically try newer NFS versions first and negotiate down.&lt;/li&gt;
&lt;li&gt;Why use it: Predictability. If server and clients are known-good on 4.1, pinning avoids surprises after updates.&lt;/li&gt;
&lt;li&gt;Tradeoff: You lose automatic use of newer protocol features (for example, if 4.2 is supported and useful).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;bg&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: If mount fails/timeouts, mount helper retries in the background.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Parent returns success while child keeps retrying.&lt;/li&gt;
&lt;li&gt;systemd detail (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): &lt;code&gt;systemd-fstab-generator&lt;/code&gt; translates &lt;code&gt;bg&lt;/code&gt; semantics and effectively applies behavior similar to long retries plus &lt;code&gt;fg,nofail&lt;/code&gt; handling under systemd job control.&lt;/li&gt;
&lt;li&gt;Why use it: Better boot resilience when NAS/network is slow.&lt;/li&gt;
&lt;li&gt;Tradeoff: Failure may be less obvious immediately because retries continue in background.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;hard&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: NFS operations retry indefinitely after timeout.&lt;/li&gt;
&lt;li&gt;Official behavior: &lt;code&gt;hard&lt;/code&gt; is default and strongly preferred for data integrity; &lt;code&gt;soft&lt;/code&gt; can return I/O errors and may risk silent corruption in some workflows.&lt;/li&gt;
&lt;li&gt;Why use it: Correctness and durability over convenience.&lt;/li&gt;
&lt;li&gt;Tradeoff: Apps can hang waiting for server recovery.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;nofail&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Mount is wanted, not required, during boot.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Boot continues even if mount is unavailable; unit is not ordered to block boot target completion.&lt;/li&gt;
&lt;li&gt;Why use it: Prevent boot failures when NAS is down.&lt;/li&gt;
&lt;li&gt;Tradeoff: Service depending on that path may fail later unless you handle dependency checks.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;noatime&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Disables access-time updates on reads.&lt;/li&gt;
&lt;li&gt;Why use it: Reduces metadata traffic and write amplification on busy shares.&lt;/li&gt;
&lt;li&gt;Tradeoff: Loses accurate &lt;code&gt;atime&lt;/code&gt; semantics for tools/workflows that rely on access timestamps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;rsize=1048576&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets max read request payload to 1,048,576 bytes (1 MiB).&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Linux NFS client max read payload is 1 MiB; unsupported values are clamped/rounded according to rules.&lt;/li&gt;
&lt;li&gt;Why use it: High-throughput sequential read workloads can benefit.&lt;/li&gt;
&lt;li&gt;Tradeoff: If network/server path can’t handle large I/O well, negotiated defaults may perform more consistently.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;wsize=1048576&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets max write request payload to 1 MiB.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): Same cap/rounding behavior as &lt;code&gt;rsize&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Why use it: Helps throughput for large sequential writes.&lt;/li&gt;
&lt;li&gt;Tradeoff: Same caution as &lt;code&gt;rsize&lt;/code&gt;; test with your server/network.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;timeo=600&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Sets RPC timeout in deciseconds.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): For TCP, &lt;code&gt;600&lt;/code&gt; means 60 seconds; TCP uses linear backoff and this value is already the standard default for TCP/RDMA.&lt;/li&gt;
&lt;li&gt;Why use it: Mainly explicitness/documentation in your &lt;code&gt;fstab&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Tradeoff: Usually redundant for TCP NFS because it matches default behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;retrans=5&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Number of retries before the client escalates recovery behavior.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;nfs(5)&lt;/code&gt;): TCP default retry count is lower by default; with &lt;code&gt;hard&lt;/code&gt;, the client still continues broader recovery even after retry cycles.&lt;/li&gt;
&lt;li&gt;Why use it: More tolerance for transient network stalls before warning/recovery transitions.&lt;/li&gt;
&lt;li&gt;Tradeoff: Longer delay before surfacing responsiveness issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;x-systemd.automount&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Creates an automount unit so the share mounts on first access rather than during early boot.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Generates an automount unit from &lt;code&gt;fstab&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Why use it: Excellent for laptops/desktops/homelabs where network readiness timing is inconsistent.&lt;/li&gt;
&lt;li&gt;Tradeoff: First access to the path incurs mount latency.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;x-systemd.mount-timeout=90&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Limits how long systemd waits for mount command completion.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): &lt;code&gt;fstab&lt;/code&gt;-only option that maps to mount job timeout behavior.&lt;/li&gt;
&lt;li&gt;Why use it: Prevents very long hangs on dead endpoints.&lt;/li&gt;
&lt;li&gt;Tradeoff: Too short a timeout can fail mounts on slow links/startup races.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;code&gt;_netdev&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;What it does: Explicitly marks mount as network-dependent.&lt;/li&gt;
&lt;li&gt;Official behavior (&lt;code&gt;systemd.mount(5)&lt;/code&gt;): Pulls in network-online ordering and treats mount as remote fs.&lt;/li&gt;
&lt;li&gt;Why use it: Makes dependency intent explicit, especially in complex setups/VPN/overlay networks.&lt;/li&gt;
&lt;li&gt;Tradeoff: Usually redundant for plain NFS, but helpful for clarity and edge cases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Final &lt;code&gt;0 0&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;First &lt;code&gt;0&lt;/code&gt;: dump backup utility field (commonly unused, usually &lt;code&gt;0&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Second &lt;code&gt;0&lt;/code&gt;: &lt;code&gt;fsck&lt;/code&gt; order. NFS is network fs and not checked via local &lt;code&gt;fsck&lt;/code&gt;, so &lt;code&gt;0&lt;/code&gt; is correct.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Is the Tuned Line Always Better?&lt;/h2&gt;
&lt;p&gt;No. A basic entry is fine for light use:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That is often enough for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Home media shares&lt;/li&gt;
&lt;li&gt;Occasional backups&lt;/li&gt;
&lt;li&gt;Non-critical personal files&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use the tuned profile when you care about predictable behavior under failure and want stricter control over boot/mount characteristics.&lt;/p&gt;
&lt;h2&gt;Practical Recommended Profiles&lt;/h2&gt;
&lt;h3&gt;1) Balanced desktop/laptop&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,hard,nofail,_netdev,x-systemd.automount,x-systemd.mount-timeout=90 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2) Throughput-focused LAN workstation&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs nfsvers=4.1,hard,noatime,rsize=1048576,wsize=1048576,timeo=600,retrans=5,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3) Minimal and safe&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Verify What Is Actually Active&lt;/h2&gt;
&lt;p&gt;After mounting, validate effective options (especially negotiated &lt;code&gt;rsize/wsize&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;findmnt -t nfs,nfs4
nfsstat -m
cat /proc/mounts | grep &apos; /mnt/data &apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The value in &lt;code&gt;fstab&lt;/code&gt; is your request. The effective value can differ after client/server negotiation.&lt;/p&gt;
&lt;h2&gt;Official Documentation Sources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;man 5 nfs&lt;/code&gt; (from nfs-utils package on Linux)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man 8 mount.nfs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;man 5 systemd.mount&lt;/code&gt; (for &lt;code&gt;x-systemd.*&lt;/code&gt;, &lt;code&gt;_netdev&lt;/code&gt;, and &lt;code&gt;nofail&lt;/code&gt; behavior)&lt;/li&gt;
&lt;li&gt;Upstream nfs-utils project: &lt;a href=&quot;https://github.com/stefanha/nfs-utils&quot;&gt;https://github.com/stefanha/nfs-utils&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;If you just want a stable setup, start with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nas:/data /mnt/data nfs defaults,_netdev,nofail 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you want stronger control over reliability and behavior under failures, your advanced line is a strong baseline, especially with &lt;code&gt;hard&lt;/code&gt;, &lt;code&gt;nofail&lt;/code&gt;, and &lt;code&gt;x-systemd.automount&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The best NFS config is not the longest one. It is the one you can explain, verify, and maintain.&lt;/p&gt;
</content:encoded></item><item><title>Top Linux Distros</title><link>https://christitus.com/top-linux-distros/</link><guid isPermaLink="true">https://christitus.com/top-linux-distros/</guid><description>&lt;p&gt;Linux is not for everyone, but for those that want to get away from the evil corporate overloads like Microsoft and Apple, Linux is a great choice. There are many different Linux distributions (distros) to choose from, each with its own unique features and benefits. In this article, we will take a look at some of the top Linux distros available in 2026.&lt;/p&gt;

&lt;p&gt;The Linux distros don&apos;t particulary matter if you know what your are doing in Linux as you can install and change ANY distro to your needs, but for a noob the starting spot is important. The distros listed below are all great choices for different types of users, whether you are a gamer, a power user, or just looking for a stable and user-friendly operating system.&lt;/p&gt;
&lt;h2&gt;Bazzite (The Noob Gamer&apos;s Choice or HTPC)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/bazzite.webp&quot; alt=&quot;bazzite&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If you have ask, What distro should I use? Bazzite is a great answer if you are a gamer. It is consider an &quot;Atomic&quot; desktop where you can&apos;t change the system packages, but you can configure them. This is a perfect jumping off point for new Linux users who want to get into gaming on Linux. Bazzite has a large library of games available through its own store, and it also supports Steam and other popular gaming platforms.&lt;/p&gt;
&lt;p&gt;Unique commands and features of Bazzite:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ujust&lt;/code&gt; - Main cli command for installing and managing software packages. It is a user-friendly package manager that simplifies the process of installing and updating software on Bazzite.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ujust --choose&lt;/code&gt; will show all commands&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bazaar&lt;/code&gt; - GUI tool for installing and managing flatpak software in Bazzite. Based on &lt;a href=&quot;https://github.com/bazaar-org/bazaar&quot;&gt;https://github.com/bazaar-org/bazaar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew&lt;/code&gt; - Homebrew modified for bazzite - &lt;a href=&quot;https://docs.bazzite.gg/Installing_and_Managing_Software/Homebrew/&quot;&gt;https://docs.bazzite.gg/Installing_and_Managing_Software/Homebrew/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Containers from &lt;code&gt;distrobox&lt;/code&gt; and &lt;code&gt;quadlet&lt;/code&gt; - Install anything inside of a container using any package manager - &lt;a href=&quot;https://docs.bazzite.gg/Installing_and_Managing_Software/Containers/&quot;&gt;https://docs.bazzite.gg/Installing_and_Managing_Software/Containers/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;CachyOS (The Power User&apos;s Choice)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/cachyos.webp&quot; alt=&quot;cachyos&quot; /&gt;&lt;/p&gt;
&lt;p&gt;CachyOS is a great choice for power users who want a stable and customizable operating system. It is based on Arch Linux and comes with a lot of pre-installed software and tools for power users. CachyOS is designed to be fast and efficient, and it has a large community of users who contribute to its development. This distro is perfect for users who want to have complete control over their system and are willing to put in the effort to learn how to use it. If you want to tinker and be on the bleeding edge, CachyOS is a great choice.&lt;/p&gt;
&lt;p&gt;Unique features of CachyOS:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Massive customization and variety of installation options (All Desktop environments and Tiling Manager configurations)&lt;/li&gt;
&lt;li&gt;Optimized kernel and packages for modern PCs. (Bazzites kernels is heavily based off CachyOS) &lt;em&gt;Note: I personally use cachy repos on Arch because of this!&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Linux Mint (The Old Man I just want it to work Choice)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/mint.webp&quot; alt=&quot;mint&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Linux Mint is a great choice for users who just want a stable and user-friendly operating system. It is based on Ubuntu and comes with a lot of pre-installed software and tools for everyday use. Linux Mint has a large community of users who contribute to its development, and it is known for its ease of use and stability. This distro is perfect for users who want a simple and reliable operating system that just works without needing to tinker with it.&lt;/p&gt;
&lt;p&gt;Unique features of Linux Mint:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Easy to use and user-friendly interface - Drop in replacement for most Windows users to get started and not overwhelmed&lt;/li&gt;
&lt;li&gt;Stability and reliability - Linux Mint is known for its stability and reliability, making it a great choice for users who want a system that just works without needing to tinker with it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Arch Linux (For when you ascend and no longer need distros)&lt;/h2&gt;
&lt;p&gt;Arch Linux is when you truly elevate into the elites of the world. You have made it and you are making your own thing that no one else has or can achieve. You transend the mortal realm and become a god.&lt;/p&gt;
&lt;p&gt;This has been my home for over 2 years and I can&apos;t see myself using any other distro at this point. Sooo many projects are based on it and it is perfect for those that want the bleeding edge and really want to learn how Linux works. Arch is a great choice for users who want complete control over their system and are willing to put in the effort to learn how to use it. It has a large community of users who contribute to its development, and it is known for its simplicity and elegance.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Picking a distro is simply a starting spot, and you can change it to your needs. All the above distros are based on only 3 mainline distributions (Arch, Fedora, and Debian/Ubuntu) and you can change any of them to your needs. The distros listed above are all great choices for different types of users, whether you are a gamer, a power user, or just looking for a stable and user-friendly operating system. Ultimately, the best Linux distro for you will be the one you customize to your preferences and needs. You must figure out what you like about Linux and if it will suit your needs. If you just want to use Microsoft Office, Adobe PDF, and play games, use Windows.&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/hnNjFysodRo&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, 23 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Linux is not for everyone, but for those that want to get away from the evil corporate overloads like Microsoft and Apple, Linux is a great choice. There are many different Linux distributions (distros) to choose from, each with its own unique features and benefits. In this article, we will take a look at some of the top Linux distros available in 2026.&lt;/p&gt;

&lt;p&gt;The Linux distros don&apos;t particulary matter if you know what your are doing in Linux as you can install and change ANY distro to your needs, but for a noob the starting spot is important. The distros listed below are all great choices for different types of users, whether you are a gamer, a power user, or just looking for a stable and user-friendly operating system.&lt;/p&gt;
&lt;h2&gt;Bazzite (The Noob Gamer&apos;s Choice or HTPC)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/bazzite.webp&quot; alt=&quot;bazzite&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If you have ask, What distro should I use? Bazzite is a great answer if you are a gamer. It is consider an &quot;Atomic&quot; desktop where you can&apos;t change the system packages, but you can configure them. This is a perfect jumping off point for new Linux users who want to get into gaming on Linux. Bazzite has a large library of games available through its own store, and it also supports Steam and other popular gaming platforms.&lt;/p&gt;
&lt;p&gt;Unique commands and features of Bazzite:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ujust&lt;/code&gt; - Main cli command for installing and managing software packages. It is a user-friendly package manager that simplifies the process of installing and updating software on Bazzite.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ujust --choose&lt;/code&gt; will show all commands&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bazaar&lt;/code&gt; - GUI tool for installing and managing flatpak software in Bazzite. Based on &lt;a href=&quot;https://github.com/bazaar-org/bazaar&quot;&gt;https://github.com/bazaar-org/bazaar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew&lt;/code&gt; - Homebrew modified for bazzite - &lt;a href=&quot;https://docs.bazzite.gg/Installing_and_Managing_Software/Homebrew/&quot;&gt;https://docs.bazzite.gg/Installing_and_Managing_Software/Homebrew/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Containers from &lt;code&gt;distrobox&lt;/code&gt; and &lt;code&gt;quadlet&lt;/code&gt; - Install anything inside of a container using any package manager - &lt;a href=&quot;https://docs.bazzite.gg/Installing_and_Managing_Software/Containers/&quot;&gt;https://docs.bazzite.gg/Installing_and_Managing_Software/Containers/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;CachyOS (The Power User&apos;s Choice)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/cachyos.webp&quot; alt=&quot;cachyos&quot; /&gt;&lt;/p&gt;
&lt;p&gt;CachyOS is a great choice for power users who want a stable and customizable operating system. It is based on Arch Linux and comes with a lot of pre-installed software and tools for power users. CachyOS is designed to be fast and efficient, and it has a large community of users who contribute to its development. This distro is perfect for users who want to have complete control over their system and are willing to put in the effort to learn how to use it. If you want to tinker and be on the bleeding edge, CachyOS is a great choice.&lt;/p&gt;
&lt;p&gt;Unique features of CachyOS:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Massive customization and variety of installation options (All Desktop environments and Tiling Manager configurations)&lt;/li&gt;
&lt;li&gt;Optimized kernel and packages for modern PCs. (Bazzites kernels is heavily based off CachyOS) &lt;em&gt;Note: I personally use cachy repos on Arch because of this!&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Linux Mint (The Old Man I just want it to work Choice)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/mint.webp&quot; alt=&quot;mint&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Linux Mint is a great choice for users who just want a stable and user-friendly operating system. It is based on Ubuntu and comes with a lot of pre-installed software and tools for everyday use. Linux Mint has a large community of users who contribute to its development, and it is known for its ease of use and stability. This distro is perfect for users who want a simple and reliable operating system that just works without needing to tinker with it.&lt;/p&gt;
&lt;p&gt;Unique features of Linux Mint:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Easy to use and user-friendly interface - Drop in replacement for most Windows users to get started and not overwhelmed&lt;/li&gt;
&lt;li&gt;Stability and reliability - Linux Mint is known for its stability and reliability, making it a great choice for users who want a system that just works without needing to tinker with it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Arch Linux (For when you ascend and no longer need distros)&lt;/h2&gt;
&lt;p&gt;Arch Linux is when you truly elevate into the elites of the world. You have made it and you are making your own thing that no one else has or can achieve. You transend the mortal realm and become a god.&lt;/p&gt;
&lt;p&gt;This has been my home for over 2 years and I can&apos;t see myself using any other distro at this point. Sooo many projects are based on it and it is perfect for those that want the bleeding edge and really want to learn how Linux works. Arch is a great choice for users who want complete control over their system and are willing to put in the effort to learn how to use it. It has a large community of users who contribute to its development, and it is known for its simplicity and elegance.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Picking a distro is simply a starting spot, and you can change it to your needs. All the above distros are based on only 3 mainline distributions (Arch, Fedora, and Debian/Ubuntu) and you can change any of them to your needs. The distros listed above are all great choices for different types of users, whether you are a gamer, a power user, or just looking for a stable and user-friendly operating system. Ultimately, the best Linux distro for you will be the one you customize to your preferences and needs. You must figure out what you like about Linux and if it will suit your needs. If you just want to use Microsoft Office, Adobe PDF, and play games, use Windows.&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/hnNjFysodRo&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 You Should Avoid Pop!_OS 24.04 Right Now</title><link>https://christitus.com/stop-using-pop-os-cosmic/</link><guid isPermaLink="true">https://christitus.com/stop-using-pop-os-cosmic/</guid><description>&lt;p&gt;If you are looking for a Linux distro that is stable, predictable, and easy to recommend to normal people, Pop!_OS 24.04 is not it. The main reason is simple: System76 launched it with COSMIC in beta. That one decision turns what should have been a safe long-term support release into a moving target.&lt;/p&gt;
&lt;p&gt;For a lab machine, a spare laptop, or someone who enjoys testing unfinished software, that might be fine. For everyone else, especially new Linux users, that is a terrible trade. An LTS release is supposed to be the version you install when you want fewer surprises, not more.&lt;/p&gt;

&lt;h2&gt;The Real Problem&lt;/h2&gt;
&lt;p&gt;System76 has been building COSMIC as its own desktop environment, and on paper that sounds great. More competition in Linux desktop development is a good thing. The problem is not that COSMIC exists. The problem is that Pop!_OS 24.04 ships a beta desktop on top of an Ubuntu LTS base and then expects users to treat it like a dependable daily driver.&lt;/p&gt;
&lt;p&gt;That creates a mismatch in expectations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;People hear &quot;24.04&quot; and &quot;LTS&quot; and expect stability.&lt;/li&gt;
&lt;li&gt;People buy System76 hardware and expect the software to be polished.&lt;/li&gt;
&lt;li&gt;New Linux users hear Pop!_OS recommended and assume it is a safe starting point.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Right now, those assumptions are wrong.&lt;/p&gt;
&lt;h2&gt;Why A Beta Desktop On LTS Is A Bad Idea&lt;/h2&gt;
&lt;p&gt;Long-term support releases exist for one reason: reliability. You choose them because you want to install once and stop thinking about the desktop breaking every few days. If the desktop shell itself is still behaving like a public test build, the LTS label does not mean much to the end user.&lt;/p&gt;
&lt;p&gt;When the desktop environment is unstable, every basic task becomes suspect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Logging in&lt;/li&gt;
&lt;li&gt;Managing windows and workspaces&lt;/li&gt;
&lt;li&gt;Resuming from sleep&lt;/li&gt;
&lt;li&gt;Audio controls&lt;/li&gt;
&lt;li&gt;GPU acceleration&lt;/li&gt;
&lt;li&gt;Multi-monitor behavior&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is not a small issue. The desktop environment is the operating system experience for most users. If it leaks memory, crashes, or has broken display handling, then the distro does not feel reliable no matter how solid the base packages are underneath.&lt;/p&gt;
&lt;h2&gt;The Bugs Are Not Edge Cases&lt;/h2&gt;
&lt;p&gt;This is not just a complaint about a rough animation or a missing setting. The issue tracker has repeated reports of serious bugs that affect day-to-day use.&lt;/p&gt;
&lt;h3&gt;Memory Leaks And Stability Problems&lt;/h3&gt;
&lt;p&gt;There are multiple reports around runaway memory usage and general instability:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/2122&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/2122&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3224&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3224&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/2920&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/2920&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/2013&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/2013&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/1591&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/1591&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your desktop session gradually eats RAM or becomes unstable over time, that is not a tiny annoyance. That is the kind of bug that makes a machine feel unreliable even when you are doing basic work like browsing, coding, or streaming.&lt;/p&gt;
&lt;h3&gt;GPU And Display Problems&lt;/h3&gt;
&lt;p&gt;Linux desktop success lives and dies on display handling. If monitors flicker, GPU acceleration breaks, or NVIDIA systems act up, many users are done immediately. There are active reports covering those areas too:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3270&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3270&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3249&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3249&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This matters because Pop!_OS has historically been recommended to people specifically because it handled hardware reasonably well. If the new desktop introduces display instability, that recommendation gets a lot harder to defend.&lt;/p&gt;
&lt;h3&gt;Audio And Volume Bugs&lt;/h3&gt;
&lt;p&gt;Audio problems are another instant deal-breaker for normal users. When volume controls misbehave or sound routing becomes inconsistent, people do not care that the desktop is &quot;still improving.&quot; They just think Linux is broken.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3074&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3074&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3094&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3094&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3026&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Again, this is the exact category of bug that should not be front and center on something positioned like a polished desktop OS.&lt;/p&gt;
&lt;h2&gt;Why This Is Worse For New Linux Users&lt;/h2&gt;
&lt;p&gt;Experienced Linux users can work around a lot. They can drop to a TTY, restart services, swap desktop environments, inspect logs, and recover from bad updates. New users cannot. They install a distro, hit three broken behaviors in a week, and conclude that Linux desktop is not ready.&lt;/p&gt;
&lt;p&gt;That is why I have a problem with Pop!_OS 24.04 in its current state. It is not just rough for enthusiasts. It is actively risky as a recommendation to beginners because beginners are the exact people who are most likely to trust the branding around an LTS release.&lt;/p&gt;
&lt;p&gt;If you hand a new user a distro with a beta desktop, you are not giving them a stable introduction to Linux. You are turning them into a tester whether they agreed to that or not.&lt;/p&gt;
&lt;h2&gt;Who Should Skip Pop!_OS 24.04&lt;/h2&gt;
&lt;p&gt;I would avoid Pop!_OS 24.04 right now if you are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New to Linux&lt;/li&gt;
&lt;li&gt;Installing on your main work machine&lt;/li&gt;
&lt;li&gt;Using NVIDIA hardware and want the least drama possible&lt;/li&gt;
&lt;li&gt;Buying a laptop because you just want it to work&lt;/li&gt;
&lt;li&gt;Recommending a distro to friends or family&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In all of those cases, stability matters more than novelty.&lt;/p&gt;
&lt;h2&gt;Who Might Still Want It&lt;/h2&gt;
&lt;p&gt;There is still a small group of people who may want to run it anyway:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Users who specifically want to test COSMIC&lt;/li&gt;
&lt;li&gt;People filing bug reports and helping development&lt;/li&gt;
&lt;li&gt;Tinkerers with a backup machine&lt;/li&gt;
&lt;li&gt;Anyone who understands they are effectively running beta desktop software&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a valid use case. But that is a tester profile, not a mainstream recommendation.&lt;/p&gt;
&lt;h2&gt;Better Options Right Now&lt;/h2&gt;
&lt;p&gt;If your goal is a dependable Linux desktop in 2026, I would point most people somewhere else until COSMIC matures.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Linux Mint if you want conservative and easy&lt;/li&gt;
&lt;li&gt;Fedora if you want modern without chasing a beta desktop shell&lt;/li&gt;
&lt;li&gt;Ubuntu LTS if you want broad support and predictable behavior&lt;/li&gt;
&lt;li&gt;Bazzite if your focus is gaming and you want a more curated experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of these are perfect, but they are easier to recommend to normal users than a distro shipping a beta desktop as its headline feature.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;System76 makes interesting hardware, and I want COSMIC to succeed eventually. But wanting a project to succeed is not the same thing as pretending it is ready.&lt;/p&gt;
&lt;p&gt;Pop!_OS 24.04 asks users to trust an LTS release while tying that release to a desktop environment that still shows beta-level problems. That is the wrong move for a distro that many people see as a safe recommendation.&lt;/p&gt;
&lt;p&gt;So the simple advice is this: if you want a stable Linux desktop today, skip Pop!_OS 24.04 for now. Revisit it later when COSMIC is out of beta, the major issues are ironed out, and the operating system earns the reliability that an LTS label is supposed to promise.&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/MwZq2_J_lSY&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, 20 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you are looking for a Linux distro that is stable, predictable, and easy to recommend to normal people, Pop!_OS 24.04 is not it. The main reason is simple: System76 launched it with COSMIC in beta. That one decision turns what should have been a safe long-term support release into a moving target.&lt;/p&gt;
&lt;p&gt;For a lab machine, a spare laptop, or someone who enjoys testing unfinished software, that might be fine. For everyone else, especially new Linux users, that is a terrible trade. An LTS release is supposed to be the version you install when you want fewer surprises, not more.&lt;/p&gt;

&lt;h2&gt;The Real Problem&lt;/h2&gt;
&lt;p&gt;System76 has been building COSMIC as its own desktop environment, and on paper that sounds great. More competition in Linux desktop development is a good thing. The problem is not that COSMIC exists. The problem is that Pop!_OS 24.04 ships a beta desktop on top of an Ubuntu LTS base and then expects users to treat it like a dependable daily driver.&lt;/p&gt;
&lt;p&gt;That creates a mismatch in expectations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;People hear &quot;24.04&quot; and &quot;LTS&quot; and expect stability.&lt;/li&gt;
&lt;li&gt;People buy System76 hardware and expect the software to be polished.&lt;/li&gt;
&lt;li&gt;New Linux users hear Pop!_OS recommended and assume it is a safe starting point.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Right now, those assumptions are wrong.&lt;/p&gt;
&lt;h2&gt;Why A Beta Desktop On LTS Is A Bad Idea&lt;/h2&gt;
&lt;p&gt;Long-term support releases exist for one reason: reliability. You choose them because you want to install once and stop thinking about the desktop breaking every few days. If the desktop shell itself is still behaving like a public test build, the LTS label does not mean much to the end user.&lt;/p&gt;
&lt;p&gt;When the desktop environment is unstable, every basic task becomes suspect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Logging in&lt;/li&gt;
&lt;li&gt;Managing windows and workspaces&lt;/li&gt;
&lt;li&gt;Resuming from sleep&lt;/li&gt;
&lt;li&gt;Audio controls&lt;/li&gt;
&lt;li&gt;GPU acceleration&lt;/li&gt;
&lt;li&gt;Multi-monitor behavior&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is not a small issue. The desktop environment is the operating system experience for most users. If it leaks memory, crashes, or has broken display handling, then the distro does not feel reliable no matter how solid the base packages are underneath.&lt;/p&gt;
&lt;h2&gt;The Bugs Are Not Edge Cases&lt;/h2&gt;
&lt;p&gt;This is not just a complaint about a rough animation or a missing setting. The issue tracker has repeated reports of serious bugs that affect day-to-day use.&lt;/p&gt;
&lt;h3&gt;Memory Leaks And Stability Problems&lt;/h3&gt;
&lt;p&gt;There are multiple reports around runaway memory usage and general instability:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/2122&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/2122&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3224&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3224&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/2920&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/2920&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/2013&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/2013&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/1591&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/1591&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your desktop session gradually eats RAM or becomes unstable over time, that is not a tiny annoyance. That is the kind of bug that makes a machine feel unreliable even when you are doing basic work like browsing, coding, or streaming.&lt;/p&gt;
&lt;h3&gt;GPU And Display Problems&lt;/h3&gt;
&lt;p&gt;Linux desktop success lives and dies on display handling. If monitors flicker, GPU acceleration breaks, or NVIDIA systems act up, many users are done immediately. There are active reports covering those areas too:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3270&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3270&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3249&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3249&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This matters because Pop!_OS has historically been recommended to people specifically because it handled hardware reasonably well. If the new desktop introduces display instability, that recommendation gets a lot harder to defend.&lt;/p&gt;
&lt;h3&gt;Audio And Volume Bugs&lt;/h3&gt;
&lt;p&gt;Audio problems are another instant deal-breaker for normal users. When volume controls misbehave or sound routing becomes inconsistent, people do not care that the desktop is &quot;still improving.&quot; They just think Linux is broken.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3074&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3074&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3094&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3094&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pop-os/cosmic-epoch/issues/3026&quot;&gt;https://github.com/pop-os/cosmic-epoch/issues/3026&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Again, this is the exact category of bug that should not be front and center on something positioned like a polished desktop OS.&lt;/p&gt;
&lt;h2&gt;Why This Is Worse For New Linux Users&lt;/h2&gt;
&lt;p&gt;Experienced Linux users can work around a lot. They can drop to a TTY, restart services, swap desktop environments, inspect logs, and recover from bad updates. New users cannot. They install a distro, hit three broken behaviors in a week, and conclude that Linux desktop is not ready.&lt;/p&gt;
&lt;p&gt;That is why I have a problem with Pop!_OS 24.04 in its current state. It is not just rough for enthusiasts. It is actively risky as a recommendation to beginners because beginners are the exact people who are most likely to trust the branding around an LTS release.&lt;/p&gt;
&lt;p&gt;If you hand a new user a distro with a beta desktop, you are not giving them a stable introduction to Linux. You are turning them into a tester whether they agreed to that or not.&lt;/p&gt;
&lt;h2&gt;Who Should Skip Pop!_OS 24.04&lt;/h2&gt;
&lt;p&gt;I would avoid Pop!_OS 24.04 right now if you are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New to Linux&lt;/li&gt;
&lt;li&gt;Installing on your main work machine&lt;/li&gt;
&lt;li&gt;Using NVIDIA hardware and want the least drama possible&lt;/li&gt;
&lt;li&gt;Buying a laptop because you just want it to work&lt;/li&gt;
&lt;li&gt;Recommending a distro to friends or family&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In all of those cases, stability matters more than novelty.&lt;/p&gt;
&lt;h2&gt;Who Might Still Want It&lt;/h2&gt;
&lt;p&gt;There is still a small group of people who may want to run it anyway:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Users who specifically want to test COSMIC&lt;/li&gt;
&lt;li&gt;People filing bug reports and helping development&lt;/li&gt;
&lt;li&gt;Tinkerers with a backup machine&lt;/li&gt;
&lt;li&gt;Anyone who understands they are effectively running beta desktop software&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a valid use case. But that is a tester profile, not a mainstream recommendation.&lt;/p&gt;
&lt;h2&gt;Better Options Right Now&lt;/h2&gt;
&lt;p&gt;If your goal is a dependable Linux desktop in 2026, I would point most people somewhere else until COSMIC matures.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Linux Mint if you want conservative and easy&lt;/li&gt;
&lt;li&gt;Fedora if you want modern without chasing a beta desktop shell&lt;/li&gt;
&lt;li&gt;Ubuntu LTS if you want broad support and predictable behavior&lt;/li&gt;
&lt;li&gt;Bazzite if your focus is gaming and you want a more curated experience&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of these are perfect, but they are easier to recommend to normal users than a distro shipping a beta desktop as its headline feature.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;System76 makes interesting hardware, and I want COSMIC to succeed eventually. But wanting a project to succeed is not the same thing as pretending it is ready.&lt;/p&gt;
&lt;p&gt;Pop!_OS 24.04 asks users to trust an LTS release while tying that release to a desktop environment that still shows beta-level problems. That is the wrong move for a distro that many people see as a safe recommendation.&lt;/p&gt;
&lt;p&gt;So the simple advice is this: if you want a stable Linux desktop today, skip Pop!_OS 24.04 for now. Revisit it later when COSMIC is out of beta, the major issues are ironed out, and the operating system earns the reliability that an LTS label is supposed to promise.&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/MwZq2_J_lSY&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>Securing Your Network: A Comprehensive Guide to Checking and Enhancing Network Security</title><link>https://christitus.com/check-network-security/</link><guid isPermaLink="true">https://christitus.com/check-network-security/</guid><description>&lt;p&gt;This article explains how to check to see if your network is secure, and if you have any open ports or services that could be vulnerable to attack. It covers both Windows and Linux operating systems, and provides step-by-step instructions for using various tools to scan your network for vulnerabilities.&lt;/p&gt;

&lt;h2&gt;Basic Network Scan&lt;/h2&gt;
&lt;p&gt;To check your network you can use &lt;a href=&quot;http://grc.com&quot;&gt;grc.com&lt;/a&gt; to perform a basic network scan. It will show if you have any open ports or services that could be exposed to the internet. You can also use tools like Nmap or Wireshark to perform more in-depth scans and analysis of your network traffic.&lt;/p&gt;
&lt;p&gt;GRC&apos;s ShieldsUP! service is a popular tool for checking the security of your network. It tests for open ports and vulnerabilities that could be exploited by attackers. You can access it at &lt;a href=&quot;https://www.grc.com/shieldsup&quot;&gt;https://www.grc.com/shieldsup&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: You should see something like this below&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/grc.webp&quot; alt=&quot;grc&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Windows Scan&lt;/h3&gt;
&lt;p&gt;On Windows, you can use the built-in Command Prompt or PowerShell to check for open ports. The &lt;code&gt;netstat&lt;/code&gt; command is commonly used for this purpose. Open Command Prompt and run the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;netstat -an
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will display a list of all active connections and listening ports on your system. Look for any entries that show &quot;LISTENING&quot; to identify open ports.&lt;/p&gt;
&lt;h3&gt;Linux Scan&lt;/h3&gt;
&lt;p&gt;On Linux, you can use the &lt;code&gt;netstat&lt;/code&gt; command as well, or you can use &lt;code&gt;ss&lt;/code&gt; which is a more modern tool. Open a terminal and run the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo netstat -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: netstat package is in the net-tools package, which may not be installed by default on some Linux distributions. You can install it using your package manager (e.g., &lt;code&gt;sudo apt install net-tools&lt;/code&gt; on Debian-based systems).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Newer Systems use &lt;code&gt;ss&lt;/code&gt; instead of &lt;code&gt;netstat&lt;/code&gt;. You can run the following command to check for open ports:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ss -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will show you all the TCP and UDP ports that are currently listening on your system. Look for any entries that indicate open ports.&lt;/p&gt;
&lt;h3&gt;Check for Outside Addresses&lt;/h3&gt;
&lt;p&gt;From your netstat or ss output, you can identify any external IP addresses that are connected to your system. This can help you detect unauthorized access or potential security threats.&lt;/p&gt;
&lt;h3&gt;Find what is Running on the Open Ports&lt;/h3&gt;
&lt;p&gt;Windows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# PowerShell — replace 8080 with your port
netstat -ano | findstr :8080

# Then look up the PID
tasklist | findstr &amp;lt;PID&amp;gt;

# PowerShell one-liner (shows process name directly)
Get-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Linux:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ss (modern, preferred)
ss -tulnp | grep :8080

# netstat (older systems)
netstat -tulnp | grep :8080

# lsof — shows process name + PID
lsof -i :8080

# fuser — just the PID
fuser 8080/tcp
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Securing a Network&lt;/h2&gt;
&lt;h3&gt;Routers&lt;/h3&gt;
&lt;p&gt;If you are using a router your ISP provided, I&apos;d recommend getting something like a Ubiquiti unifi gateway or a pfSense box. These devices provide better security features and allow you to have more control over your network. You can set up firewalls, VPNs, and other security measures to protect your network from potential threats.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubiquiti = easy to setup and manage but expensive&lt;/li&gt;
&lt;li&gt;pfSense = more complex to setup and manage but much cheaper with build your own hardware setups. Or buy a pre-built appliance from Netgate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other 3rd party routers like Asus, TP-Link, etc. can be decent but they often have security vulnerabilities and may not receive regular updates. They probably are better than the ISP provided router but I would recommend going with a more reputable brand if you want better security.&lt;/p&gt;
&lt;p&gt;Resources for pfSense:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLjGQNuuUzvmsuXCoj6g6vm1N-ZeLJso6o&quot;&gt;Lawerence PC Security&apos;s pfSense Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.netgate.com/pfsense/en/latest/&quot;&gt;Netgate&apos;s pfSense Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Firewall&lt;/h3&gt;
&lt;p&gt;DO NOT buy a firewall or internet suite... they are terrible.&lt;/p&gt;
&lt;p&gt;Check your windows firewall with &lt;code&gt;wf.msc&lt;/code&gt; and make sure it is enabled and properly configured. You can create rules to block incoming connections on specific ports or from specific IP addresses.&lt;/p&gt;
&lt;p&gt;For linux I&apos;d recommned using &lt;code&gt;ufw&lt;/code&gt; (Uncomplicated Firewall) which is a user-friendly interface for managing iptables. You can enable it with the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or configure with a gui like &lt;code&gt;gufw&lt;/code&gt; or &lt;code&gt;firewall-config&lt;/code&gt; depending on your linux distribution.&lt;/p&gt;
&lt;h4&gt;3rd Party Firewall Software&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;simplewall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Lightweight WFP-based per-app firewall, no background service required&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/henrypp/simplewall&quot;&gt;github.com/henrypp/simplewall&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Windows Firewall Control (WFC)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;GUI front-end for the built-in Windows Firewall by Malwarebytes, free tier available&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.binisoft.org/wfc&quot;&gt;binisoft.org/wfc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TinyWall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Lightweight wrapper around Windows Firewall, whitelist-based, very low resource usage&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://tinywall.pados.hu&quot;&gt;tinywall.pados.hu&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenSnitch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Application-level outbound firewall, prompts on first connection per app&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/evilsocket/opensnitch&quot;&gt;github.com/evilsocket/opensnitch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ufw / gufw&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Uncomplicated Firewall with optional GUI, default on many distros&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://launchpad.net/ufw&quot;&gt;launchpad.net/ufw&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;firewalld&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Dynamic firewall manager used on Fedora/RHEL/Arch, supports zones&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://firewalld.org&quot;&gt;firewalld.org&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;VPN&lt;/h3&gt;
&lt;p&gt;VPN is a bandaid and can fix some issues but it is not a replacement for proper network security. It can help protect your data from being intercepted by encrypting your internet traffic, but it does not protect you from vulnerabilities in your network or devices. If you have a VPN, make sure to use a reputable provider.&lt;/p&gt;
&lt;p&gt;All &quot;security&quot; influencers pushing VPNs are just trying to make a quick buck. A VPN can be useful in certain situations, but it is not a silver bullet for network security. Focus on securing your network and devices first, and use a VPN as an additional layer of protection if needed.&lt;/p&gt;
&lt;h2&gt;Check Devices on Your Network&lt;/h2&gt;
&lt;p&gt;You need to login to your router and check the list of connected devices. This will show you all the devices that are currently connected to your network, including their IP addresses and MAC addresses. Look for any devices that you do not recognize or that should not be on your network. If you find any suspicious devices, you can block them from accessing your network through your router&apos;s settings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABOVE IS ACTIVE PROTECTION AND YOU MUST KEEP DOING IT TO MAINTAIN SECURITY&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Other than above, you can use software like Angry IP Scanner or Advanced IP Scanner to scan your network for connected devices. These tools will show you all the devices that are currently connected to your network, along with their IP addresses and other information. You can use this information to identify any unauthorized devices and take action to secure your network.&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://angryip.org/&quot;&gt;Angry IP Scanner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.advanced-ip-scanner.com/&quot;&gt;Advanced IP Scanner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Closing Thoughts&lt;/h2&gt;
&lt;p&gt;Security is a journey, not a destination. You need to continuously monitor and maintain your network security to protect yourself from potential threats. Regularly check for open ports, update your software and firmware, and be vigilant about any suspicious activity on your network. By taking these steps, you can help ensure that your network remains secure and protected from potential attacks.&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/n7cjd5E_nsc&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>Tue, 14 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This article explains how to check to see if your network is secure, and if you have any open ports or services that could be vulnerable to attack. It covers both Windows and Linux operating systems, and provides step-by-step instructions for using various tools to scan your network for vulnerabilities.&lt;/p&gt;

&lt;h2&gt;Basic Network Scan&lt;/h2&gt;
&lt;p&gt;To check your network you can use &lt;a href=&quot;http://grc.com&quot;&gt;grc.com&lt;/a&gt; to perform a basic network scan. It will show if you have any open ports or services that could be exposed to the internet. You can also use tools like Nmap or Wireshark to perform more in-depth scans and analysis of your network traffic.&lt;/p&gt;
&lt;p&gt;GRC&apos;s ShieldsUP! service is a popular tool for checking the security of your network. It tests for open ports and vulnerabilities that could be exploited by attackers. You can access it at &lt;a href=&quot;https://www.grc.com/shieldsup&quot;&gt;https://www.grc.com/shieldsup&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: You should see something like this below&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2026/grc.webp&quot; alt=&quot;grc&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Windows Scan&lt;/h3&gt;
&lt;p&gt;On Windows, you can use the built-in Command Prompt or PowerShell to check for open ports. The &lt;code&gt;netstat&lt;/code&gt; command is commonly used for this purpose. Open Command Prompt and run the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;netstat -an
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will display a list of all active connections and listening ports on your system. Look for any entries that show &quot;LISTENING&quot; to identify open ports.&lt;/p&gt;
&lt;h3&gt;Linux Scan&lt;/h3&gt;
&lt;p&gt;On Linux, you can use the &lt;code&gt;netstat&lt;/code&gt; command as well, or you can use &lt;code&gt;ss&lt;/code&gt; which is a more modern tool. Open a terminal and run the following command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo netstat -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: netstat package is in the net-tools package, which may not be installed by default on some Linux distributions. You can install it using your package manager (e.g., &lt;code&gt;sudo apt install net-tools&lt;/code&gt; on Debian-based systems).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Newer Systems use &lt;code&gt;ss&lt;/code&gt; instead of &lt;code&gt;netstat&lt;/code&gt;. You can run the following command to check for open ports:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ss -tuln
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will show you all the TCP and UDP ports that are currently listening on your system. Look for any entries that indicate open ports.&lt;/p&gt;
&lt;h3&gt;Check for Outside Addresses&lt;/h3&gt;
&lt;p&gt;From your netstat or ss output, you can identify any external IP addresses that are connected to your system. This can help you detect unauthorized access or potential security threats.&lt;/p&gt;
&lt;h3&gt;Find what is Running on the Open Ports&lt;/h3&gt;
&lt;p&gt;Windows:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# PowerShell — replace 8080 with your port
netstat -ano | findstr :8080

# Then look up the PID
tasklist | findstr &amp;lt;PID&amp;gt;

# PowerShell one-liner (shows process name directly)
Get-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Linux:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ss (modern, preferred)
ss -tulnp | grep :8080

# netstat (older systems)
netstat -tulnp | grep :8080

# lsof — shows process name + PID
lsof -i :8080

# fuser — just the PID
fuser 8080/tcp
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Securing a Network&lt;/h2&gt;
&lt;h3&gt;Routers&lt;/h3&gt;
&lt;p&gt;If you are using a router your ISP provided, I&apos;d recommend getting something like a Ubiquiti unifi gateway or a pfSense box. These devices provide better security features and allow you to have more control over your network. You can set up firewalls, VPNs, and other security measures to protect your network from potential threats.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubiquiti = easy to setup and manage but expensive&lt;/li&gt;
&lt;li&gt;pfSense = more complex to setup and manage but much cheaper with build your own hardware setups. Or buy a pre-built appliance from Netgate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Other 3rd party routers like Asus, TP-Link, etc. can be decent but they often have security vulnerabilities and may not receive regular updates. They probably are better than the ISP provided router but I would recommend going with a more reputable brand if you want better security.&lt;/p&gt;
&lt;p&gt;Resources for pfSense:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLjGQNuuUzvmsuXCoj6g6vm1N-ZeLJso6o&quot;&gt;Lawerence PC Security&apos;s pfSense Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.netgate.com/pfsense/en/latest/&quot;&gt;Netgate&apos;s pfSense Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Firewall&lt;/h3&gt;
&lt;p&gt;DO NOT buy a firewall or internet suite... they are terrible.&lt;/p&gt;
&lt;p&gt;Check your windows firewall with &lt;code&gt;wf.msc&lt;/code&gt; and make sure it is enabled and properly configured. You can create rules to block incoming connections on specific ports or from specific IP addresses.&lt;/p&gt;
&lt;p&gt;For linux I&apos;d recommned using &lt;code&gt;ufw&lt;/code&gt; (Uncomplicated Firewall) which is a user-friendly interface for managing iptables. You can enable it with the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or configure with a gui like &lt;code&gt;gufw&lt;/code&gt; or &lt;code&gt;firewall-config&lt;/code&gt; depending on your linux distribution.&lt;/p&gt;
&lt;h4&gt;3rd Party Firewall Software&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;simplewall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Lightweight WFP-based per-app firewall, no background service required&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/henrypp/simplewall&quot;&gt;github.com/henrypp/simplewall&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Windows Firewall Control (WFC)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;GUI front-end for the built-in Windows Firewall by Malwarebytes, free tier available&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.binisoft.org/wfc&quot;&gt;binisoft.org/wfc&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;TinyWall&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Lightweight wrapper around Windows Firewall, whitelist-based, very low resource usage&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://tinywall.pados.hu&quot;&gt;tinywall.pados.hu&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OpenSnitch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Windows-0078D4?logo=windows&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Application-level outbound firewall, prompts on first connection per app&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://github.com/evilsocket/opensnitch&quot;&gt;github.com/evilsocket/opensnitch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ufw / gufw&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Uncomplicated Firewall with optional GUI, default on many distros&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://launchpad.net/ufw&quot;&gt;launchpad.net/ufw&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;firewalld&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-FCC624?logo=linux&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt;&lt;/td&gt;
&lt;td&gt;Dynamic firewall manager used on Fedora/RHEL/Arch, supports zones&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://firewalld.org&quot;&gt;firewalld.org&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;VPN&lt;/h3&gt;
&lt;p&gt;VPN is a bandaid and can fix some issues but it is not a replacement for proper network security. It can help protect your data from being intercepted by encrypting your internet traffic, but it does not protect you from vulnerabilities in your network or devices. If you have a VPN, make sure to use a reputable provider.&lt;/p&gt;
&lt;p&gt;All &quot;security&quot; influencers pushing VPNs are just trying to make a quick buck. A VPN can be useful in certain situations, but it is not a silver bullet for network security. Focus on securing your network and devices first, and use a VPN as an additional layer of protection if needed.&lt;/p&gt;
&lt;h2&gt;Check Devices on Your Network&lt;/h2&gt;
&lt;p&gt;You need to login to your router and check the list of connected devices. This will show you all the devices that are currently connected to your network, including their IP addresses and MAC addresses. Look for any devices that you do not recognize or that should not be on your network. If you find any suspicious devices, you can block them from accessing your network through your router&apos;s settings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ABOVE IS ACTIVE PROTECTION AND YOU MUST KEEP DOING IT TO MAINTAIN SECURITY&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Other than above, you can use software like Angry IP Scanner or Advanced IP Scanner to scan your network for connected devices. These tools will show you all the devices that are currently connected to your network, along with their IP addresses and other information. You can use this information to identify any unauthorized devices and take action to secure your network.&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://angryip.org/&quot;&gt;Angry IP Scanner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.advanced-ip-scanner.com/&quot;&gt;Advanced IP Scanner&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Closing Thoughts&lt;/h2&gt;
&lt;p&gt;Security is a journey, not a destination. You need to continuously monitor and maintain your network security to protect yourself from potential threats. Regularly check for open ports, update your software and firmware, and be vigilant about any suspicious activity on your network. By taking these steps, you can help ensure that your network remains secure and protected from potential attacks.&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/n7cjd5E_nsc&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>How I Switched to Linux</title><link>https://christitus.com/how-i-use-linux/</link><guid isPermaLink="true">https://christitus.com/how-i-use-linux/</guid><description>&lt;p&gt;Over the past 8 years I have used Linux desktop as my primary daily use PC. Before then I used Windows since the 3.11 release back in the early 90s. As someone with over 10 professional Windows certifications and 20+ years as a Windows power user, the transition wasn&apos;t easy—but it was worth it.&lt;/p&gt;

&lt;h2&gt;The First Year&lt;/h2&gt;
&lt;p&gt;This was well documented on my youtube channel. I had various distro challenges that lasted 10-30 days, where I constantly distro-hopped between different Linux distributions trying to find the &quot;perfect&quot; setup.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLc7fktTRMBoxZMG1YlLdBI0oiJZ8iqIP5&quot;&gt;https://www.youtube.com/playlist?list=PLc7fktTRMBoxZMG1YlLdBI0oiJZ8iqIP5&lt;/a&gt; - Switching to Arch Linux first 10 days
&lt;a href=&quot;https://www.youtube.com/playlist?list=PLc7fktTRMBozmc1_9kEmgxYo0jIdsiz7w&quot;&gt;https://www.youtube.com/playlist?list=PLc7fktTRMBozmc1_9kEmgxYo0jIdsiz7w&lt;/a&gt; - Switching to Ubuntu first 30 days&lt;/p&gt;
&lt;p&gt;The TLDW of all those challenge and the problems I had:&lt;/p&gt;
&lt;h3&gt;Too Many Distros - Focus on Features Instead&lt;/h3&gt;
&lt;p&gt;The biggest mistake I made was choosing distributions based on aesthetics rather than functionality. I quickly learned that distributions don&apos;t matter nearly as much as the components you choose:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Desktop Environments&lt;/strong&gt; (Gnome, KDE, XFCE, etc) - These define the look and feel of your system, and you can swap them out without reinstalling your entire OS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File Managers&lt;/strong&gt; (Nautilus, Dolphin, Thunar, etc) - I discovered Thunar from XFCE and still use it today, even though I don&apos;t use XFCE as my desktop environment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mix and Match Philosophy&lt;/strong&gt; - Linux allows you to cherry-pick components from different desktop environments. You&apos;re not locked into an ecosystem like Windows or Mac&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Using FOSS Programs vs Trying to Use WINE&lt;/h3&gt;
&lt;p&gt;One of my hardest lessons was accepting that not everything from Windows translates well to Linux:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows-Only Programs&lt;/strong&gt; - If you rely heavily on Adobe products or Microsoft Office professionally, Linux might not be your best choice. After years of experience, I can confidently say Mac or Windows serves these users better&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WINE Limitations&lt;/strong&gt; - While Wine and similar tools exist, trying to emulate Windows programs often leads to frustration and poor performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Hard Truth&lt;/strong&gt; - Linux folks will tell you &quot;everything just works,&quot; but that&apos;s not reality. Accept what works natively and plan accordingly&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Gaming and Mods&lt;/h3&gt;
&lt;p&gt;Gaming on Linux has come a long way since 2018 when I started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Steam Proton Revolution&lt;/strong&gt; - When I began in 2018, Steam was just launching Proton compatibility. Today, most games work out of the box&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mod Support Challenges&lt;/strong&gt; - Almost every game is made for Windows, so mods don&apos;t install the same way. You&apos;ll need Linux-specific tools and workarounds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My Gaming Evolution&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;2023: 65% Windows, 32% Steam Deck, 2% Linux&lt;/li&gt;
&lt;li&gt;2024: 78% Windows, 12% Steam Deck, 9% Linux&lt;/li&gt;
&lt;li&gt;2025: 80% Linux, 12% Steam Deck, 10% Windows&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The shift happened when I stopped playing heavily-modded games like Final Fantasy XI Online and games with desync issues on Linux. If you play older games or don&apos;t heavily mod, Linux in 2026 offers an excellent gaming experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Check ProtonDB&lt;/strong&gt; before switching to see your game compatibility: &lt;a href=&quot;https://www.protondb.com&quot;&gt;https://www.protondb.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;The Second Year and Beyond&lt;/h2&gt;
&lt;p&gt;After the initial learning curve, I focused on stability and simplicity rather than chasing the &quot;perfect&quot; distribution.&lt;/p&gt;
&lt;h3&gt;Making My &quot;Perfect Install&quot;&lt;/h3&gt;
&lt;p&gt;I radically simplified my setup by stripping away unnecessary components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No Desktop Environments&lt;/strong&gt; - I removed bloated desktop environments entirely. My current window manager binary is only 116KB&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sticking to the Big 3&lt;/strong&gt; - I only use Fedora, Arch, or Debian-based distributions. No more distro hopping every week&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Window Managers Only&lt;/strong&gt; - I switched to lightweight window managers (i3wm, bspwm, dwm) that use minimal resources and rarely break during updates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminal-Based Configuration&lt;/strong&gt; - Everything I need is configured through the terminal, eliminating dependency conflicts and compatibility issues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The Result&lt;/strong&gt;: My current Arch Linux installation has 628 days of uptime. By having less software installed, there&apos;s less that can break during updates. I can run system updates live on stream without worrying about breaking my system.&lt;/p&gt;
&lt;h3&gt;Understanding Linux File Structure&lt;/h3&gt;
&lt;p&gt;Linux&apos;s file organization is far more logical than Windows, where programs can install in Program Files, Program Files (x86), ProgramData, AppData Local, AppData Roaming, or scattered registry entries.&lt;/p&gt;
&lt;p&gt;Linux follows two simple rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;User Configuration&lt;/strong&gt;: &lt;code&gt;/home/user/.config&lt;/code&gt; - All your personal settings and configurations live here&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Configuration&lt;/strong&gt;: &lt;code&gt;/etc&lt;/code&gt; - All system-wide settings live here&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Resources&lt;/strong&gt;: &lt;code&gt;/usr&lt;/code&gt; - System binaries and shared resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Files&lt;/strong&gt;: &lt;code&gt;/home&lt;/code&gt; - All your personal files and data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This standardization means you always know where to find configurations, making troubleshooting and backups significantly easier. About 90% of all software follows this convention.&lt;/p&gt;
&lt;h3&gt;Dual Boot vs Virtual Machines vs WSL&lt;/h3&gt;
&lt;p&gt;After 8 years, here&apos;s what works best for different scenarios:&lt;/p&gt;
&lt;h4&gt;Dual Boot for Performance and Gaming&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Two Hard Drives Recommended&lt;/strong&gt; - Install Windows and Linux on separate drives to avoid bootloader conflicts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Installation Order Matters&lt;/strong&gt; - Always install Windows first, then Linux second&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows Update Warning&lt;/strong&gt; - Windows updates can occasionally break your Linux bootloader. Separate drives minimize this risk&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Gaming performance, professional work requiring Windows-specific software&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Virtual Machines for Windows Programs&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Highly Optimized on Linux&lt;/strong&gt; - Linux VMs can be incredibly performant, much more so than Windows-based VMs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seamless Integration&lt;/strong&gt; - I run Windows VMs so well that most viewers don&apos;t realize I&apos;m not on native Windows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU Passthrough&lt;/strong&gt; - You can pass through hardware directly to VMs for near-native performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Occasional Windows software use, development work, testing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I use VMs extensively for my Windows utility development. Most people watching my content think I&apos;m a Windows user, but I&apos;m actually running everything in a highly optimized VM on Linux.&lt;/p&gt;
&lt;h4&gt;WSL for Linux on Windows&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Occasional Command Line Use&lt;/strong&gt; - Good for Windows users who need occasional Linux terminal access&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not a Full Linux Experience&lt;/strong&gt; - Limited compared to native Linux or dual boot&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Developers who primarily use Windows but need Linux tools&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Linux Hardware Matters&lt;/h3&gt;
&lt;p&gt;Hardware compatibility can make or break your Linux experience. Here&apos;s what you need to know:&lt;/p&gt;
&lt;h4&gt;NVIDIA vs AMD&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;AMD Graphics&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drivers built directly into the Linux kernel&lt;/li&gt;
&lt;li&gt;No extra modules or installation required&lt;/li&gt;
&lt;li&gt;Better out-of-the-box experience for most users&lt;/li&gt;
&lt;li&gt;Fewer update-related issues&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for gamers&lt;/strong&gt; who want hassle-free compatibility&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;NVIDIA Graphics&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Requires proprietary kernel modules&lt;/li&gt;
&lt;li&gt;Installation needed (not built-in)&lt;/li&gt;
&lt;li&gt;Can break during kernel updates (system won&apos;t boot or no video output)&lt;/li&gt;
&lt;li&gt;Better performance for productivity work (DaVinci Resolve, AI/ML workloads)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for professionals&lt;/strong&gt; doing GPU-intensive work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The Bottom Line&lt;/strong&gt;: Both work, but AMD requires less maintenance and troubleshooting.&lt;/p&gt;
&lt;h4&gt;Monitor and Display Issues&lt;/h4&gt;
&lt;p&gt;Five years ago, most Linux systems used &lt;a href=&quot;http://X.org&quot;&gt;X.org&lt;/a&gt;, which had significant limitations:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://X.org&quot;&gt;X.org&lt;/a&gt; Limitations&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No native Variable Refresh Rate (VRR) support&lt;/li&gt;
&lt;li&gt;Poor 4K support&lt;/li&gt;
&lt;li&gt;Screen tearing (requires manual configuration to fix)&lt;/li&gt;
&lt;li&gt;Older technology but still very stable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Wayland Advantages&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Native VRR support&lt;/li&gt;
&lt;li&gt;Excellent 4K and multi-monitor support&lt;/li&gt;
&lt;li&gt;No screen tearing by default&lt;/li&gt;
&lt;li&gt;Modern replacement for &lt;a href=&quot;http://X.org&quot;&gt;X.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Most new desktop environments default to Wayland (Hyperland, GNOME 40+, KDE Plasma 6)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I still use &lt;a href=&quot;http://X.org&quot;&gt;X.org&lt;/a&gt; personally because it works for my setup, but most users today should choose Wayland for modern display features.&lt;/p&gt;
&lt;h4&gt;Third-Party Hardware Compatibility&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Streaming Hardware&lt;/strong&gt; - Elgato capture cards and similar devices may have limited or no Linux support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webcams&lt;/strong&gt; - Most work, but advanced features may not&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audio Interfaces&lt;/strong&gt; - Professional audio equipment varies in compatibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RGB Peripherals&lt;/strong&gt; - Software like OpenRGB helps, but not all devices supported&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bleeding Edge Hardware Has Worse Support&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Important Reality Check&lt;/strong&gt;: If you buy the latest GPU or CPU on release day:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Arch Linux&lt;/strong&gt; - Will probably work, but performance may be suboptimal initially&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 Months Later&lt;/strong&gt; - Support and optimization typically catches up&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows/Mac&lt;/strong&gt; - Always prioritized by hardware manufacturers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Research First&lt;/strong&gt; - Check Linux compatibility before buying new hardware&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Linux hardware support is excellent for established hardware but lags behind for bleeding-edge releases. This is the trade-off for using an open-source ecosystem.&lt;/p&gt;
&lt;h2&gt;My Current Setup&lt;/h2&gt;
&lt;p&gt;After 8 years of refinement, here&apos;s what I&apos;ve settled on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Distribution&lt;/strong&gt;: Arch Linux with CachyOS kernel (optimized for desktop performance)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Window Manager&lt;/strong&gt;: DWM (116KB binary managing my entire GUI)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File Manager&lt;/strong&gt;: Thunar (from XFCE)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uptime&lt;/strong&gt;: 628 days on current install&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gaming&lt;/strong&gt;: 80% on Linux via Steam Proton&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows Work&lt;/strong&gt;: Optimized VM for utility development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update Frequency&lt;/strong&gt;: Weekly (sometimes monthly without issues)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The key to my stability is simplicity. Less software means fewer dependencies, fewer conflicts, and fewer things that can break during updates.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Linux isn&apos;t for everyone, and that&apos;s okay. If you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rely on Adobe Creative Suite professionally&lt;/li&gt;
&lt;li&gt;Need Microsoft Office (not LibreOffice alternatives)&lt;/li&gt;
&lt;li&gt;Play games with kernel-level anti-cheat&lt;/li&gt;
&lt;li&gt;Heavily mod games like Skyrim with hundreds of mods&lt;/li&gt;
&lt;li&gt;Want bleeding-edge hardware support on day one&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then Windows or Mac might serve you better, and there&apos;s no shame in that.&lt;/p&gt;
&lt;p&gt;But if you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Value system stability and control&lt;/li&gt;
&lt;li&gt;Enjoy learning and tinkering&lt;/li&gt;
&lt;li&gt;Play mostly older or Steam-verified games&lt;/li&gt;
&lt;li&gt;Use open-source software&lt;/li&gt;
&lt;li&gt;Want a system that respects your choices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then Linux can provide an incredible experience that only gets better with time.&lt;/p&gt;
&lt;p&gt;My journey from Windows power user to Linux daily driver took patience, learning, and accepting limitations. But 628 days of uptime and counting? I wouldn&apos;t go back.&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/EcKSdZ_ENeg&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, 15 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Over the past 8 years I have used Linux desktop as my primary daily use PC. Before then I used Windows since the 3.11 release back in the early 90s. As someone with over 10 professional Windows certifications and 20+ years as a Windows power user, the transition wasn&apos;t easy—but it was worth it.&lt;/p&gt;

&lt;h2&gt;The First Year&lt;/h2&gt;
&lt;p&gt;This was well documented on my youtube channel. I had various distro challenges that lasted 10-30 days, where I constantly distro-hopped between different Linux distributions trying to find the &quot;perfect&quot; setup.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLc7fktTRMBoxZMG1YlLdBI0oiJZ8iqIP5&quot;&gt;https://www.youtube.com/playlist?list=PLc7fktTRMBoxZMG1YlLdBI0oiJZ8iqIP5&lt;/a&gt; - Switching to Arch Linux first 10 days
&lt;a href=&quot;https://www.youtube.com/playlist?list=PLc7fktTRMBozmc1_9kEmgxYo0jIdsiz7w&quot;&gt;https://www.youtube.com/playlist?list=PLc7fktTRMBozmc1_9kEmgxYo0jIdsiz7w&lt;/a&gt; - Switching to Ubuntu first 30 days&lt;/p&gt;
&lt;p&gt;The TLDW of all those challenge and the problems I had:&lt;/p&gt;
&lt;h3&gt;Too Many Distros - Focus on Features Instead&lt;/h3&gt;
&lt;p&gt;The biggest mistake I made was choosing distributions based on aesthetics rather than functionality. I quickly learned that distributions don&apos;t matter nearly as much as the components you choose:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Desktop Environments&lt;/strong&gt; (Gnome, KDE, XFCE, etc) - These define the look and feel of your system, and you can swap them out without reinstalling your entire OS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File Managers&lt;/strong&gt; (Nautilus, Dolphin, Thunar, etc) - I discovered Thunar from XFCE and still use it today, even though I don&apos;t use XFCE as my desktop environment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mix and Match Philosophy&lt;/strong&gt; - Linux allows you to cherry-pick components from different desktop environments. You&apos;re not locked into an ecosystem like Windows or Mac&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Using FOSS Programs vs Trying to Use WINE&lt;/h3&gt;
&lt;p&gt;One of my hardest lessons was accepting that not everything from Windows translates well to Linux:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Windows-Only Programs&lt;/strong&gt; - If you rely heavily on Adobe products or Microsoft Office professionally, Linux might not be your best choice. After years of experience, I can confidently say Mac or Windows serves these users better&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WINE Limitations&lt;/strong&gt; - While Wine and similar tools exist, trying to emulate Windows programs often leads to frustration and poor performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Hard Truth&lt;/strong&gt; - Linux folks will tell you &quot;everything just works,&quot; but that&apos;s not reality. Accept what works natively and plan accordingly&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Gaming and Mods&lt;/h3&gt;
&lt;p&gt;Gaming on Linux has come a long way since 2018 when I started:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Steam Proton Revolution&lt;/strong&gt; - When I began in 2018, Steam was just launching Proton compatibility. Today, most games work out of the box&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mod Support Challenges&lt;/strong&gt; - Almost every game is made for Windows, so mods don&apos;t install the same way. You&apos;ll need Linux-specific tools and workarounds&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My Gaming Evolution&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;2023: 65% Windows, 32% Steam Deck, 2% Linux&lt;/li&gt;
&lt;li&gt;2024: 78% Windows, 12% Steam Deck, 9% Linux&lt;/li&gt;
&lt;li&gt;2025: 80% Linux, 12% Steam Deck, 10% Windows&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The shift happened when I stopped playing heavily-modded games like Final Fantasy XI Online and games with desync issues on Linux. If you play older games or don&apos;t heavily mod, Linux in 2026 offers an excellent gaming experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Check ProtonDB&lt;/strong&gt; before switching to see your game compatibility: &lt;a href=&quot;https://www.protondb.com&quot;&gt;https://www.protondb.com&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;The Second Year and Beyond&lt;/h2&gt;
&lt;p&gt;After the initial learning curve, I focused on stability and simplicity rather than chasing the &quot;perfect&quot; distribution.&lt;/p&gt;
&lt;h3&gt;Making My &quot;Perfect Install&quot;&lt;/h3&gt;
&lt;p&gt;I radically simplified my setup by stripping away unnecessary components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No Desktop Environments&lt;/strong&gt; - I removed bloated desktop environments entirely. My current window manager binary is only 116KB&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sticking to the Big 3&lt;/strong&gt; - I only use Fedora, Arch, or Debian-based distributions. No more distro hopping every week&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Window Managers Only&lt;/strong&gt; - I switched to lightweight window managers (i3wm, bspwm, dwm) that use minimal resources and rarely break during updates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminal-Based Configuration&lt;/strong&gt; - Everything I need is configured through the terminal, eliminating dependency conflicts and compatibility issues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The Result&lt;/strong&gt;: My current Arch Linux installation has 628 days of uptime. By having less software installed, there&apos;s less that can break during updates. I can run system updates live on stream without worrying about breaking my system.&lt;/p&gt;
&lt;h3&gt;Understanding Linux File Structure&lt;/h3&gt;
&lt;p&gt;Linux&apos;s file organization is far more logical than Windows, where programs can install in Program Files, Program Files (x86), ProgramData, AppData Local, AppData Roaming, or scattered registry entries.&lt;/p&gt;
&lt;p&gt;Linux follows two simple rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;User Configuration&lt;/strong&gt;: &lt;code&gt;/home/user/.config&lt;/code&gt; - All your personal settings and configurations live here&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Configuration&lt;/strong&gt;: &lt;code&gt;/etc&lt;/code&gt; - All system-wide settings live here&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;System Resources&lt;/strong&gt;: &lt;code&gt;/usr&lt;/code&gt; - System binaries and shared resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User Files&lt;/strong&gt;: &lt;code&gt;/home&lt;/code&gt; - All your personal files and data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This standardization means you always know where to find configurations, making troubleshooting and backups significantly easier. About 90% of all software follows this convention.&lt;/p&gt;
&lt;h3&gt;Dual Boot vs Virtual Machines vs WSL&lt;/h3&gt;
&lt;p&gt;After 8 years, here&apos;s what works best for different scenarios:&lt;/p&gt;
&lt;h4&gt;Dual Boot for Performance and Gaming&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Two Hard Drives Recommended&lt;/strong&gt; - Install Windows and Linux on separate drives to avoid bootloader conflicts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Installation Order Matters&lt;/strong&gt; - Always install Windows first, then Linux second&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows Update Warning&lt;/strong&gt; - Windows updates can occasionally break your Linux bootloader. Separate drives minimize this risk&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Gaming performance, professional work requiring Windows-specific software&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Virtual Machines for Windows Programs&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Highly Optimized on Linux&lt;/strong&gt; - Linux VMs can be incredibly performant, much more so than Windows-based VMs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seamless Integration&lt;/strong&gt; - I run Windows VMs so well that most viewers don&apos;t realize I&apos;m not on native Windows&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPU Passthrough&lt;/strong&gt; - You can pass through hardware directly to VMs for near-native performance&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Occasional Windows software use, development work, testing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I use VMs extensively for my Windows utility development. Most people watching my content think I&apos;m a Windows user, but I&apos;m actually running everything in a highly optimized VM on Linux.&lt;/p&gt;
&lt;h4&gt;WSL for Linux on Windows&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Occasional Command Line Use&lt;/strong&gt; - Good for Windows users who need occasional Linux terminal access&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Not a Full Linux Experience&lt;/strong&gt; - Limited compared to native Linux or dual boot&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best For&lt;/strong&gt;: Developers who primarily use Windows but need Linux tools&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Linux Hardware Matters&lt;/h3&gt;
&lt;p&gt;Hardware compatibility can make or break your Linux experience. Here&apos;s what you need to know:&lt;/p&gt;
&lt;h4&gt;NVIDIA vs AMD&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;AMD Graphics&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drivers built directly into the Linux kernel&lt;/li&gt;
&lt;li&gt;No extra modules or installation required&lt;/li&gt;
&lt;li&gt;Better out-of-the-box experience for most users&lt;/li&gt;
&lt;li&gt;Fewer update-related issues&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for gamers&lt;/strong&gt; who want hassle-free compatibility&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;NVIDIA Graphics&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Requires proprietary kernel modules&lt;/li&gt;
&lt;li&gt;Installation needed (not built-in)&lt;/li&gt;
&lt;li&gt;Can break during kernel updates (system won&apos;t boot or no video output)&lt;/li&gt;
&lt;li&gt;Better performance for productivity work (DaVinci Resolve, AI/ML workloads)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best for professionals&lt;/strong&gt; doing GPU-intensive work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The Bottom Line&lt;/strong&gt;: Both work, but AMD requires less maintenance and troubleshooting.&lt;/p&gt;
&lt;h4&gt;Monitor and Display Issues&lt;/h4&gt;
&lt;p&gt;Five years ago, most Linux systems used &lt;a href=&quot;http://X.org&quot;&gt;X.org&lt;/a&gt;, which had significant limitations:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://X.org&quot;&gt;X.org&lt;/a&gt; Limitations&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No native Variable Refresh Rate (VRR) support&lt;/li&gt;
&lt;li&gt;Poor 4K support&lt;/li&gt;
&lt;li&gt;Screen tearing (requires manual configuration to fix)&lt;/li&gt;
&lt;li&gt;Older technology but still very stable&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Wayland Advantages&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Native VRR support&lt;/li&gt;
&lt;li&gt;Excellent 4K and multi-monitor support&lt;/li&gt;
&lt;li&gt;No screen tearing by default&lt;/li&gt;
&lt;li&gt;Modern replacement for &lt;a href=&quot;http://X.org&quot;&gt;X.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Most new desktop environments default to Wayland (Hyperland, GNOME 40+, KDE Plasma 6)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I still use &lt;a href=&quot;http://X.org&quot;&gt;X.org&lt;/a&gt; personally because it works for my setup, but most users today should choose Wayland for modern display features.&lt;/p&gt;
&lt;h4&gt;Third-Party Hardware Compatibility&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Streaming Hardware&lt;/strong&gt; - Elgato capture cards and similar devices may have limited or no Linux support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webcams&lt;/strong&gt; - Most work, but advanced features may not&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audio Interfaces&lt;/strong&gt; - Professional audio equipment varies in compatibility&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RGB Peripherals&lt;/strong&gt; - Software like OpenRGB helps, but not all devices supported&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bleeding Edge Hardware Has Worse Support&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Important Reality Check&lt;/strong&gt;: If you buy the latest GPU or CPU on release day:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Arch Linux&lt;/strong&gt; - Will probably work, but performance may be suboptimal initially&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 Months Later&lt;/strong&gt; - Support and optimization typically catches up&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows/Mac&lt;/strong&gt; - Always prioritized by hardware manufacturers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Research First&lt;/strong&gt; - Check Linux compatibility before buying new hardware&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Linux hardware support is excellent for established hardware but lags behind for bleeding-edge releases. This is the trade-off for using an open-source ecosystem.&lt;/p&gt;
&lt;h2&gt;My Current Setup&lt;/h2&gt;
&lt;p&gt;After 8 years of refinement, here&apos;s what I&apos;ve settled on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Distribution&lt;/strong&gt;: Arch Linux with CachyOS kernel (optimized for desktop performance)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Window Manager&lt;/strong&gt;: DWM (116KB binary managing my entire GUI)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File Manager&lt;/strong&gt;: Thunar (from XFCE)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uptime&lt;/strong&gt;: 628 days on current install&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gaming&lt;/strong&gt;: 80% on Linux via Steam Proton&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows Work&lt;/strong&gt;: Optimized VM for utility development&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update Frequency&lt;/strong&gt;: Weekly (sometimes monthly without issues)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The key to my stability is simplicity. Less software means fewer dependencies, fewer conflicts, and fewer things that can break during updates.&lt;/p&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Linux isn&apos;t for everyone, and that&apos;s okay. If you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rely on Adobe Creative Suite professionally&lt;/li&gt;
&lt;li&gt;Need Microsoft Office (not LibreOffice alternatives)&lt;/li&gt;
&lt;li&gt;Play games with kernel-level anti-cheat&lt;/li&gt;
&lt;li&gt;Heavily mod games like Skyrim with hundreds of mods&lt;/li&gt;
&lt;li&gt;Want bleeding-edge hardware support on day one&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then Windows or Mac might serve you better, and there&apos;s no shame in that.&lt;/p&gt;
&lt;p&gt;But if you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Value system stability and control&lt;/li&gt;
&lt;li&gt;Enjoy learning and tinkering&lt;/li&gt;
&lt;li&gt;Play mostly older or Steam-verified games&lt;/li&gt;
&lt;li&gt;Use open-source software&lt;/li&gt;
&lt;li&gt;Want a system that respects your choices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then Linux can provide an incredible experience that only gets better with time.&lt;/p&gt;
&lt;p&gt;My journey from Windows power user to Linux daily driver took patience, learning, and accepting limitations. But 628 days of uptime and counting? I wouldn&apos;t go back.&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/EcKSdZ_ENeg&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>Enable Vrr Xorg</title><link>https://christitus.com/enable-vrr-xorg/</link><guid isPermaLink="true">https://christitus.com/enable-vrr-xorg/</guid><description>&lt;p&gt;This shows you how to enable VRR (Variable Refresh Rate) in Xorg on Linux. This is useful for gaming and reducing screen tearing.&lt;/p&gt;

&lt;h2&gt;Enable VRR Xorg Conf&lt;/h2&gt;
&lt;p&gt;Create a new file in &lt;code&gt;/etc/X11/xorg.conf.d/10-amdfreesync.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Section &quot;OutputClass&quot; 
 Identifier &quot;AMD&quot; 
 MatchDriver &quot;amdgpu&quot; 
 Driver &quot;amdgpu&quot; 
 Option &quot;VariableRefresh&quot; &quot;true&quot; 
EndSection
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reboot and you will have it enabled. You can verify your monitor supports VRR with this command: &lt;code&gt;xrandr --props | grep -i &quot;vrr&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can then verify it is enabled through the log file at &lt;code&gt;/var/log/Xorg.0.log&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;...
[     8.444] (II) Applying OutputClass &quot;AMD&quot; options to /dev/dri/card1
[     8.444] (**) modeset(0): Option &quot;VariableRefresh&quot; &quot;true&quot;
[     8.444] (==) modeset(0): RGB weight 888
[     8.444] (==) modeset(0): Default visual is TrueColor
[     8.444] (II) Loading sub module &quot;glamoregl&quot;
[     8.444] (II) LoadModule: &quot;glamoregl&quot;
[     8.444] (II) Loading /usr/lib/xorg/modules/libglamoregl.so
[     8.454] (II) Module glamoregl: vendor=&quot;X.Org Foundation&quot;
[     8.454]  compiled for 1.21.1.18, module version = 1.0.1
[     8.454]  ABI class: X.Org ANSI C Emulation, version 0.4
[     9.059] (II) modeset(0): glamor X acceleration enabled on AMD Radeon RX 7800 XT (radeonsi, navi32, LLVM 20.1.8, DRM 3.64, 6.16.4-114.bazzite.fc42.x86_64)
[     9.059] (II) modeset(0): glamor initialized
[     9.059] (**) modeset(0): VariableRefresh: enabled
[     9.059] (==) modeset(0): AsyncFlipSecondaries: disabled
[     9.059] (II) modeset(0): Output DP-1 has no monitor section
[     9.059] (II) modeset(0): Output DP-2 has no monitor section
[     9.059] (II) modeset(0): Output HDMI-1 has no monitor section
[     9.064] (II) modeset(0): Output HDMI-2 has no monitor section
...
&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Tue, 07 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This shows you how to enable VRR (Variable Refresh Rate) in Xorg on Linux. This is useful for gaming and reducing screen tearing.&lt;/p&gt;

&lt;h2&gt;Enable VRR Xorg Conf&lt;/h2&gt;
&lt;p&gt;Create a new file in &lt;code&gt;/etc/X11/xorg.conf.d/10-amdfreesync.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Section &quot;OutputClass&quot; 
 Identifier &quot;AMD&quot; 
 MatchDriver &quot;amdgpu&quot; 
 Driver &quot;amdgpu&quot; 
 Option &quot;VariableRefresh&quot; &quot;true&quot; 
EndSection
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reboot and you will have it enabled. You can verify your monitor supports VRR with this command: &lt;code&gt;xrandr --props | grep -i &quot;vrr&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can then verify it is enabled through the log file at &lt;code&gt;/var/log/Xorg.0.log&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;...
[     8.444] (II) Applying OutputClass &quot;AMD&quot; options to /dev/dri/card1
[     8.444] (**) modeset(0): Option &quot;VariableRefresh&quot; &quot;true&quot;
[     8.444] (==) modeset(0): RGB weight 888
[     8.444] (==) modeset(0): Default visual is TrueColor
[     8.444] (II) Loading sub module &quot;glamoregl&quot;
[     8.444] (II) LoadModule: &quot;glamoregl&quot;
[     8.444] (II) Loading /usr/lib/xorg/modules/libglamoregl.so
[     8.454] (II) Module glamoregl: vendor=&quot;X.Org Foundation&quot;
[     8.454]  compiled for 1.21.1.18, module version = 1.0.1
[     8.454]  ABI class: X.Org ANSI C Emulation, version 0.4
[     9.059] (II) modeset(0): glamor X acceleration enabled on AMD Radeon RX 7800 XT (radeonsi, navi32, LLVM 20.1.8, DRM 3.64, 6.16.4-114.bazzite.fc42.x86_64)
[     9.059] (II) modeset(0): glamor initialized
[     9.059] (**) modeset(0): VariableRefresh: enabled
[     9.059] (==) modeset(0): AsyncFlipSecondaries: disabled
[     9.059] (II) modeset(0): Output DP-1 has no monitor section
[     9.059] (II) modeset(0): Output DP-2 has no monitor section
[     9.059] (II) modeset(0): Output HDMI-1 has no monitor section
[     9.064] (II) modeset(0): Output HDMI-2 has no monitor section
...
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Prioritize Ipv4 Over Ipv6 Linux</title><link>https://christitus.com/prioritize-ipv4-over-ipv6-linux/</link><guid isPermaLink="true">https://christitus.com/prioritize-ipv4-over-ipv6-linux/</guid><description>&lt;p&gt;On many Linux systems, IPv6 is prioritized over IPv4 by default. This can lead to connectivity issues if the network or services you are trying to reach are not fully compatible with IPv6. To prioritize IPv4 over IPv6, you can modify the system&apos;s address selection policy.&lt;/p&gt;

&lt;h2&gt;Setting /etc/gai.conf&lt;/h2&gt;
&lt;p&gt;gai.conf is the best and in my opinion, the ONLY method you should use for pushing ipv4 ahead of ipv6. Most methods online show &lt;code&gt;sysctl&lt;/code&gt; which DISABLES ipv6 and not a recommended way because ipv6 is so integrated in to many networks these days.&lt;/p&gt;
&lt;p&gt;Instead change the following file by editing &lt;code&gt;/etc/gai.conf&lt;/code&gt; and no restart or systemctl restart commands are needed.&lt;/p&gt;
&lt;p&gt;Here is the line to uncomment&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;precedence ::ffff:0:0/96  100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&apos;s it! Your system will now using ipv4 when it is availible, but can use ipv6 if it isn&apos;t.&lt;/p&gt;
&lt;h2&gt;Verify ipv4 priority&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;getent ahosts google.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or simply &lt;code&gt;ping google.com&lt;/code&gt; and you will see that ipv4 is shown instead of a ipv6 address at the top. &lt;code&gt;getent&lt;/code&gt; is a nice way of verifying that it will default back to ipv6 as it will show ipv6 addresses towards the bottom.&lt;/p&gt;
</description><pubDate>Fri, 03 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;On many Linux systems, IPv6 is prioritized over IPv4 by default. This can lead to connectivity issues if the network or services you are trying to reach are not fully compatible with IPv6. To prioritize IPv4 over IPv6, you can modify the system&apos;s address selection policy.&lt;/p&gt;

&lt;h2&gt;Setting /etc/gai.conf&lt;/h2&gt;
&lt;p&gt;gai.conf is the best and in my opinion, the ONLY method you should use for pushing ipv4 ahead of ipv6. Most methods online show &lt;code&gt;sysctl&lt;/code&gt; which DISABLES ipv6 and not a recommended way because ipv6 is so integrated in to many networks these days.&lt;/p&gt;
&lt;p&gt;Instead change the following file by editing &lt;code&gt;/etc/gai.conf&lt;/code&gt; and no restart or systemctl restart commands are needed.&lt;/p&gt;
&lt;p&gt;Here is the line to uncomment&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;precedence ::ffff:0:0/96  100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&apos;s it! Your system will now using ipv4 when it is availible, but can use ipv6 if it isn&apos;t.&lt;/p&gt;
&lt;h2&gt;Verify ipv4 priority&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;getent ahosts google.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or simply &lt;code&gt;ping google.com&lt;/code&gt; and you will see that ipv4 is shown instead of a ipv6 address at the top. &lt;code&gt;getent&lt;/code&gt; is a nice way of verifying that it will default back to ipv6 as it will show ipv6 addresses towards the bottom.&lt;/p&gt;
</content:encoded></item><item><title>Patching Programs From Forks</title><link>https://christitus.com/patching-programs-from-forks/</link><guid isPermaLink="true">https://christitus.com/patching-programs-from-forks/</guid><description>&lt;p&gt;This article explains how to patch programs from forks using Git. It covers the steps to clone a forked repository, create a patch file, and apply it to the original repository.&lt;/p&gt;

&lt;h2&gt;Creating Patch Files&lt;/h2&gt;
&lt;p&gt;Go to the repo that is ahead of the project that you want patched.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git format-patch -1 &amp;lt;COMMITSHA&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Git commit sha located at:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2025/git-sha.webp&quot; alt=&quot;git-sha&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Patching the Original Repo&lt;/h2&gt;
&lt;p&gt;Check the stats and if there will be any rejects from patching&lt;/p&gt;
&lt;p&gt;Stats:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git apply --stat &amp;lt;PATCHFILE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check for rejects:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git apply --check &amp;lt;PATCHFILE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Apply a clean patch:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git am &amp;lt;PATCHFILE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Apply a patch with rejects:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git am --reject &amp;lt;PATCHFILE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: You may need to resolve conflicts manually if there are rejects. Look in the directory for any &lt;code&gt;*.rej&lt;/code&gt; and manually fix the lines that did NOT get applied!&lt;/p&gt;
</description><pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This article explains how to patch programs from forks using Git. It covers the steps to clone a forked repository, create a patch file, and apply it to the original repository.&lt;/p&gt;

&lt;h2&gt;Creating Patch Files&lt;/h2&gt;
&lt;p&gt;Go to the repo that is ahead of the project that you want patched.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git format-patch -1 &amp;lt;COMMITSHA&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Git commit sha located at:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2025/git-sha.webp&quot; alt=&quot;git-sha&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Patching the Original Repo&lt;/h2&gt;
&lt;p&gt;Check the stats and if there will be any rejects from patching&lt;/p&gt;
&lt;p&gt;Stats:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git apply --stat &amp;lt;PATCHFILE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check for rejects:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git apply --check &amp;lt;PATCHFILE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Apply a clean patch:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git am &amp;lt;PATCHFILE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Apply a patch with rejects:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git am --reject &amp;lt;PATCHFILE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note: You may need to resolve conflicts manually if there are rejects. Look in the directory for any &lt;code&gt;*.rej&lt;/code&gt; and manually fix the lines that did NOT get applied!&lt;/p&gt;
</content:encoded></item><item><title>Setting Up Reshade on Linux with vkBasalt</title><link>https://christitus.com/setting-up-reshade-on-linux/</link><guid isPermaLink="true">https://christitus.com/setting-up-reshade-on-linux/</guid><description>&lt;p&gt;vkBasalt is a Vulkan post-processing layer that brings ReShade-like capabilities to Linux. It allows you to apply various visual effects to Vulkan-based games and applications, enhancing the overall graphical experience.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: This does NOT work with OpenGL games!&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Setting up vkBasalt&lt;/h2&gt;
&lt;p&gt;Requires 2 packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;vkBasalt &lt;a href=&quot;https://github.com/DadSchoorse/vkBasalt&quot;&gt;https://github.com/DadSchoorse/vkBasalt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Reshade Shaders/Textures &lt;a href=&quot;https://github.com/crosire/reshade-shaders&quot;&gt;https://github.com/crosire/reshade-shaders&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Arch Installation&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;yay -S vkbasalt lib32-vkbasalt reshade-shaders-git
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Debian/Fedora Installs&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install vkbasalt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf install vkbasalt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Manually download and extract reshade-shaders pack&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo git clone https://github.com/crosire/reshade-shaders.git /opt/reshade
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Configuartion&lt;/h2&gt;
&lt;p&gt;Install my vkbasalt configuartion with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/ChrisTitusTech/vkbasalt-conf ~/.config/vkbasalt
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Configuration Explained&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#effects is a colon seperated list of effect to use
#e.g.: effects = fxaa:cas
#effects will be run in order from left to right
#one effect can be run multiple times e.g. smaa:smaa:cas
#cas    - Contrast Adaptive Sharpening
#dls    - Denoised Luma Sharpening
#fxaa   - Fast Approximate Anti-Aliasing
#smaa   - Enhanced Subpixel Morphological Antialiasing
#lut    - Color LookUp Table
effects = cas

reshadeTexturePath = &quot;/path/to/reshade-shaders/Textures&quot;
reshadeIncludePath = &quot;/path/to/reshade-shaders/Shaders&quot;
depthCapture = off

#toggleKey toggles the effects on/off
toggleKey = Home

#enableOnLaunch sets if the effects are enabled when started
enableOnLaunch = True

#casSharpness specifies the amount of sharpning in the CAS shader.
#0.0 less sharp, less artefacts, but not off
#1.0 maximum sharp more artefacts
#Everything in between is possible
#negative values sharpen even less, up to -1.0 make a visible difference
casSharpness = 0.4

#dlsSharpness specifies the amount of sharpening in the Denoised Luma Sharpening shader.
#Increase to sharpen details within the image.
#0.0 less sharp, less artefacts, but not off
#1.0 maximum sharp more artefacts
dlsSharpness = 0.5

#dlsDenoise specifies the amount of denoising in the Denoised Luma Sharpening shader.
#Increase to limit how intensely film grain within the image gets sharpened.
#0.0 min
#1.0 max
dlsDenoise = 0.17

#fxaaQualitySubpix can effect sharpness.
#1.00 - upper limit (softer)
#0.75 - default amount of filtering
#0.50 - lower limit (sharper, less sub-pixel aliasing removal)
#0.25 - almost off
#0.00 - completely off
fxaaQualitySubpix = 0.75

#fxaaQualityEdgeThreshold is the minimum amount of local contrast required to apply algorithm.
#0.333 - too little (faster)
#0.250 - low quality
#0.166 - default
#0.125 - high quality 
#0.063 - overkill (slower)
fxaaQualityEdgeThreshold = 0.125

#fxaaQualityEdgeThresholdMin trims the algorithm from processing darks.
#0.0833 - upper limit (default, the start of visible unfiltered edges)
#0.0625 - high quality (faster)
#0.0312 - visible limit (slower)
#Special notes: due to the current implementation you
#Likely want to set this to zero.
#As colors that are mostly not-green
#will appear very dark in the green channel!
#Tune by looking at mostly non-green content,
#then start at zero and increase until aliasing is a problem.
fxaaQualityEdgeThresholdMin = 0.0312

#smaaEdgeDetection changes the edge detection shader
#luma  - default
#color - might catch more edges, but is more expensive
smaaEdgeDetection = luma

#smaaThreshold specifies the threshold or sensitivity to edges
#Lowering this value you will be able to detect more edges at the expense of performance.
#Range: [0, 0.5]
#0.1 is a reasonable value, and allows to catch most visible edges.
#0.05 is a rather overkill value, that allows to catch &apos;em all.
smaaThreshold = 0.05

#smaaMaxSearchSteps specifies the maximum steps performed in the horizontal/vertical pattern searches
#Range: [0, 112]
#4  - low
#8  - medium
#16 - high
#32 - ultra
smaaMaxSearchSteps = 32

#smaaMaxSearchStepsDiag specifies the maximum steps performed in the diagonal pattern searches
#Range: [0, 20]
#0  - low, medium
#8  - high
#16 - ultra
smaaMaxSearchStepsDiag = 16

#smaaCornerRounding specifies how much sharp corners will be rounded
#Range: [0, 100]
#25 is a reasonable value
smaaCornerRounding = 25

#lutFile is the path to the LUT file that will be used
#supported are .CUBE files and .png with width == height * height
lutFile = &quot;/path/to/lut&quot;
&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/l6h24cjmNyk&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>Tue, 26 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;vkBasalt is a Vulkan post-processing layer that brings ReShade-like capabilities to Linux. It allows you to apply various visual effects to Vulkan-based games and applications, enhancing the overall graphical experience.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: This does NOT work with OpenGL games!&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Setting up vkBasalt&lt;/h2&gt;
&lt;p&gt;Requires 2 packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;vkBasalt &lt;a href=&quot;https://github.com/DadSchoorse/vkBasalt&quot;&gt;https://github.com/DadSchoorse/vkBasalt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Reshade Shaders/Textures &lt;a href=&quot;https://github.com/crosire/reshade-shaders&quot;&gt;https://github.com/crosire/reshade-shaders&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Arch Installation&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;yay -S vkbasalt lib32-vkbasalt reshade-shaders-git
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Debian/Fedora Installs&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install vkbasalt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf install vkbasalt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Manually download and extract reshade-shaders pack&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo git clone https://github.com/crosire/reshade-shaders.git /opt/reshade
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Configuartion&lt;/h2&gt;
&lt;p&gt;Install my vkbasalt configuartion with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/ChrisTitusTech/vkbasalt-conf ~/.config/vkbasalt
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Configuration Explained&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#effects is a colon seperated list of effect to use
#e.g.: effects = fxaa:cas
#effects will be run in order from left to right
#one effect can be run multiple times e.g. smaa:smaa:cas
#cas    - Contrast Adaptive Sharpening
#dls    - Denoised Luma Sharpening
#fxaa   - Fast Approximate Anti-Aliasing
#smaa   - Enhanced Subpixel Morphological Antialiasing
#lut    - Color LookUp Table
effects = cas

reshadeTexturePath = &quot;/path/to/reshade-shaders/Textures&quot;
reshadeIncludePath = &quot;/path/to/reshade-shaders/Shaders&quot;
depthCapture = off

#toggleKey toggles the effects on/off
toggleKey = Home

#enableOnLaunch sets if the effects are enabled when started
enableOnLaunch = True

#casSharpness specifies the amount of sharpning in the CAS shader.
#0.0 less sharp, less artefacts, but not off
#1.0 maximum sharp more artefacts
#Everything in between is possible
#negative values sharpen even less, up to -1.0 make a visible difference
casSharpness = 0.4

#dlsSharpness specifies the amount of sharpening in the Denoised Luma Sharpening shader.
#Increase to sharpen details within the image.
#0.0 less sharp, less artefacts, but not off
#1.0 maximum sharp more artefacts
dlsSharpness = 0.5

#dlsDenoise specifies the amount of denoising in the Denoised Luma Sharpening shader.
#Increase to limit how intensely film grain within the image gets sharpened.
#0.0 min
#1.0 max
dlsDenoise = 0.17

#fxaaQualitySubpix can effect sharpness.
#1.00 - upper limit (softer)
#0.75 - default amount of filtering
#0.50 - lower limit (sharper, less sub-pixel aliasing removal)
#0.25 - almost off
#0.00 - completely off
fxaaQualitySubpix = 0.75

#fxaaQualityEdgeThreshold is the minimum amount of local contrast required to apply algorithm.
#0.333 - too little (faster)
#0.250 - low quality
#0.166 - default
#0.125 - high quality 
#0.063 - overkill (slower)
fxaaQualityEdgeThreshold = 0.125

#fxaaQualityEdgeThresholdMin trims the algorithm from processing darks.
#0.0833 - upper limit (default, the start of visible unfiltered edges)
#0.0625 - high quality (faster)
#0.0312 - visible limit (slower)
#Special notes: due to the current implementation you
#Likely want to set this to zero.
#As colors that are mostly not-green
#will appear very dark in the green channel!
#Tune by looking at mostly non-green content,
#then start at zero and increase until aliasing is a problem.
fxaaQualityEdgeThresholdMin = 0.0312

#smaaEdgeDetection changes the edge detection shader
#luma  - default
#color - might catch more edges, but is more expensive
smaaEdgeDetection = luma

#smaaThreshold specifies the threshold or sensitivity to edges
#Lowering this value you will be able to detect more edges at the expense of performance.
#Range: [0, 0.5]
#0.1 is a reasonable value, and allows to catch most visible edges.
#0.05 is a rather overkill value, that allows to catch &apos;em all.
smaaThreshold = 0.05

#smaaMaxSearchSteps specifies the maximum steps performed in the horizontal/vertical pattern searches
#Range: [0, 112]
#4  - low
#8  - medium
#16 - high
#32 - ultra
smaaMaxSearchSteps = 32

#smaaMaxSearchStepsDiag specifies the maximum steps performed in the diagonal pattern searches
#Range: [0, 20]
#0  - low, medium
#8  - high
#16 - ultra
smaaMaxSearchStepsDiag = 16

#smaaCornerRounding specifies how much sharp corners will be rounded
#Range: [0, 100]
#25 is a reasonable value
smaaCornerRounding = 25

#lutFile is the path to the LUT file that will be used
#supported are .CUBE files and .png with width == height * height
lutFile = &quot;/path/to/lut&quot;
&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/l6h24cjmNyk&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>Hyprland Monitor Config</title><link>https://christitus.com/hyprland-monitor-config/</link><guid isPermaLink="true">https://christitus.com/hyprland-monitor-config/</guid><description>&lt;p&gt;Configuring Monitors in Hyprland is amazing! You can specify monitors by type AND serial numbers.&lt;/p&gt;
&lt;h2&gt;List Monitor details&lt;/h2&gt;
&lt;p&gt;Here is a screenshot of &lt;code&gt;hyprctl monitors&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2025/hyprctl-monitors.webp&quot; alt=&quot;hyprctl&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Add to hyprland.conf&lt;/h2&gt;
&lt;p&gt;Syntax for adding specific monitors with configuration looks like this:
&lt;code&gt;monitor=desc:MONITOR_DESCRIPTION,resolution,position,scale&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;################
### MONITORS ###
################

# See https://wiki.hyprland.org/Configuring/Monitors/
# Studio PC Config
monitor=desc:AOP 27HC5R 1207043ED3W01,preferred,auto,1

# KFocus Laptop Config with Work Docking station
monitor=eDP-1,preferred,0x0,1
monitor=desc:Acer Technologies XV271U M3 140400A3B3LIJ,preferred,-2560x0,1
monitor=desc:Acer Technologies XV271U M3 140400DA63LIJ,preferred,-5120x0,1

# Inside PC Monitor Config
monitor=desc:HP Inc. OMEN 27i IPS 6CM10907V6,preferred,0x0,1
monitor=desc:Samsung Electric Company C24F390 HTQH906703,preferred,0x-1080,1
monitor=desc:IDI Elgato Prom. 0x01348D27,preferred,2560x0,1
&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Configuring Monitors in Hyprland is amazing! You can specify monitors by type AND serial numbers.&lt;/p&gt;
&lt;h2&gt;List Monitor details&lt;/h2&gt;
&lt;p&gt;Here is a screenshot of &lt;code&gt;hyprctl monitors&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2025/hyprctl-monitors.webp&quot; alt=&quot;hyprctl&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Add to hyprland.conf&lt;/h2&gt;
&lt;p&gt;Syntax for adding specific monitors with configuration looks like this:
&lt;code&gt;monitor=desc:MONITOR_DESCRIPTION,resolution,position,scale&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;################
### MONITORS ###
################

# See https://wiki.hyprland.org/Configuring/Monitors/
# Studio PC Config
monitor=desc:AOP 27HC5R 1207043ED3W01,preferred,auto,1

# KFocus Laptop Config with Work Docking station
monitor=eDP-1,preferred,0x0,1
monitor=desc:Acer Technologies XV271U M3 140400A3B3LIJ,preferred,-2560x0,1
monitor=desc:Acer Technologies XV271U M3 140400DA63LIJ,preferred,-5120x0,1

# Inside PC Monitor Config
monitor=desc:HP Inc. OMEN 27i IPS 6CM10907V6,preferred,0x0,1
monitor=desc:Samsung Electric Company C24F390 HTQH906703,preferred,0x-1080,1
monitor=desc:IDI Elgato Prom. 0x01348D27,preferred,2560x0,1
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>The Ai Problem</title><link>https://christitus.com/the-ai-problem/</link><guid isPermaLink="true">https://christitus.com/the-ai-problem/</guid><description>&lt;p&gt;Do we really need Google Gemini, Apple Intelligence, or Microsoft CoPilot?&lt;/p&gt;

&lt;h2&gt;A Solution without a Problem&lt;/h2&gt;
&lt;p&gt;Big Tech (Google, Microsoft, and Apple) are pushing these AI assistants down our throat. They don&apos;t really solve anything that we have a problem with. It should also be noted that they understand how bad the optics of these AI assistants are, so they are very adamant at pointing out that the data gathered does NOT get uploaded to their servers. However, they are very vague on what they actually do with our data... other than it is always watching and keeping track of EVERYTHING we do on our devices. They have also never explicitly said that it doesn&apos;t create profiles of our usage, nor have they said they can NOT remotely access it.&lt;/p&gt;
&lt;p&gt;The other issue is it ingesting all your data to &quot;improve&quot; AI. This has a variety of benefits for these large companies as they can use these profiles for advertising packages to sell to other companies. Companies like Roomba have even leaked the screenshots its vacuum took of a woman on the toilet back in 2020. &lt;em&gt;Source:&lt;/em&gt; &lt;a href=&quot;https://www.technologyreview.com/2022/12/19/1065306/roomba-irobot-robot-vacuums-artificial-intelligence-training-data-privacy/&quot;&gt;https://www.technologyreview.com/2022/12/19/1065306/roomba-irobot-robot-vacuums-artificial-intelligence-training-data-privacy/&lt;/a&gt; Do we really want to trust Microsoft, Apple, or Google with all our sensitive information? If the AI vacuum company did this... Think about everything you have ever done on your Phone or PC being looked at by &quot;AI&quot;.&lt;/p&gt;
&lt;p&gt;They also use this data to improve &quot;AI&quot; and that data is ours. They are taking it without asking nor are they upfront about how its able to learn by ONLY using OUR DATA!&lt;/p&gt;
&lt;h2&gt;AI can be good&lt;/h2&gt;
&lt;p&gt;Things like programming can be wonderful. GPT, Claude and many other LLMs are fantastic, but are isolated use cases. Most of what people call AI isn&apos;t AI at all. They are ways to extract more money with minimal investment out of their users. They slap &quot;AI Powered&quot; on the side and are able to move more software or retail boxes of that product without anything else being done. Most of the AI products like Gemini, Copilot or Apple AI are surveillance software to extract advertising information or profile users for their own means while giving very little value to the end user. Where &quot;AI&quot; is beneficial is when it is used like an auto-correct on steroids. Photos, Programming, Correcting mistakes, and much more, but giving access to your entire system is a bridge too far and it must remain isolated or you give up your privacy, independence, and hard work.&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/Bzgt2HKWmHY&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>Tue, 01 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Do we really need Google Gemini, Apple Intelligence, or Microsoft CoPilot?&lt;/p&gt;

&lt;h2&gt;A Solution without a Problem&lt;/h2&gt;
&lt;p&gt;Big Tech (Google, Microsoft, and Apple) are pushing these AI assistants down our throat. They don&apos;t really solve anything that we have a problem with. It should also be noted that they understand how bad the optics of these AI assistants are, so they are very adamant at pointing out that the data gathered does NOT get uploaded to their servers. However, they are very vague on what they actually do with our data... other than it is always watching and keeping track of EVERYTHING we do on our devices. They have also never explicitly said that it doesn&apos;t create profiles of our usage, nor have they said they can NOT remotely access it.&lt;/p&gt;
&lt;p&gt;The other issue is it ingesting all your data to &quot;improve&quot; AI. This has a variety of benefits for these large companies as they can use these profiles for advertising packages to sell to other companies. Companies like Roomba have even leaked the screenshots its vacuum took of a woman on the toilet back in 2020. &lt;em&gt;Source:&lt;/em&gt; &lt;a href=&quot;https://www.technologyreview.com/2022/12/19/1065306/roomba-irobot-robot-vacuums-artificial-intelligence-training-data-privacy/&quot;&gt;https://www.technologyreview.com/2022/12/19/1065306/roomba-irobot-robot-vacuums-artificial-intelligence-training-data-privacy/&lt;/a&gt; Do we really want to trust Microsoft, Apple, or Google with all our sensitive information? If the AI vacuum company did this... Think about everything you have ever done on your Phone or PC being looked at by &quot;AI&quot;.&lt;/p&gt;
&lt;p&gt;They also use this data to improve &quot;AI&quot; and that data is ours. They are taking it without asking nor are they upfront about how its able to learn by ONLY using OUR DATA!&lt;/p&gt;
&lt;h2&gt;AI can be good&lt;/h2&gt;
&lt;p&gt;Things like programming can be wonderful. GPT, Claude and many other LLMs are fantastic, but are isolated use cases. Most of what people call AI isn&apos;t AI at all. They are ways to extract more money with minimal investment out of their users. They slap &quot;AI Powered&quot; on the side and are able to move more software or retail boxes of that product without anything else being done. Most of the AI products like Gemini, Copilot or Apple AI are surveillance software to extract advertising information or profile users for their own means while giving very little value to the end user. Where &quot;AI&quot; is beneficial is when it is used like an auto-correct on steroids. Photos, Programming, Correcting mistakes, and much more, but giving access to your entire system is a bridge too far and it must remain isolated or you give up your privacy, independence, and hard work.&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/Bzgt2HKWmHY&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>Cleaning Arch Linux</title><link>https://christitus.com/cleaning-arch-linux/</link><guid isPermaLink="true">https://christitus.com/cleaning-arch-linux/</guid><description>&lt;p&gt;I&apos;ve officially been on Arch Linux for 366 days and have DONE EVERYTHING I can do to break it.&lt;/p&gt;

&lt;p&gt;Not only has it stood the test of time, updates, and my shenanigans, but it is just as good or BETTER than when I started. THE POWER OF LINUX!&lt;/p&gt;
&lt;h2&gt;It SHOULD of Broke&lt;/h2&gt;
&lt;p&gt;Here is a list of things I&apos;ve tried and many on live streams while working. These things I do not recommend doing ever, but I wanted to see how much it could withstand.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PCI Passthrough (Difficult, but it worked great after some tinkering)&lt;/li&gt;
&lt;li&gt;Shrinking and Growing all the partitions on the system drive. Root, Boot, and Home partitions all changed AFTER install.&lt;/li&gt;
&lt;li&gt;Custom Kernels (Zen, Bazzite, lts, etc.) - All were done WITH an nVidia 4070 Super, sometimes with DKMS modules and other times without.&lt;/li&gt;
&lt;li&gt;Multiple DE installs and Window Managers. Hyperland, Sway, i3, KDE, etc. (Some packages are still there and others were purged)&lt;/li&gt;
&lt;li&gt;Changing Display Manager multiple times... currently I don&apos;t have one.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Bloat of Time&lt;/h2&gt;
&lt;p&gt;With any operating system there is bloat from added programs, packages, and general usage over time. On Windows you are reloading and nuking your OS every couple years or sooner. With Linux you have the power to clean out anything that doesn&apos;t work for you. So you have all the functionality without any of the bloat. &lt;strong&gt;However&lt;/strong&gt;, You must do the debloat and keep things running top notch. Here are a few areas I expanded and cleaned on my Arch Linux install.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cleanup Flatpaks &lt;code&gt;flatpak uninstall --unused&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Find bloat in Root &lt;code&gt;ncdu / --exclude /media --exclude /run/timeshift&lt;/code&gt; Note: My 100GB Root drive filled and ncdu found a bunch of files from ollama and running local LLMs&lt;/li&gt;
&lt;li&gt;Manually installed programs in &lt;code&gt;/opt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Clear pacman cache &lt;code&gt;yay -Scc&lt;/code&gt; Note: Cache needs to be cleared every so often as it does eat disk space&lt;/li&gt;
&lt;li&gt;Old timeshift backups Note: Always backup everything, but prune the crap that is old. I also recommend doing this from Timeshifts GUI!&lt;/li&gt;
&lt;li&gt;Check Partition usage: &lt;code&gt;df -h&lt;/code&gt; to see free space and &lt;code&gt;lsblk&lt;/code&gt; to see mount points on which device&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/4RxaQbb6KV4&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, 28 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve officially been on Arch Linux for 366 days and have DONE EVERYTHING I can do to break it.&lt;/p&gt;

&lt;p&gt;Not only has it stood the test of time, updates, and my shenanigans, but it is just as good or BETTER than when I started. THE POWER OF LINUX!&lt;/p&gt;
&lt;h2&gt;It SHOULD of Broke&lt;/h2&gt;
&lt;p&gt;Here is a list of things I&apos;ve tried and many on live streams while working. These things I do not recommend doing ever, but I wanted to see how much it could withstand.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PCI Passthrough (Difficult, but it worked great after some tinkering)&lt;/li&gt;
&lt;li&gt;Shrinking and Growing all the partitions on the system drive. Root, Boot, and Home partitions all changed AFTER install.&lt;/li&gt;
&lt;li&gt;Custom Kernels (Zen, Bazzite, lts, etc.) - All were done WITH an nVidia 4070 Super, sometimes with DKMS modules and other times without.&lt;/li&gt;
&lt;li&gt;Multiple DE installs and Window Managers. Hyperland, Sway, i3, KDE, etc. (Some packages are still there and others were purged)&lt;/li&gt;
&lt;li&gt;Changing Display Manager multiple times... currently I don&apos;t have one.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Bloat of Time&lt;/h2&gt;
&lt;p&gt;With any operating system there is bloat from added programs, packages, and general usage over time. On Windows you are reloading and nuking your OS every couple years or sooner. With Linux you have the power to clean out anything that doesn&apos;t work for you. So you have all the functionality without any of the bloat. &lt;strong&gt;However&lt;/strong&gt;, You must do the debloat and keep things running top notch. Here are a few areas I expanded and cleaned on my Arch Linux install.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cleanup Flatpaks &lt;code&gt;flatpak uninstall --unused&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Find bloat in Root &lt;code&gt;ncdu / --exclude /media --exclude /run/timeshift&lt;/code&gt; Note: My 100GB Root drive filled and ncdu found a bunch of files from ollama and running local LLMs&lt;/li&gt;
&lt;li&gt;Manually installed programs in &lt;code&gt;/opt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Clear pacman cache &lt;code&gt;yay -Scc&lt;/code&gt; Note: Cache needs to be cleared every so often as it does eat disk space&lt;/li&gt;
&lt;li&gt;Old timeshift backups Note: Always backup everything, but prune the crap that is old. I also recommend doing this from Timeshifts GUI!&lt;/li&gt;
&lt;li&gt;Check Partition usage: &lt;code&gt;df -h&lt;/code&gt; to see free space and &lt;code&gt;lsblk&lt;/code&gt; to see mount points on which device&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/4RxaQbb6KV4&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>iSCSI on Boot</title><link>https://christitus.com/iscsi-on-boot/</link><guid isPermaLink="true">https://christitus.com/iscsi-on-boot/</guid><description>&lt;p&gt;This shows how to setup iSCSI on Boot in Linux&lt;/p&gt;

&lt;h2&gt;Installing iSCSI packages&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo pacman -S open-iscsi
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Enable iSCSI to be used&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl enable iscsid.service --now
sudo systemctl enable iscsi.service
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Finding iSCSI Targets&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo iscsiadm -m discovery -t sendtargets -p &amp;lt;target-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Example Usage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.168.1.100:3260,1 iqn.2023-01.com.example:storage.target1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: the iqn from the output you will need that!&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Discover already discovered targets&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo iscsiadm -m session
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Login to Target&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo iscsiadm -m node -T &amp;lt;target-iqn&amp;gt; -p &amp;lt;target-ip&amp;gt; --login
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Set Auto-Login on Boot&lt;/h3&gt;
&lt;p&gt;First setup Automatic Discovery of Target&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo iscsiadm -m node -T &amp;lt;target-iqn&amp;gt; -p &amp;lt;target-ip&amp;gt; --op update -n node.startup -v automatic
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Second grab the UUID from blkid&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo blkid
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Third Auto Mount with &lt;code&gt;/etc/fstab&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;UUID=&amp;lt;UUID from blkid&amp;gt; /mountpoint  &amp;lt;ext4/ntfs/btrfs&amp;gt;  x-systemd.after=network-online.target,x-systemd.automount,x-systemd.mount-timeout=90,_netdev 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Remove Auto-Login on Boot&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo iscsiadm -m node -u
sudo iscsiadm -m node -o delete -T &amp;lt;target_name&amp;gt; -p &amp;lt;ip_address&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Also remove any added entries from &lt;code&gt;/etc/fstab&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;p&gt;Too Niche for a video. Let me know in the comments if you&apos;d like to see this.&lt;/p&gt;
</description><pubDate>Mon, 28 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This shows how to setup iSCSI on Boot in Linux&lt;/p&gt;

&lt;h2&gt;Installing iSCSI packages&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo pacman -S open-iscsi
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Enable iSCSI to be used&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl enable iscsid.service --now
sudo systemctl enable iscsi.service
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Finding iSCSI Targets&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo iscsiadm -m discovery -t sendtargets -p &amp;lt;target-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Example Usage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.168.1.100:3260,1 iqn.2023-01.com.example:storage.target1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: the iqn from the output you will need that!&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Discover already discovered targets&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo iscsiadm -m session
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Login to Target&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo iscsiadm -m node -T &amp;lt;target-iqn&amp;gt; -p &amp;lt;target-ip&amp;gt; --login
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Set Auto-Login on Boot&lt;/h3&gt;
&lt;p&gt;First setup Automatic Discovery of Target&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo iscsiadm -m node -T &amp;lt;target-iqn&amp;gt; -p &amp;lt;target-ip&amp;gt; --op update -n node.startup -v automatic
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Second grab the UUID from blkid&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo blkid
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Third Auto Mount with &lt;code&gt;/etc/fstab&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;UUID=&amp;lt;UUID from blkid&amp;gt; /mountpoint  &amp;lt;ext4/ntfs/btrfs&amp;gt;  x-systemd.after=network-online.target,x-systemd.automount,x-systemd.mount-timeout=90,_netdev 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Remove Auto-Login on Boot&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo iscsiadm -m node -u
sudo iscsiadm -m node -o delete -T &amp;lt;target_name&amp;gt; -p &amp;lt;ip_address&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Also remove any added entries from &lt;code&gt;/etc/fstab&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;p&gt;Too Niche for a video. Let me know in the comments if you&apos;d like to see this.&lt;/p&gt;
</content:encoded></item><item><title>Jakoolit Hyprland</title><link>https://christitus.com/jakoolit-hyprland/</link><guid isPermaLink="true">https://christitus.com/jakoolit-hyprland/</guid><description>&lt;p&gt;Hyprland has always been an elusive setup to a functional desktop that I enjoy. However, I recently explored JaKoolit and it has been a game changer. This is a guide on how to setup JaKoolit Hyprland on your system.&lt;/p&gt;

&lt;h2&gt;What systems are compatile with JaKoolit Hyprland?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/JaKooLit&quot;&gt;JaKoolit Hyprland&lt;/a&gt; is compatible with the following systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 24.04&lt;/li&gt;
&lt;li&gt;Ubuntu 24.10&lt;/li&gt;
&lt;li&gt;Arch Linux&lt;/li&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;li&gt;NixOS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;He also created basic scripts for each distro repository to install his version of hyprland.&lt;/p&gt;
&lt;h2&gt;How to install JaKoolit Hyprland&lt;/h2&gt;
&lt;p&gt;You can follow his direct instructions, but I wanted to make it easier for people, so I made his scripts directly integrated into &lt;a href=&quot;https://github.com/ChrisTitusTech/linutil&quot;&gt;Linutil&lt;/a&gt;. This way you can install JaKoolit Hyprland with a single command.&lt;/p&gt;
&lt;p&gt;The best part of this is Linutil will auto-detect which distro you are on and install the correct version of JaKoolit Hyprland.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL christitus.com/linux | sh 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Look under System setup and you&apos;ll see the option to install JaKoolit Hyprland.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2025/jakoolit-hyprland/linutil-hyprland.webp&quot; alt=&quot;Linutil Hyprland&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/83ZZp8wJ-UY&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, 10 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hyprland has always been an elusive setup to a functional desktop that I enjoy. However, I recently explored JaKoolit and it has been a game changer. This is a guide on how to setup JaKoolit Hyprland on your system.&lt;/p&gt;

&lt;h2&gt;What systems are compatile with JaKoolit Hyprland?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/JaKooLit&quot;&gt;JaKoolit Hyprland&lt;/a&gt; is compatible with the following systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu 24.04&lt;/li&gt;
&lt;li&gt;Ubuntu 24.10&lt;/li&gt;
&lt;li&gt;Arch Linux&lt;/li&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;li&gt;NixOS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;He also created basic scripts for each distro repository to install his version of hyprland.&lt;/p&gt;
&lt;h2&gt;How to install JaKoolit Hyprland&lt;/h2&gt;
&lt;p&gt;You can follow his direct instructions, but I wanted to make it easier for people, so I made his scripts directly integrated into &lt;a href=&quot;https://github.com/ChrisTitusTech/linutil&quot;&gt;Linutil&lt;/a&gt;. This way you can install JaKoolit Hyprland with a single command.&lt;/p&gt;
&lt;p&gt;The best part of this is Linutil will auto-detect which distro you are on and install the correct version of JaKoolit Hyprland.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL christitus.com/linux | sh 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Look under System setup and you&apos;ll see the option to install JaKoolit Hyprland.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2025/jakoolit-hyprland/linutil-hyprland.webp&quot; alt=&quot;Linutil Hyprland&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/83ZZp8wJ-UY&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 I Use Linux</title><link>https://christitus.com/why-i-use-linux/</link><guid isPermaLink="true">https://christitus.com/why-i-use-linux/</guid><description>&lt;p&gt;I use EVERY operating system, but I use Linux for my main machine. Its not for security, its not for privacy, its not for speed, and its not for stability.&lt;/p&gt;

&lt;h2&gt;Windows Shortcomings&lt;/h2&gt;
&lt;p&gt;Windows has been my main OS since the 90s and I&apos;ve used it for everything. I&apos;ve used it for gaming, coding, and everything in between. However, in recent years from forced updates and telemetry there is a lot of problems that have come up. I&apos;d even go as far as to say that Windows is the reason most people use Linux, at least initially. Linux is not attractive, but compared to many of the improvements in Windows over the past 10 years, it is makes Linux look like a rockstar. With last years Recall debacle, it is clear that Microsoft is not looking out for the user. However, this isn&apos;t my main reason for using Linux anymore, but it was my main reason for starting to use Linux.&lt;/p&gt;
&lt;h2&gt;MacOS isn&apos;t for me&lt;/h2&gt;
&lt;p&gt;MacOS is also another refuge for Windows users, but I find the lack of customization and lack of control to be a bit much. I&apos;ve used it for a few years, but I don&apos;t like it as much as Linux. I enjoy customizing my system and I have the same fears that Apple is going to start forcing updates and telemetry like Windows or even worse, start to limit what I can do with my system.&lt;/p&gt;
&lt;h2&gt;Linux is the best of all worlds&lt;/h2&gt;
&lt;p&gt;Most Linux virgins will tell you its more secure, private, or stable than Windows. Security can be achieved with Qubes and other security specialized distros with compartmentalization but frankly it sucks. It causes WAY too much friction and is not worth the security or privacy benefits for me. Stability is another thing, I&apos;ve had more stability issues with Linux than Windows. I&apos;ve had to reinstall my OS more times on Linux than Windows. I don&apos;t say this to bash Linux, I love Linux, but I&apos;m just being honest. Most of these stability issues were from either trying to make obscure hardware/software work under Linux or relying on desktop environments and a GUI to do too much. Linux can be VERY stable, but it can also be VERY unstable.&lt;/p&gt;
&lt;p&gt;So Why Linux?&lt;/p&gt;
&lt;p&gt;Simply put, I get more done. I am able to develop more software, I am more creative for YouTube videos, and I am able explore an endless world of possibilities in Linux. No one knows everything about Linux and I do mean NO ONE! Not even the most experienced Linux users knows everything about Linux. There is always something new to learn and I love it because of this. In Mac or Windows there is no mystery for me other than tracking down and fixing things Apple or Microsoft screwed up in recent years, but beyond that its rather boring.&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/7-UCkYlTr50&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, 02 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I use EVERY operating system, but I use Linux for my main machine. Its not for security, its not for privacy, its not for speed, and its not for stability.&lt;/p&gt;

&lt;h2&gt;Windows Shortcomings&lt;/h2&gt;
&lt;p&gt;Windows has been my main OS since the 90s and I&apos;ve used it for everything. I&apos;ve used it for gaming, coding, and everything in between. However, in recent years from forced updates and telemetry there is a lot of problems that have come up. I&apos;d even go as far as to say that Windows is the reason most people use Linux, at least initially. Linux is not attractive, but compared to many of the improvements in Windows over the past 10 years, it is makes Linux look like a rockstar. With last years Recall debacle, it is clear that Microsoft is not looking out for the user. However, this isn&apos;t my main reason for using Linux anymore, but it was my main reason for starting to use Linux.&lt;/p&gt;
&lt;h2&gt;MacOS isn&apos;t for me&lt;/h2&gt;
&lt;p&gt;MacOS is also another refuge for Windows users, but I find the lack of customization and lack of control to be a bit much. I&apos;ve used it for a few years, but I don&apos;t like it as much as Linux. I enjoy customizing my system and I have the same fears that Apple is going to start forcing updates and telemetry like Windows or even worse, start to limit what I can do with my system.&lt;/p&gt;
&lt;h2&gt;Linux is the best of all worlds&lt;/h2&gt;
&lt;p&gt;Most Linux virgins will tell you its more secure, private, or stable than Windows. Security can be achieved with Qubes and other security specialized distros with compartmentalization but frankly it sucks. It causes WAY too much friction and is not worth the security or privacy benefits for me. Stability is another thing, I&apos;ve had more stability issues with Linux than Windows. I&apos;ve had to reinstall my OS more times on Linux than Windows. I don&apos;t say this to bash Linux, I love Linux, but I&apos;m just being honest. Most of these stability issues were from either trying to make obscure hardware/software work under Linux or relying on desktop environments and a GUI to do too much. Linux can be VERY stable, but it can also be VERY unstable.&lt;/p&gt;
&lt;p&gt;So Why Linux?&lt;/p&gt;
&lt;p&gt;Simply put, I get more done. I am able to develop more software, I am more creative for YouTube videos, and I am able explore an endless world of possibilities in Linux. No one knows everything about Linux and I do mean NO ONE! Not even the most experienced Linux users knows everything about Linux. There is always something new to learn and I love it because of this. In Mac or Windows there is no mystery for me other than tracking down and fixing things Apple or Microsoft screwed up in recent years, but beyond that its rather boring.&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/7-UCkYlTr50&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>Windows to Linux for Powerusers</title><link>https://christitus.com/windows-to-linux/</link><guid isPermaLink="true">https://christitus.com/windows-to-linux/</guid><description>&lt;p&gt;Windows to Linux is a hard transition for many users. I find this especially true for advanced Windows users. Here are all the things I wish I knew before trying to switch to Linux after using Windows for 20+ years.&lt;/p&gt;

&lt;h2&gt;Qualify Yourself and Expectations&lt;/h2&gt;
&lt;p&gt;Understand that Linux is NOT Windows and they work differently. Figure out the shortcomings of Linux in your current workflow and be flexible in learning alternatives or be comfortable dual booting.&lt;/p&gt;
&lt;p&gt;Think about program alternatives and incompatibilities&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft Office&lt;/li&gt;
&lt;li&gt;Adobe Products&lt;/li&gt;
&lt;li&gt;Gaming Titles that use Anti-Cheat (check &lt;a href=&quot;https://protondb.com&quot;&gt;https://protondb.com&lt;/a&gt; for compatibility)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why do you want to switch? For me, I was tired of Windows and their update cycle.&lt;/p&gt;
&lt;h2&gt;Setup a Test Environment&lt;/h2&gt;
&lt;p&gt;Before you nuke your Windows and install Linux, you need to understand what you are getting yourself into. The best way is to setup a test environment using either a Virtual Machine or even another PC. I personally recommend using a raspberry pi to cut your teeth in Linux and understanding terminal.&lt;/p&gt;
&lt;h3&gt;Choosing your Distribution&lt;/h3&gt;
&lt;p&gt;There are two types of distributions in Linux, Rolling and Stable A.K.A. LTS (Long Term Service). There is a scale of bleeding edge to really stable, but old packages.&lt;/p&gt;
&lt;p&gt;Most other tutorials will tell you to install ubuntu or mint at this point, but I want you to understand what Linux is capable of and building your own distribution is the best way to learn. There are so many distributions how do you pick one? Let me simplify this decision... Install Debian. Its the most common and easiest to find guides on. Arch Linux is a second choice as it is very friendly on installing any package. Third, would be Fedora as it is a good middle ground between Arch and Debian.&lt;/p&gt;
&lt;p&gt;What about the 100 or so other distributions? Most of these are just the same thing with a few different options that don&apos;t matter or just look different. Once you figure out how to change Linux to your liking you won&apos;t care which one you pick.&lt;/p&gt;
&lt;h4&gt;Rolling Releases&lt;/h4&gt;
&lt;p&gt;Arch Linux is probably the most well known rolling release that has the most up to date packages, but the more of these you install, the more unstable the system will become. It is not uncommon to run into a bad update and have the system start acting up. I don&apos;t recommend this type of distribution, but understand the appeal. Honorable mentions in this space are OpenSUSE tumbleweed, but is more obscure for newbies to the Linux space.&lt;/p&gt;
&lt;h4&gt;Stable Releases&lt;/h4&gt;
&lt;p&gt;These packages can be relatively modern, but not as bleeding edge as Arch or rolling releases. There are three distributions I&apos;d recommend.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fedora (13-month release cycle) - Most modern packages of many stable releases&lt;/li&gt;
&lt;li&gt;Debian (24-month release cycle) - Most common distribution out of all of Linux with most things based on it and My MAIN recommendation.&lt;/li&gt;
&lt;li&gt;Red Hat Enterprise Linux - Rocky (10 year support) - Mostly used in business or areas where nothing will change for a long time. Very old packages and mainly used in server environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Understanding Linux&lt;/h3&gt;
&lt;p&gt;Distributions are just pre-packaged components making up Linux. Unlike Windows or Mac, you can choose different options for bootloader, init systems, display rendering, display managers, desktop environments or window managers. Which are the basic components every system has, once on the desktop you can pickup your own file browser, start menu, bars, configuration tools and utilities.&lt;/p&gt;
&lt;p&gt;Linux can be changed in any way you want. Where a pre-packaged system like Windows or Mac all these decisions are made for you and can&apos;t be removed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You don&apos;t like how the system boots? Change the bootloader from grub to systemd&lt;/li&gt;
&lt;li&gt;Don&apos;t like the way Xorg handles displays? Change to Wayland&lt;/li&gt;
&lt;li&gt;Want a completely different workflow from the GNOME Desktop Environment? Switch to KDE&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Notable Differences from Windows&lt;/h4&gt;
&lt;p&gt;Here is a short list of things you need to know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drivers are baked into the Kernel and adding new &quot;drivers&quot; relies on a kernel module that needs to be rebuilt every time the kernel changes. These modules rely on dkms and linux-headers a lot of the time.&lt;/li&gt;
&lt;li&gt;Control Panel and GUI system applications are generally an after thought. System configuration is done in the &lt;code&gt;/etc&lt;/code&gt; folder and User configuration is done in the &lt;code&gt;/home/user/.config&lt;/code&gt; folder. Windows can spread config files everywhere and Linux doesn&apos;t and puts them in these folders depending on if it is systemwide or user based.&lt;/li&gt;
&lt;li&gt;Terminal is needed. Linux try hards always say you can do anything in the GUI and generally don&apos;t use Windows or Mac and don&apos;t know how bad the Linux GUI experience is in comparison. You will need to get comfortable with the terminal. Linux is built for the CLI experience in mind FIRST and the GUI ALWAYS is second or not at all in some cases.&lt;/li&gt;
&lt;li&gt;EVERYTHING can be customized!&lt;/li&gt;
&lt;li&gt;Linux will NOT protect you from yourself. You can do anything you want and break your system.&lt;/li&gt;
&lt;li&gt;Linux FOSS applications are generally less polished, but then again they are FREE!&lt;/li&gt;
&lt;li&gt;Browser-based app alternatives are a way to get around the limitations of FOSS offerings&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;How Programs are Installed&lt;/h4&gt;
&lt;p&gt;The biggest thing a specific distribution gives you is a Package Manager. How it installs programs is something that doesn&apos;t change very much.&lt;/p&gt;
&lt;p&gt;Here are some examples so you don&apos;t go look dumb trying to install packages on a different distribution with a different package manager:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo apt install name&lt;/code&gt; - Debian, Ubuntu, and a TON of Linux distributions use &lt;code&gt;apt&lt;/code&gt; as the package manager.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pacman -Sy name&lt;/code&gt; - Arch-based also uses &lt;code&gt;yay&lt;/code&gt; or &lt;code&gt;paru&lt;/code&gt; to expand this to include almost any Linux package in existence.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo dnf install name&lt;/code&gt; - RHEL-based distros like Fedora use this package manager. It used to be &lt;code&gt;yum&lt;/code&gt; instead, but was changed in recent years to dnf.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a ton of others for different distros, like &lt;code&gt;zypper&lt;/code&gt; for OpenSUSE or &lt;code&gt;swupd&lt;/code&gt; for Clear Linux, but these are pretty niche and you shouldn&apos;t concern yourself with them.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Packages for ALL Distributions&lt;/em&gt; are made using Flatpak, AppImage, Flatpak, and even installing a secondary package manager like homebrew or nix. Everything I just listed works on all distributions and are containerized for the most part.&lt;/p&gt;
&lt;h4&gt;Typical Distribution&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Common alternatives in parenthesis&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootloader = GRUB (Systemd-boot)&lt;/li&gt;
&lt;li&gt;Init System = Systemd&lt;/li&gt;
&lt;li&gt;Display Render = Wayland (Xorg - Common on Older Distros)&lt;/li&gt;
&lt;li&gt;Display Manager = GDM, SDDM, or LightDM (This is the Login Manager)&lt;/li&gt;
&lt;li&gt;Desktop Environments = KDE, Gnome, Cinnamon, XFCE, Mate, and LXQT (These have gui tool suite to help with system configuration)&lt;/li&gt;
&lt;li&gt;Window Managers (Desktop Environment Alternative)
&lt;ul&gt;
&lt;li&gt;Wayland Based = Sway and Hyprland (riverwm, dwl, and other are still being developed)&lt;/li&gt;
&lt;li&gt;Xorg = BSPWM, DWM, i3, qTile, XMonad, awesomewm, and many others.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example Configuration&lt;/p&gt;
&lt;p&gt;Ubuntu&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootloader - Grub&lt;/li&gt;
&lt;li&gt;Init System - Systemd&lt;/li&gt;
&lt;li&gt;Display Render - Wayland&lt;/li&gt;
&lt;li&gt;Display Manager - GDM&lt;/li&gt;
&lt;li&gt;Desktop Environment - GNOME&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;First Installation&lt;/h3&gt;
&lt;p&gt;Grab a debian ISO here: &lt;a href=&quot;https://www.debian.org/download&quot;&gt;https://www.debian.org/download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The basic netinst is fine for now. We just want a sample system to build up and learn on.&lt;/p&gt;
&lt;h3&gt;Second Installation&lt;/h3&gt;
&lt;p&gt;Use Arch Linux here: &lt;a href=&quot;https://archlinux.org/download/&quot;&gt;https://archlinux.org/download/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Instead of using a wizard included with Arch, I recommend walking through all the steps @ &lt;a href=&quot;https://wiki.archlinux.org/title/Installation_guide&quot;&gt;https://wiki.archlinux.org/title/Installation_guide&lt;/a&gt; and learning about what goes into the setup process. Arch does a fantastic job of breaking down each step and I highly recommend their wiki as a resource even when NOT using arch.&lt;/p&gt;
&lt;h3&gt;Third Installation&lt;/h3&gt;
&lt;p&gt;Start messing around with window managers and configuring the system from a command line interface (CLI). This will make you more comfortable with Linux as a whole. After this is done, decide which way you enjoy the most.&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/vlN5koqNY5U&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, 29 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Windows to Linux is a hard transition for many users. I find this especially true for advanced Windows users. Here are all the things I wish I knew before trying to switch to Linux after using Windows for 20+ years.&lt;/p&gt;

&lt;h2&gt;Qualify Yourself and Expectations&lt;/h2&gt;
&lt;p&gt;Understand that Linux is NOT Windows and they work differently. Figure out the shortcomings of Linux in your current workflow and be flexible in learning alternatives or be comfortable dual booting.&lt;/p&gt;
&lt;p&gt;Think about program alternatives and incompatibilities&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft Office&lt;/li&gt;
&lt;li&gt;Adobe Products&lt;/li&gt;
&lt;li&gt;Gaming Titles that use Anti-Cheat (check &lt;a href=&quot;https://protondb.com&quot;&gt;https://protondb.com&lt;/a&gt; for compatibility)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why do you want to switch? For me, I was tired of Windows and their update cycle.&lt;/p&gt;
&lt;h2&gt;Setup a Test Environment&lt;/h2&gt;
&lt;p&gt;Before you nuke your Windows and install Linux, you need to understand what you are getting yourself into. The best way is to setup a test environment using either a Virtual Machine or even another PC. I personally recommend using a raspberry pi to cut your teeth in Linux and understanding terminal.&lt;/p&gt;
&lt;h3&gt;Choosing your Distribution&lt;/h3&gt;
&lt;p&gt;There are two types of distributions in Linux, Rolling and Stable A.K.A. LTS (Long Term Service). There is a scale of bleeding edge to really stable, but old packages.&lt;/p&gt;
&lt;p&gt;Most other tutorials will tell you to install ubuntu or mint at this point, but I want you to understand what Linux is capable of and building your own distribution is the best way to learn. There are so many distributions how do you pick one? Let me simplify this decision... Install Debian. Its the most common and easiest to find guides on. Arch Linux is a second choice as it is very friendly on installing any package. Third, would be Fedora as it is a good middle ground between Arch and Debian.&lt;/p&gt;
&lt;p&gt;What about the 100 or so other distributions? Most of these are just the same thing with a few different options that don&apos;t matter or just look different. Once you figure out how to change Linux to your liking you won&apos;t care which one you pick.&lt;/p&gt;
&lt;h4&gt;Rolling Releases&lt;/h4&gt;
&lt;p&gt;Arch Linux is probably the most well known rolling release that has the most up to date packages, but the more of these you install, the more unstable the system will become. It is not uncommon to run into a bad update and have the system start acting up. I don&apos;t recommend this type of distribution, but understand the appeal. Honorable mentions in this space are OpenSUSE tumbleweed, but is more obscure for newbies to the Linux space.&lt;/p&gt;
&lt;h4&gt;Stable Releases&lt;/h4&gt;
&lt;p&gt;These packages can be relatively modern, but not as bleeding edge as Arch or rolling releases. There are three distributions I&apos;d recommend.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fedora (13-month release cycle) - Most modern packages of many stable releases&lt;/li&gt;
&lt;li&gt;Debian (24-month release cycle) - Most common distribution out of all of Linux with most things based on it and My MAIN recommendation.&lt;/li&gt;
&lt;li&gt;Red Hat Enterprise Linux - Rocky (10 year support) - Mostly used in business or areas where nothing will change for a long time. Very old packages and mainly used in server environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Understanding Linux&lt;/h3&gt;
&lt;p&gt;Distributions are just pre-packaged components making up Linux. Unlike Windows or Mac, you can choose different options for bootloader, init systems, display rendering, display managers, desktop environments or window managers. Which are the basic components every system has, once on the desktop you can pickup your own file browser, start menu, bars, configuration tools and utilities.&lt;/p&gt;
&lt;p&gt;Linux can be changed in any way you want. Where a pre-packaged system like Windows or Mac all these decisions are made for you and can&apos;t be removed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You don&apos;t like how the system boots? Change the bootloader from grub to systemd&lt;/li&gt;
&lt;li&gt;Don&apos;t like the way Xorg handles displays? Change to Wayland&lt;/li&gt;
&lt;li&gt;Want a completely different workflow from the GNOME Desktop Environment? Switch to KDE&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Notable Differences from Windows&lt;/h4&gt;
&lt;p&gt;Here is a short list of things you need to know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drivers are baked into the Kernel and adding new &quot;drivers&quot; relies on a kernel module that needs to be rebuilt every time the kernel changes. These modules rely on dkms and linux-headers a lot of the time.&lt;/li&gt;
&lt;li&gt;Control Panel and GUI system applications are generally an after thought. System configuration is done in the &lt;code&gt;/etc&lt;/code&gt; folder and User configuration is done in the &lt;code&gt;/home/user/.config&lt;/code&gt; folder. Windows can spread config files everywhere and Linux doesn&apos;t and puts them in these folders depending on if it is systemwide or user based.&lt;/li&gt;
&lt;li&gt;Terminal is needed. Linux try hards always say you can do anything in the GUI and generally don&apos;t use Windows or Mac and don&apos;t know how bad the Linux GUI experience is in comparison. You will need to get comfortable with the terminal. Linux is built for the CLI experience in mind FIRST and the GUI ALWAYS is second or not at all in some cases.&lt;/li&gt;
&lt;li&gt;EVERYTHING can be customized!&lt;/li&gt;
&lt;li&gt;Linux will NOT protect you from yourself. You can do anything you want and break your system.&lt;/li&gt;
&lt;li&gt;Linux FOSS applications are generally less polished, but then again they are FREE!&lt;/li&gt;
&lt;li&gt;Browser-based app alternatives are a way to get around the limitations of FOSS offerings&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;How Programs are Installed&lt;/h4&gt;
&lt;p&gt;The biggest thing a specific distribution gives you is a Package Manager. How it installs programs is something that doesn&apos;t change very much.&lt;/p&gt;
&lt;p&gt;Here are some examples so you don&apos;t go look dumb trying to install packages on a different distribution with a different package manager:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo apt install name&lt;/code&gt; - Debian, Ubuntu, and a TON of Linux distributions use &lt;code&gt;apt&lt;/code&gt; as the package manager.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo pacman -Sy name&lt;/code&gt; - Arch-based also uses &lt;code&gt;yay&lt;/code&gt; or &lt;code&gt;paru&lt;/code&gt; to expand this to include almost any Linux package in existence.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sudo dnf install name&lt;/code&gt; - RHEL-based distros like Fedora use this package manager. It used to be &lt;code&gt;yum&lt;/code&gt; instead, but was changed in recent years to dnf.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are a ton of others for different distros, like &lt;code&gt;zypper&lt;/code&gt; for OpenSUSE or &lt;code&gt;swupd&lt;/code&gt; for Clear Linux, but these are pretty niche and you shouldn&apos;t concern yourself with them.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Packages for ALL Distributions&lt;/em&gt; are made using Flatpak, AppImage, Flatpak, and even installing a secondary package manager like homebrew or nix. Everything I just listed works on all distributions and are containerized for the most part.&lt;/p&gt;
&lt;h4&gt;Typical Distribution&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;Common alternatives in parenthesis&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootloader = GRUB (Systemd-boot)&lt;/li&gt;
&lt;li&gt;Init System = Systemd&lt;/li&gt;
&lt;li&gt;Display Render = Wayland (Xorg - Common on Older Distros)&lt;/li&gt;
&lt;li&gt;Display Manager = GDM, SDDM, or LightDM (This is the Login Manager)&lt;/li&gt;
&lt;li&gt;Desktop Environments = KDE, Gnome, Cinnamon, XFCE, Mate, and LXQT (These have gui tool suite to help with system configuration)&lt;/li&gt;
&lt;li&gt;Window Managers (Desktop Environment Alternative)
&lt;ul&gt;
&lt;li&gt;Wayland Based = Sway and Hyprland (riverwm, dwl, and other are still being developed)&lt;/li&gt;
&lt;li&gt;Xorg = BSPWM, DWM, i3, qTile, XMonad, awesomewm, and many others.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example Configuration&lt;/p&gt;
&lt;p&gt;Ubuntu&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootloader - Grub&lt;/li&gt;
&lt;li&gt;Init System - Systemd&lt;/li&gt;
&lt;li&gt;Display Render - Wayland&lt;/li&gt;
&lt;li&gt;Display Manager - GDM&lt;/li&gt;
&lt;li&gt;Desktop Environment - GNOME&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;First Installation&lt;/h3&gt;
&lt;p&gt;Grab a debian ISO here: &lt;a href=&quot;https://www.debian.org/download&quot;&gt;https://www.debian.org/download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The basic netinst is fine for now. We just want a sample system to build up and learn on.&lt;/p&gt;
&lt;h3&gt;Second Installation&lt;/h3&gt;
&lt;p&gt;Use Arch Linux here: &lt;a href=&quot;https://archlinux.org/download/&quot;&gt;https://archlinux.org/download/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Instead of using a wizard included with Arch, I recommend walking through all the steps @ &lt;a href=&quot;https://wiki.archlinux.org/title/Installation_guide&quot;&gt;https://wiki.archlinux.org/title/Installation_guide&lt;/a&gt; and learning about what goes into the setup process. Arch does a fantastic job of breaking down each step and I highly recommend their wiki as a resource even when NOT using arch.&lt;/p&gt;
&lt;h3&gt;Third Installation&lt;/h3&gt;
&lt;p&gt;Start messing around with window managers and configuring the system from a command line interface (CLI). This will make you more comfortable with Linux as a whole. After this is done, decide which way you enjoy the most.&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/vlN5koqNY5U&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 State of Linux Gaming</title><link>https://christitus.com/the-state-of-linux-gaming/</link><guid isPermaLink="true">https://christitus.com/the-state-of-linux-gaming/</guid><description>&lt;p&gt;SteamOS 3.0 may NEVER get a widespread release. However, what valve is doing and what others in the space are doing are more important.&lt;/p&gt;

&lt;h2&gt;SteamOS never getting general release&lt;/h2&gt;
&lt;p&gt;This is a real possibility after the disaster that was SteamOS 2.0. The problem non-technical people do NOT understand is that Linux is not an everything platform when it comes to gaming. You need to be specific in your hardware and I would NOT install Linux on every piece of hardware I own, because of compatibility issues. Valve realized this with the last release and I doubt they want to support all the different configurations of Linux which is frankly impossible.&lt;/p&gt;
&lt;p&gt;Why is it impossible? Lets walk through a bunch of scenarios to illustrate this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Xorg vs Wayland - Which renderer are they using? The entire linux desktop ecosystem is still split.&lt;/li&gt;
&lt;li&gt;nVidia issues - Tackling the nVidia problems and integrations in Linux is rarely done well, but valve would have to deal with this headache as well. Drivers do NOT work the same way on Linux and are baked in to the kernel instead of tacked on additions like in Windows. Right now, Valve only is working with AMD since their drivers are open source and nVidia&apos;s open source driver is very young and not nearly as good.&lt;/li&gt;
&lt;li&gt;Desktop Environment choices - Each desktop environment has its own configuration and varying levels of customizations. Could you imagine trying to support that? SteamOS right now only runs KDE in desktop mode and SteamOS gaming mode.&lt;/li&gt;
&lt;li&gt;Incompatible Hardware - There is a variety of hardware that does NOT work. Specifically, NEW hardware is a massive problem in Linux. A brand new AMD card usually has a lot of issues on launch day if it works at all. Then there is obscure hardware people use that requires firmware that can also lead to issues.&lt;/li&gt;
&lt;li&gt;Games and Hardware are BUILT with Windows or MacOS in mind. This will ALWAYS mean Linux has to be behind these platforms. Windows will ALWAYS be the leader while the games are built for it and the Hardware will always be tested for it because of this. This isn&apos;t changing anytime soon, but maybe in the distant future.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can expand these issues in to their own sub-categories, but you get the idea. It is NOT in Valves interest to release SteamOS 3.0 for any desktop. Could you imagine walking through your friend on any of the issues I laid out above. Valve also needs to develop support for other launchers like Epic or bundle Heroic Launcher in... which will be a cold day in hell when that happens.&lt;/p&gt;
&lt;h2&gt;SteamOS Future&lt;/h2&gt;
&lt;p&gt;Expanding the hardware support for select handhelds is happening beyond Valve&apos;s product offering. This will be massive for everyone. It increases adoption and gives a reliable experience. The beauty of SteamOS is people do NOT need to know they are in Linux. It offers the plug and play experience that is better than Windows when it works. The marketshare will keep increasing and is becoming something that game makers can NOT ignore. However, the weak spots of Linux are always present, but keep getting better each passing year. The main issues are modding games, non-steam games, and anti-cheat competitive games. These issues I do not think will ever get solved completely or de-throne Windows as the Gaming powerhouse it is.&lt;/p&gt;
&lt;p&gt;It also can NOT be understated that the contributions of Valve to the Linux gaming community are immeasurable with Proton, dealing with publishers, and the general push for overall Linux adoption! This is why we will never see a general release of SteamOS, but it won&apos;t matter as these contributions keep pushing the community forward.&lt;/p&gt;
&lt;h2&gt;SteamOS Alternatives&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Bazzite - This universal blue spin is a lot like SteamOS, but a lot more flexible. It&apos;s team is working hard to implement the things valve will not and never will. Universal launcher support, nVidia support, and many others. While it isn&apos;t a perfect experience you&apos;d have to be woefully ignorant to choose SteamOS over a Bazzite install.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are others mentioned around the web in other youtuber videos like HoloISO (End of Life as of April of 2024), Chimera, WinesapOS (Portable SteamOS), but Bazzite is the standout with its consistency and team behind it. The structure being built in an Atomic system strikes an amazing balance of flexibility and stability that is needed in a desktop system. Check out that video here:&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/0toWysEA3vs&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>Tue, 07 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;SteamOS 3.0 may NEVER get a widespread release. However, what valve is doing and what others in the space are doing are more important.&lt;/p&gt;

&lt;h2&gt;SteamOS never getting general release&lt;/h2&gt;
&lt;p&gt;This is a real possibility after the disaster that was SteamOS 2.0. The problem non-technical people do NOT understand is that Linux is not an everything platform when it comes to gaming. You need to be specific in your hardware and I would NOT install Linux on every piece of hardware I own, because of compatibility issues. Valve realized this with the last release and I doubt they want to support all the different configurations of Linux which is frankly impossible.&lt;/p&gt;
&lt;p&gt;Why is it impossible? Lets walk through a bunch of scenarios to illustrate this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Xorg vs Wayland - Which renderer are they using? The entire linux desktop ecosystem is still split.&lt;/li&gt;
&lt;li&gt;nVidia issues - Tackling the nVidia problems and integrations in Linux is rarely done well, but valve would have to deal with this headache as well. Drivers do NOT work the same way on Linux and are baked in to the kernel instead of tacked on additions like in Windows. Right now, Valve only is working with AMD since their drivers are open source and nVidia&apos;s open source driver is very young and not nearly as good.&lt;/li&gt;
&lt;li&gt;Desktop Environment choices - Each desktop environment has its own configuration and varying levels of customizations. Could you imagine trying to support that? SteamOS right now only runs KDE in desktop mode and SteamOS gaming mode.&lt;/li&gt;
&lt;li&gt;Incompatible Hardware - There is a variety of hardware that does NOT work. Specifically, NEW hardware is a massive problem in Linux. A brand new AMD card usually has a lot of issues on launch day if it works at all. Then there is obscure hardware people use that requires firmware that can also lead to issues.&lt;/li&gt;
&lt;li&gt;Games and Hardware are BUILT with Windows or MacOS in mind. This will ALWAYS mean Linux has to be behind these platforms. Windows will ALWAYS be the leader while the games are built for it and the Hardware will always be tested for it because of this. This isn&apos;t changing anytime soon, but maybe in the distant future.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can expand these issues in to their own sub-categories, but you get the idea. It is NOT in Valves interest to release SteamOS 3.0 for any desktop. Could you imagine walking through your friend on any of the issues I laid out above. Valve also needs to develop support for other launchers like Epic or bundle Heroic Launcher in... which will be a cold day in hell when that happens.&lt;/p&gt;
&lt;h2&gt;SteamOS Future&lt;/h2&gt;
&lt;p&gt;Expanding the hardware support for select handhelds is happening beyond Valve&apos;s product offering. This will be massive for everyone. It increases adoption and gives a reliable experience. The beauty of SteamOS is people do NOT need to know they are in Linux. It offers the plug and play experience that is better than Windows when it works. The marketshare will keep increasing and is becoming something that game makers can NOT ignore. However, the weak spots of Linux are always present, but keep getting better each passing year. The main issues are modding games, non-steam games, and anti-cheat competitive games. These issues I do not think will ever get solved completely or de-throne Windows as the Gaming powerhouse it is.&lt;/p&gt;
&lt;p&gt;It also can NOT be understated that the contributions of Valve to the Linux gaming community are immeasurable with Proton, dealing with publishers, and the general push for overall Linux adoption! This is why we will never see a general release of SteamOS, but it won&apos;t matter as these contributions keep pushing the community forward.&lt;/p&gt;
&lt;h2&gt;SteamOS Alternatives&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Bazzite - This universal blue spin is a lot like SteamOS, but a lot more flexible. It&apos;s team is working hard to implement the things valve will not and never will. Universal launcher support, nVidia support, and many others. While it isn&apos;t a perfect experience you&apos;d have to be woefully ignorant to choose SteamOS over a Bazzite install.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are others mentioned around the web in other youtuber videos like HoloISO (End of Life as of April of 2024), Chimera, WinesapOS (Portable SteamOS), but Bazzite is the standout with its consistency and team behind it. The structure being built in an Atomic system strikes an amazing balance of flexibility and stability that is needed in a desktop system. Check out that video here:&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/0toWysEA3vs&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>Enhanced Linux in Windows</title><link>https://christitus.com/enhanced-linux-in-windows/</link><guid isPermaLink="true">https://christitus.com/enhanced-linux-in-windows/</guid><description>&lt;p&gt;Using WSL is great for a lot of things, but often I find it limiting or quirky bugs that don&apos;t happen on HyperV.&lt;/p&gt;

&lt;h2&gt;What is a Enhanced HyperV Session in Windows?&lt;/h2&gt;
&lt;p&gt;This allows full 3D acceleration, large resolutions, audio passthrough, and shared clipboard. There are many other things that this can do, but these are main benefits. I was using WSLg and constantly found little problems about moving around or compiling taking a long time and other issues.&lt;/p&gt;
&lt;p&gt;The biggest problem with WSL is it isn&apos;t Linux. It feels like a bolted on system that I have a hard time programming in.&lt;/p&gt;
&lt;p&gt;Enter HyperV!&lt;/p&gt;
&lt;p&gt;HyperV with Enhanced Session feels like Linux and it is FAST! I can go full screen and using it like a Linux desktop forgetting I am in Windows. The startup is only a few seconds and a fantastic alternative than doing a dual boot.&lt;/p&gt;
&lt;h2&gt;Enabling Enhanced Session&lt;/h2&gt;
&lt;p&gt;Arch Dependencies inside VM&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yay -S xrdp xorgxrdp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Windows Configuration (PowerShell)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Set-VMhost -EnableEnhancedSessionMode $True
Set-VM -VMName &quot;NameVM&quot; -EnhancedSessionTransportType HvSocket
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configuration Script (install script)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash

#
# This script is for Arch Linux to configure XRDP for enhanced session mode
#
# The configuration is adapted from the Ubuntu 16.04 script.
#

if [ &quot;$(id -u)&quot; -ne 0 ]; then
    echo &apos;This script must be run with root privileges&apos; &amp;gt;&amp;amp;2
    exit 1
fi

# Use Qi to check for exact package name
if ! pacman -Qi xrdp &amp;gt; /dev/null ; then
    echo &apos;xrdp not installed. Run makepkg.sh first to install xrdp.&apos; &amp;gt;&amp;amp;2
    exit 1
fi

# Use Qs to allow xorgxrdp-devel-git
if ! pacman -Qs xorgxrdp &amp;gt; /dev/null ; then
    echo &apos;xorgxrdp not installed. Run makepkg.sh first to install xorgxrdp.&apos; &amp;gt;&amp;amp;2
    exit 1
fi

###############################################################################
# Configure XRDP
#
systemctl enable xrdp
systemctl enable xrdp-sesman

# Configure the installed XRDP ini files.
# use vsock transport.
sed -i_orig -e &apos;s/port=3389/port=vsock:\/\/-1:3389/g&apos; /etc/xrdp/xrdp.ini
# use rdp security.
sed -i_orig -e &apos;s/security_layer=negotiate/security_layer=rdp/g&apos; /etc/xrdp/xrdp.ini
# remove encryption validation.
sed -i_orig -e &apos;s/crypt_level=high/crypt_level=none/g&apos; /etc/xrdp/xrdp.ini
# disable bitmap compression since its local its much faster
sed -i_orig -e &apos;s/bitmap_compression=true/bitmap_compression=false/g&apos; /etc/xrdp/xrdp.ini
#
# sed -n -e &apos;s/max_bpp=32/max_bpp=24/g&apos; /etc/xrdp/xrdp.ini

# use the default lightdm x display
# sed -i_orig -e &apos;s/X11DisplayOffset=10/X11DisplayOffset=0/g&apos; /etc/xrdp/sesman.ini
# rename the redirected drives to &apos;shared-drives&apos;
sed -i_orig -e &apos;s/FuseMountName=thinclient_drives/FuseMountName=shared-drives/g&apos; /etc/xrdp/sesman.ini

# Change the allowed_users
echo &quot;allowed_users=anybody&quot; &amp;gt; /etc/X11/Xwrapper.config


#Ensure hv_sock gets loaded
if [ ! -e /etc/modules-load.d/hv_sock.conf ]; then
 echo &quot;hv_sock&quot; &amp;gt; /etc/modules-load.d/hv_sock.conf
fi

# Configure the policy xrdp session
cat &amp;gt; /etc/polkit-1/rules.d/02-allow-colord.rules &amp;lt;&amp;lt;EOF
polkit.addRule(function(action, subject) {
    if ((action.id == &quot;org.freedesktop.color-manager.create-device&quot; ||
         action.id == &quot;org.freedesktop.color-manager.modify-profile&quot; ||
         action.id == &quot;org.freedesktop.color-manager.delete-device&quot; ||
         action.id == &quot;org.freedesktop.color-manager.create-profile&quot; ||
         action.id == &quot;org.freedesktop.color-manager.modify-profile&quot; ||
         action.id == &quot;org.freedesktop.color-manager.delete-profile&quot;) &amp;amp;&amp;amp;
        subject.isInGroup(&quot;users&quot;))
    {
        return polkit.Result.YES;
    }
});
EOF

# Adapt the xrdp pam config
cat &amp;gt; /etc/pam.d/xrdp-sesman &amp;lt;&amp;lt;EOF
#%PAM-1.0
auth        include     system-remote-login
account     include     system-remote-login
password    include     system-remote-login
session     include     system-remote-login
EOF


###############################################################################
# .xinitrc has to be modified manually.
#
echo &quot;You will have to configure .xinitrc to start your windows manager, see https://wiki.archlinux.org/index.php/Xinit&quot;
echo &quot;Reboot your machine to begin using XRDP.&quot;
echo &quot;Example: nano ~/.xinitrc&quot; and launch your desktop environment or window manager. Enter &quot;exec dwm&quot; to launch dwm. 

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Audio Issues&lt;/h2&gt;
&lt;p&gt;Depending on your audio setup you may run into issues. Currently, pulseaudio-module-xrdp is not working on the AUR for Arch. I have been unsuccessful in getting pipewire working with xrdp.&lt;/p&gt;
&lt;p&gt;Check &lt;a href=&quot;https://github.com/neutrinolabs/pulseaudio-module-xrdp&quot;&gt;https://github.com/neutrinolabs/pulseaudio-module-xrdp&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;Alternatively, you should be able to use pipewire with xrdp at &lt;a href=&quot;https://github.com/neutrinolabs/pipewire-module-xrdp&quot;&gt;https://github.com/neutrinolabs/pipewire-module-xrdp&lt;/a&gt;. However, at the time of this writing it has not seen an update in 9 months. So this method will probably only work with fedora or debian based systems.&lt;/p&gt;
</description><pubDate>Tue, 31 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Using WSL is great for a lot of things, but often I find it limiting or quirky bugs that don&apos;t happen on HyperV.&lt;/p&gt;

&lt;h2&gt;What is a Enhanced HyperV Session in Windows?&lt;/h2&gt;
&lt;p&gt;This allows full 3D acceleration, large resolutions, audio passthrough, and shared clipboard. There are many other things that this can do, but these are main benefits. I was using WSLg and constantly found little problems about moving around or compiling taking a long time and other issues.&lt;/p&gt;
&lt;p&gt;The biggest problem with WSL is it isn&apos;t Linux. It feels like a bolted on system that I have a hard time programming in.&lt;/p&gt;
&lt;p&gt;Enter HyperV!&lt;/p&gt;
&lt;p&gt;HyperV with Enhanced Session feels like Linux and it is FAST! I can go full screen and using it like a Linux desktop forgetting I am in Windows. The startup is only a few seconds and a fantastic alternative than doing a dual boot.&lt;/p&gt;
&lt;h2&gt;Enabling Enhanced Session&lt;/h2&gt;
&lt;p&gt;Arch Dependencies inside VM&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;yay -S xrdp xorgxrdp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Windows Configuration (PowerShell)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Set-VMhost -EnableEnhancedSessionMode $True
Set-VM -VMName &quot;NameVM&quot; -EnhancedSessionTransportType HvSocket
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Configuration Script (install script)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash

#
# This script is for Arch Linux to configure XRDP for enhanced session mode
#
# The configuration is adapted from the Ubuntu 16.04 script.
#

if [ &quot;$(id -u)&quot; -ne 0 ]; then
    echo &apos;This script must be run with root privileges&apos; &amp;gt;&amp;amp;2
    exit 1
fi

# Use Qi to check for exact package name
if ! pacman -Qi xrdp &amp;gt; /dev/null ; then
    echo &apos;xrdp not installed. Run makepkg.sh first to install xrdp.&apos; &amp;gt;&amp;amp;2
    exit 1
fi

# Use Qs to allow xorgxrdp-devel-git
if ! pacman -Qs xorgxrdp &amp;gt; /dev/null ; then
    echo &apos;xorgxrdp not installed. Run makepkg.sh first to install xorgxrdp.&apos; &amp;gt;&amp;amp;2
    exit 1
fi

###############################################################################
# Configure XRDP
#
systemctl enable xrdp
systemctl enable xrdp-sesman

# Configure the installed XRDP ini files.
# use vsock transport.
sed -i_orig -e &apos;s/port=3389/port=vsock:\/\/-1:3389/g&apos; /etc/xrdp/xrdp.ini
# use rdp security.
sed -i_orig -e &apos;s/security_layer=negotiate/security_layer=rdp/g&apos; /etc/xrdp/xrdp.ini
# remove encryption validation.
sed -i_orig -e &apos;s/crypt_level=high/crypt_level=none/g&apos; /etc/xrdp/xrdp.ini
# disable bitmap compression since its local its much faster
sed -i_orig -e &apos;s/bitmap_compression=true/bitmap_compression=false/g&apos; /etc/xrdp/xrdp.ini
#
# sed -n -e &apos;s/max_bpp=32/max_bpp=24/g&apos; /etc/xrdp/xrdp.ini

# use the default lightdm x display
# sed -i_orig -e &apos;s/X11DisplayOffset=10/X11DisplayOffset=0/g&apos; /etc/xrdp/sesman.ini
# rename the redirected drives to &apos;shared-drives&apos;
sed -i_orig -e &apos;s/FuseMountName=thinclient_drives/FuseMountName=shared-drives/g&apos; /etc/xrdp/sesman.ini

# Change the allowed_users
echo &quot;allowed_users=anybody&quot; &amp;gt; /etc/X11/Xwrapper.config


#Ensure hv_sock gets loaded
if [ ! -e /etc/modules-load.d/hv_sock.conf ]; then
 echo &quot;hv_sock&quot; &amp;gt; /etc/modules-load.d/hv_sock.conf
fi

# Configure the policy xrdp session
cat &amp;gt; /etc/polkit-1/rules.d/02-allow-colord.rules &amp;lt;&amp;lt;EOF
polkit.addRule(function(action, subject) {
    if ((action.id == &quot;org.freedesktop.color-manager.create-device&quot; ||
         action.id == &quot;org.freedesktop.color-manager.modify-profile&quot; ||
         action.id == &quot;org.freedesktop.color-manager.delete-device&quot; ||
         action.id == &quot;org.freedesktop.color-manager.create-profile&quot; ||
         action.id == &quot;org.freedesktop.color-manager.modify-profile&quot; ||
         action.id == &quot;org.freedesktop.color-manager.delete-profile&quot;) &amp;amp;&amp;amp;
        subject.isInGroup(&quot;users&quot;))
    {
        return polkit.Result.YES;
    }
});
EOF

# Adapt the xrdp pam config
cat &amp;gt; /etc/pam.d/xrdp-sesman &amp;lt;&amp;lt;EOF
#%PAM-1.0
auth        include     system-remote-login
account     include     system-remote-login
password    include     system-remote-login
session     include     system-remote-login
EOF


###############################################################################
# .xinitrc has to be modified manually.
#
echo &quot;You will have to configure .xinitrc to start your windows manager, see https://wiki.archlinux.org/index.php/Xinit&quot;
echo &quot;Reboot your machine to begin using XRDP.&quot;
echo &quot;Example: nano ~/.xinitrc&quot; and launch your desktop environment or window manager. Enter &quot;exec dwm&quot; to launch dwm. 

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Audio Issues&lt;/h2&gt;
&lt;p&gt;Depending on your audio setup you may run into issues. Currently, pulseaudio-module-xrdp is not working on the AUR for Arch. I have been unsuccessful in getting pipewire working with xrdp.&lt;/p&gt;
&lt;p&gt;Check &lt;a href=&quot;https://github.com/neutrinolabs/pulseaudio-module-xrdp&quot;&gt;https://github.com/neutrinolabs/pulseaudio-module-xrdp&lt;/a&gt; for more information.&lt;/p&gt;
&lt;p&gt;Alternatively, you should be able to use pipewire with xrdp at &lt;a href=&quot;https://github.com/neutrinolabs/pipewire-module-xrdp&quot;&gt;https://github.com/neutrinolabs/pipewire-module-xrdp&lt;/a&gt;. However, at the time of this writing it has not seen an update in 9 months. So this method will probably only work with fedora or debian based systems.&lt;/p&gt;
</content:encoded></item><item><title>Removing SystemD from Linux</title><link>https://christitus.com/removing-systemd/</link><guid isPermaLink="true">https://christitus.com/removing-systemd/</guid><description>&lt;p&gt;Systemd is great for standardization, but it is insanely bloated. Boot times average around 20 seconds when removing it and using a minimal init system will result in a boot time of only a few seconds. This is a guide on switching to OpenRC.&lt;/p&gt;

&lt;h2&gt;What do I lose?&lt;/h2&gt;
&lt;p&gt;Systemd has a LOT of functions and can do the following, but often we swap out to alternatives anyways.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootloader (Grub is the alternative)&lt;/li&gt;
&lt;li&gt;Timers (cronie is still widely used instead)&lt;/li&gt;
&lt;li&gt;Networkd (NetworkManager is almost universally used - same goes for resolved for dns resolution)&lt;/li&gt;
&lt;li&gt;Auto mount (A few distros use this but often &lt;code&gt;/etc/fstab&lt;/code&gt; is used instead)&lt;/li&gt;
&lt;li&gt;journald (This I will miss... it is a fantastic system log tool)&lt;/li&gt;
&lt;li&gt;logind (Alternative is elogind - You NEED a login daemon because without it you have to run Xorg as ROOT which only a crazy person would do.)&lt;/li&gt;
&lt;li&gt;timedated ( universal date and time management)&lt;/li&gt;
&lt;li&gt;udev (device manager and very useful for using rules to manage device without elevation. Ex. Managing backlight on a laptop)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Switch to OpenRC&lt;/h2&gt;
&lt;p&gt;The switch is very easy&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install openrc sysvinit-core
sudo reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After restart process is complete install the following packages to fill in any gaps missing with systemd no longer on the system:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install elogind libpam-elogind orphan-sysvinit-scripts systemctl procps
sudo reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://lecorbeausvault.wordpress.com/2022/02/07/debian-switching-init-system-easily-openrc-sysvinit-runit/&quot;&gt;https://lecorbeausvault.wordpress.com/2022/02/07/debian-switching-init-system-easily-openrc-sysvinit-runit/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Prevent Systemd from reinstalling&lt;/h2&gt;
&lt;p&gt;Create &lt;code&gt;/etc/apt/preferences.d/systemd&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Package: systemd
Pin: release *
Pin-Priority: -1
 
Package: *systemd*
Pin: release *
Pin-Priority: -1
 
Package: systemd:i386
Pin: release *
Pin-Priority: -1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;APT-Mark holds&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-mark hold libsystemd0
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Systemd vs OpenRC Commands&lt;/h2&gt;
&lt;p&gt;This is a comparison of the different init systems and run commands.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://wiki.archlinux.org/title/OpenRC#Usage&quot;&gt;https://wiki.archlinux.org/title/OpenRC#Usage&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SystemD&lt;/th&gt;
&lt;th&gt;SysVinit&lt;/th&gt;
&lt;th&gt;OpenRC&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;systemctl list-units&lt;/td&gt;
&lt;td&gt;rc.d list&lt;/td&gt;
&lt;td&gt;rc-status&lt;/td&gt;
&lt;td&gt;List running services status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemctl --failed&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;rc-status --crashed&lt;/td&gt;
&lt;td&gt;Check failed services&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemctl --all&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;rc-update -v show&lt;/td&gt;
&lt;td&gt;Display all available services.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemctl (start, stop, restart, status) daemon.service&lt;/td&gt;
&lt;td&gt;rc.d (start, stop, restart) daemon&lt;/td&gt;
&lt;td&gt;rc-service daemon (start, stop, restart, status)&lt;/td&gt;
&lt;td&gt;Change service state.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemctl (enable, disable) daemon.service&lt;/td&gt;
&lt;td&gt;chkconfig daemon (on, off)&lt;/td&gt;
&lt;td&gt;rc-update (add, del) daemon&lt;/td&gt;
&lt;td&gt;Turn service on or off.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemctl daemon-reload&lt;/td&gt;
&lt;td&gt;chkconfig daemon --add&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Create or modify configuration.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Creating an OpenRC Service/Daemon&lt;/h2&gt;
&lt;p&gt;Official Manual page: &lt;a href=&quot;https://github.com/OpenRC/openrc/blob/master/service-script-guide.md&quot;&gt;https://github.com/OpenRC/openrc/blob/master/service-script-guide.md&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Create a service script here: &lt;code&gt;/etc/init.d/mydaemon&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/sbin/openrc-run

command=&quot;/usr/sbin/mydaemon&quot;
command_args=&quot;-c /etc/mydaemon.conf&quot;
command_user=&quot;user:group&quot;
description=&quot;super essential service&quot;
pidfile=&quot;/var/run/mydaemon.pid&quot;

depend() {
  need localmount
  use logger
}

checkconfig() {
  ...
}

start_pre() {
  # Prevent of double check
  if [ &quot;${RC_CMD}&quot; != &quot;restart&quot; ] ; then
    checkconfig || return $?
  fi
}

stop_pre() {
  if [ &quot;${RC_CMD}&quot; = &quot;restart&quot; ] ; then
    checkconfig || return $?
  fi
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;No Video Planned&lt;/h2&gt;
&lt;p&gt;Let me know below if you would like a video on this topic.&lt;/p&gt;
</description><pubDate>Tue, 31 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Systemd is great for standardization, but it is insanely bloated. Boot times average around 20 seconds when removing it and using a minimal init system will result in a boot time of only a few seconds. This is a guide on switching to OpenRC.&lt;/p&gt;

&lt;h2&gt;What do I lose?&lt;/h2&gt;
&lt;p&gt;Systemd has a LOT of functions and can do the following, but often we swap out to alternatives anyways.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootloader (Grub is the alternative)&lt;/li&gt;
&lt;li&gt;Timers (cronie is still widely used instead)&lt;/li&gt;
&lt;li&gt;Networkd (NetworkManager is almost universally used - same goes for resolved for dns resolution)&lt;/li&gt;
&lt;li&gt;Auto mount (A few distros use this but often &lt;code&gt;/etc/fstab&lt;/code&gt; is used instead)&lt;/li&gt;
&lt;li&gt;journald (This I will miss... it is a fantastic system log tool)&lt;/li&gt;
&lt;li&gt;logind (Alternative is elogind - You NEED a login daemon because without it you have to run Xorg as ROOT which only a crazy person would do.)&lt;/li&gt;
&lt;li&gt;timedated ( universal date and time management)&lt;/li&gt;
&lt;li&gt;udev (device manager and very useful for using rules to manage device without elevation. Ex. Managing backlight on a laptop)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Switch to OpenRC&lt;/h2&gt;
&lt;p&gt;The switch is very easy&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install openrc sysvinit-core
sudo reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After restart process is complete install the following packages to fill in any gaps missing with systemd no longer on the system:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install elogind libpam-elogind orphan-sysvinit-scripts systemctl procps
sudo reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://lecorbeausvault.wordpress.com/2022/02/07/debian-switching-init-system-easily-openrc-sysvinit-runit/&quot;&gt;https://lecorbeausvault.wordpress.com/2022/02/07/debian-switching-init-system-easily-openrc-sysvinit-runit/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Prevent Systemd from reinstalling&lt;/h2&gt;
&lt;p&gt;Create &lt;code&gt;/etc/apt/preferences.d/systemd&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Package: systemd
Pin: release *
Pin-Priority: -1
 
Package: *systemd*
Pin: release *
Pin-Priority: -1
 
Package: systemd:i386
Pin: release *
Pin-Priority: -1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;APT-Mark holds&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-mark hold libsystemd0
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Systemd vs OpenRC Commands&lt;/h2&gt;
&lt;p&gt;This is a comparison of the different init systems and run commands.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://wiki.archlinux.org/title/OpenRC#Usage&quot;&gt;https://wiki.archlinux.org/title/OpenRC#Usage&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;SystemD&lt;/th&gt;
&lt;th&gt;SysVinit&lt;/th&gt;
&lt;th&gt;OpenRC&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;systemctl list-units&lt;/td&gt;
&lt;td&gt;rc.d list&lt;/td&gt;
&lt;td&gt;rc-status&lt;/td&gt;
&lt;td&gt;List running services status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemctl --failed&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;rc-status --crashed&lt;/td&gt;
&lt;td&gt;Check failed services&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemctl --all&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;rc-update -v show&lt;/td&gt;
&lt;td&gt;Display all available services.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemctl (start, stop, restart, status) daemon.service&lt;/td&gt;
&lt;td&gt;rc.d (start, stop, restart) daemon&lt;/td&gt;
&lt;td&gt;rc-service daemon (start, stop, restart, status)&lt;/td&gt;
&lt;td&gt;Change service state.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemctl (enable, disable) daemon.service&lt;/td&gt;
&lt;td&gt;chkconfig daemon (on, off)&lt;/td&gt;
&lt;td&gt;rc-update (add, del) daemon&lt;/td&gt;
&lt;td&gt;Turn service on or off.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;systemctl daemon-reload&lt;/td&gt;
&lt;td&gt;chkconfig daemon --add&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Create or modify configuration.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Creating an OpenRC Service/Daemon&lt;/h2&gt;
&lt;p&gt;Official Manual page: &lt;a href=&quot;https://github.com/OpenRC/openrc/blob/master/service-script-guide.md&quot;&gt;https://github.com/OpenRC/openrc/blob/master/service-script-guide.md&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Create a service script here: &lt;code&gt;/etc/init.d/mydaemon&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/sbin/openrc-run

command=&quot;/usr/sbin/mydaemon&quot;
command_args=&quot;-c /etc/mydaemon.conf&quot;
command_user=&quot;user:group&quot;
description=&quot;super essential service&quot;
pidfile=&quot;/var/run/mydaemon.pid&quot;

depend() {
  need localmount
  use logger
}

checkconfig() {
  ...
}

start_pre() {
  # Prevent of double check
  if [ &quot;${RC_CMD}&quot; != &quot;restart&quot; ] ; then
    checkconfig || return $?
  fi
}

stop_pre() {
  if [ &quot;${RC_CMD}&quot; = &quot;restart&quot; ] ; then
    checkconfig || return $?
  fi
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;No Video Planned&lt;/h2&gt;
&lt;p&gt;Let me know below if you would like a video on this topic.&lt;/p&gt;
</content:encoded></item><item><title>Home Theater PC</title><link>https://christitus.com/home-theater-pc/</link><guid isPermaLink="true">https://christitus.com/home-theater-pc/</guid><description>&lt;p&gt;Here are the steps and pros/cons of using a Home Theater PC (HTPC) for your home entertainment system.&lt;/p&gt;

&lt;h2&gt;The System&lt;/h2&gt;
&lt;p&gt;I&apos;m using a Mini PC from Beelink (model SER8) with an AMD Ryzen 7 8845U processor, 32GB of RAM, and a 1TB NVMe SSD. It has a built-in AMD 780M GPU and runs Windows 11 Pro.&lt;/p&gt;
&lt;p&gt;No external GPU is needed for this system, as it&apos;s powerful enough to handle 4K video playback and light gaming. For some this is sufficient as a main machine, but for me, I want to use this system for some couch gaming.&lt;/p&gt;
&lt;h2&gt;The Setup&lt;/h2&gt;
&lt;p&gt;Out of the box these mini PC systems are configured in a balanced mode, which is fine for most users. However, I wanted to tweak the system to get the most out of it for my use case. I set the power plan to high performance, disabled the sleep mode, and set the display to never turn off. I also modified bios settings to always run at max power.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/home-theater-pc/bios.webp&quot; alt=&quot;Bios&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Other Tweaks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chris Titus Tech&apos;s Windows Utility - Standard Tweaks applied - &lt;a href=&quot;https://github.com/christitustech/winutil&quot;&gt;GitHub Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tweaked resolution with &lt;a href=&quot;https://www.monitortests.com/forum/Thread-Custom-Resolution-Utility-CRU&quot;&gt;Custom Resolution Utility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Resolution set to 1080p for gaming (Note: If you have performance issues, you can lower the resolution to 720p)&lt;/li&gt;
&lt;li&gt;Installed &lt;a href=&quot;https://www.amd.com/en/technologies/radeon-software&quot;&gt;Radeon Software&lt;/a&gt; for GPU settings&lt;/li&gt;
&lt;li&gt;Steam Installed and Set to Big Picture Mode on Startup (Controller used for all gaming)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Performance&lt;/h2&gt;
&lt;p&gt;I tested this out on stream with various games and it performed well. I was able to match the advertised FPS per the manufacturer&apos;s website.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/home-theater-pc/game-fps.webp&quot; alt=&quot;Game Fps&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Livestream Benchmarks&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/CcN6dFQ-8Cs&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;IO Ports for Beelink SER8&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/home-theater-pc/io.webp&quot; alt=&quot;Io&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Pros and Cons&lt;/h2&gt;
&lt;p&gt;The pros of this type of system is portability, speed, and power consumption. The cons are the lack of upgradability and the need for an external GPU for more demanding games. Also, Don&apos;t expect above 60 FPS on modern AAA games.&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/XiB5mYDkWmA&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, 26 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Here are the steps and pros/cons of using a Home Theater PC (HTPC) for your home entertainment system.&lt;/p&gt;

&lt;h2&gt;The System&lt;/h2&gt;
&lt;p&gt;I&apos;m using a Mini PC from Beelink (model SER8) with an AMD Ryzen 7 8845U processor, 32GB of RAM, and a 1TB NVMe SSD. It has a built-in AMD 780M GPU and runs Windows 11 Pro.&lt;/p&gt;
&lt;p&gt;No external GPU is needed for this system, as it&apos;s powerful enough to handle 4K video playback and light gaming. For some this is sufficient as a main machine, but for me, I want to use this system for some couch gaming.&lt;/p&gt;
&lt;h2&gt;The Setup&lt;/h2&gt;
&lt;p&gt;Out of the box these mini PC systems are configured in a balanced mode, which is fine for most users. However, I wanted to tweak the system to get the most out of it for my use case. I set the power plan to high performance, disabled the sleep mode, and set the display to never turn off. I also modified bios settings to always run at max power.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/home-theater-pc/bios.webp&quot; alt=&quot;Bios&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Other Tweaks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chris Titus Tech&apos;s Windows Utility - Standard Tweaks applied - &lt;a href=&quot;https://github.com/christitustech/winutil&quot;&gt;GitHub Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tweaked resolution with &lt;a href=&quot;https://www.monitortests.com/forum/Thread-Custom-Resolution-Utility-CRU&quot;&gt;Custom Resolution Utility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Resolution set to 1080p for gaming (Note: If you have performance issues, you can lower the resolution to 720p)&lt;/li&gt;
&lt;li&gt;Installed &lt;a href=&quot;https://www.amd.com/en/technologies/radeon-software&quot;&gt;Radeon Software&lt;/a&gt; for GPU settings&lt;/li&gt;
&lt;li&gt;Steam Installed and Set to Big Picture Mode on Startup (Controller used for all gaming)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Performance&lt;/h2&gt;
&lt;p&gt;I tested this out on stream with various games and it performed well. I was able to match the advertised FPS per the manufacturer&apos;s website.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/home-theater-pc/game-fps.webp&quot; alt=&quot;Game Fps&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Livestream Benchmarks&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/CcN6dFQ-8Cs&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;IO Ports for Beelink SER8&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/home-theater-pc/io.webp&quot; alt=&quot;Io&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Pros and Cons&lt;/h2&gt;
&lt;p&gt;The pros of this type of system is portability, speed, and power consumption. The cons are the lack of upgradability and the need for an external GPU for more demanding games. Also, Don&apos;t expect above 60 FPS on modern AAA games.&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/XiB5mYDkWmA&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 You NEED to Contribute to Open Source</title><link>https://christitus.com/why-you-NEED-to-contribute-to-open-source/</link><guid isPermaLink="true">https://christitus.com/why-you-NEED-to-contribute-to-open-source/</guid><description>&lt;p&gt;There is a video called &lt;a href=&quot;https://www.youtube.com/watch?v=5nY_cy8zcO4&quot;&gt;Don&apos;t Contribute to Open Source&lt;/a&gt; by Theo t3 and most people don&apos;t understand its purpose or didn&apos;t watch the entire video.&lt;/p&gt;

&lt;h2&gt;The Video Problem&lt;/h2&gt;
&lt;p&gt;The problem wasn&apos;t the video itself but the title. Only 30-40% of people watch a video all the way through AND an even higher percentage of those people do NOT understand GitHub.&lt;/p&gt;
&lt;p&gt;So the takeaway most took from the video is NOT to contribute to open source projects. When the intent of the video was to NOT make needless Pull Requests to projects and bog down Open Source Maintainers.&lt;/p&gt;
&lt;h2&gt;How to contribute to Open Source&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Start with Issues and capturing bugs in software. This helps you understand the issues with using the given project.&lt;/li&gt;
&lt;li&gt;Develop a fix for the issue and submit a pull request&lt;/li&gt;
&lt;li&gt;Wait for the project maintainer to approve and merge your PR.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Pull Request Etiquette&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Do NOT make massive changes. Batching tons of fixes into one PR is a BAD idea. Fix one thing and submit it for the feature you are working on. Multiple features = Multiple Pull Requests.&lt;/li&gt;
&lt;li&gt;Do NOT make massive formatting changes. Using an extension like prettier and changing every line in a code is a good way to get banned from the project.&lt;/li&gt;
&lt;li&gt;If it is a complex feature pull request. Consider making multiple commits in your PR. Example: Fixing error checking commit, new function commit, etc. The idea is to make it easier to read what is happening in the Pull request. Breaking it up in to multiple commits helps the maintainer understand what your LARGE PR is doing. Again, if it starts effecting multiple features... Consider breaking it in to two or more pull requests.&lt;/li&gt;
&lt;li&gt;Check project documentation for branch submissions. Some projects do not want you to commit to main. They might have a beta or test branch they want submissions to go to. Be careful on which branch you are using.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What if you are NOT a Developer&lt;/h2&gt;
&lt;p&gt;Learning to submit issues properly on Github is a tremendous help. As someone that maintains one of the biggest powershell scripts in the world, most issues are poorly presented or documented. Instead of making an issue that says &quot;It don&apos;t work!&quot;, do the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Document the Steps you take.&lt;/li&gt;
&lt;li&gt;Screenshot the error.&lt;/li&gt;
&lt;li&gt;Establish what you EXPECT it to do.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Do not do a massive text dump! Instead use the attach button if you are uploading a large log file.  As a general rule of thumb, if it more than 15-20 lines long... It should be an attachment so it doesn&apos;t clutter up the issue thread.&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/JF8F7uaGfV8&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 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There is a video called &lt;a href=&quot;https://www.youtube.com/watch?v=5nY_cy8zcO4&quot;&gt;Don&apos;t Contribute to Open Source&lt;/a&gt; by Theo t3 and most people don&apos;t understand its purpose or didn&apos;t watch the entire video.&lt;/p&gt;

&lt;h2&gt;The Video Problem&lt;/h2&gt;
&lt;p&gt;The problem wasn&apos;t the video itself but the title. Only 30-40% of people watch a video all the way through AND an even higher percentage of those people do NOT understand GitHub.&lt;/p&gt;
&lt;p&gt;So the takeaway most took from the video is NOT to contribute to open source projects. When the intent of the video was to NOT make needless Pull Requests to projects and bog down Open Source Maintainers.&lt;/p&gt;
&lt;h2&gt;How to contribute to Open Source&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Start with Issues and capturing bugs in software. This helps you understand the issues with using the given project.&lt;/li&gt;
&lt;li&gt;Develop a fix for the issue and submit a pull request&lt;/li&gt;
&lt;li&gt;Wait for the project maintainer to approve and merge your PR.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Pull Request Etiquette&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Do NOT make massive changes. Batching tons of fixes into one PR is a BAD idea. Fix one thing and submit it for the feature you are working on. Multiple features = Multiple Pull Requests.&lt;/li&gt;
&lt;li&gt;Do NOT make massive formatting changes. Using an extension like prettier and changing every line in a code is a good way to get banned from the project.&lt;/li&gt;
&lt;li&gt;If it is a complex feature pull request. Consider making multiple commits in your PR. Example: Fixing error checking commit, new function commit, etc. The idea is to make it easier to read what is happening in the Pull request. Breaking it up in to multiple commits helps the maintainer understand what your LARGE PR is doing. Again, if it starts effecting multiple features... Consider breaking it in to two or more pull requests.&lt;/li&gt;
&lt;li&gt;Check project documentation for branch submissions. Some projects do not want you to commit to main. They might have a beta or test branch they want submissions to go to. Be careful on which branch you are using.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What if you are NOT a Developer&lt;/h2&gt;
&lt;p&gt;Learning to submit issues properly on Github is a tremendous help. As someone that maintains one of the biggest powershell scripts in the world, most issues are poorly presented or documented. Instead of making an issue that says &quot;It don&apos;t work!&quot;, do the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Document the Steps you take.&lt;/li&gt;
&lt;li&gt;Screenshot the error.&lt;/li&gt;
&lt;li&gt;Establish what you EXPECT it to do.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Do not do a massive text dump! Instead use the attach button if you are uploading a large log file.  As a general rule of thumb, if it more than 15-20 lines long... It should be an attachment so it doesn&apos;t clutter up the issue thread.&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/JF8F7uaGfV8&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>My Problems With Linux</title><link>https://christitus.com/my-problems-with-linux/</link><guid isPermaLink="true">https://christitus.com/my-problems-with-linux/</guid><description>&lt;p&gt;Here are my biggest problems with Linux Desktop and How I fixed them.&lt;/p&gt;

&lt;h2&gt;Breaking Linux&lt;/h2&gt;
&lt;p&gt;You know what every new power user does when they come to Linux Desktop? They Break it!&lt;/p&gt;
&lt;p&gt;Seriously, they want to tinker and change things and end up blindly following some guide online and breaking their system because they don&apos;t understand it. They expect it to work like Windows and it does NOT!&lt;/p&gt;
&lt;p&gt;My fix to this is make everything as simple as possible.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;My Desktop Environment? Don&apos;t have one... I just use DWM.&lt;/li&gt;
&lt;li&gt;The Display Renderer? XOrg... its ancient, but it just works.&lt;/li&gt;
&lt;li&gt;Audio Problems? Use Alsa with Pulse. No pipewire.&lt;/li&gt;
&lt;li&gt;Video Card issues? I use Nvidia 4070 with DKMS modules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;ve been on the bleeding edge of Linux for years using Wayland, Pipewire, the new KDE, or other things that were released in the past year or two. What I&apos;ve found is I have more problems when I do that. They work for some, but I want to show where they DO NOT and WHY I do things this way.&lt;/p&gt;
&lt;h3&gt;Desktop Environments&lt;/h3&gt;
&lt;p&gt;Using KDE or Gnome is great for a new user as they have all the tools and system panels that are needed to configure a system just like Windows or Mac. The problem? These are small teams and often are more buggy than Windows or Mac. WHAT!?! Linux more buggy than Windows! Blasphemy! No, just desktop environments are, because they can&apos;t program for all the different configurations that exist and can lead to some undesired results. The older version of KDE 5 can be very reliable, but if you are constantly updating and on the latest version... I&apos;ve had nothing but problems. What Problems? Flickering Screen. Failed Boot from bad cache files in plasmashell from KDE 5 when an upgrade to 6 happened. Gnome? Extensions are manage through your web browser and when it updates the extensions break. Do I need to say more?&lt;/p&gt;
&lt;p&gt;My fix for this? Use a Window Manager&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Everything is done in terminal and coded to work one way&lt;/li&gt;
&lt;li&gt;No reliance on any tool for configuration&lt;/li&gt;
&lt;li&gt;It only manages the windows on the screen and far less things can break&lt;/li&gt;
&lt;li&gt;Never Updates or changes unless you want it to&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Display Rendering&lt;/h3&gt;
&lt;p&gt;All the cool kids in Linux use Wayland. Fedora users are forced to use Wayland in the next release. Wayland works great for &lt;em&gt;most&lt;/em&gt; AMD Cards, but can be hit and miss on nVidia. Most software now works on it... except for Synergy, barrier, or input leap &lt;em&gt;small exception for patched gnome users&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;My Fix for these problems? Use Xorg&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Its old, but everything already works on it.&lt;/li&gt;
&lt;li&gt;I&apos;m a boomer and don&apos;t care about HDR or VRR and all the new hotness. Just give me 60hz at 1080p and I&apos;m good. High resolution monitors at 4k... not for me.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Audio&lt;/h3&gt;
&lt;p&gt;Audio in Linux is strange and has multiple configuration points. I think it is Linux greatest weakness. Pipewire has come a long way to fix some of the audio, but it still sucks to configure properly. Often it gets confused with too many inputs or a program defaults to use alsa instead of pipewire or pulseaudio just stops working out of nowhere.&lt;/p&gt;
&lt;p&gt;My Fix? Use Alsa and strip out all the complexity&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remove all extra inputs/outputs you do NOT use. &lt;code&gt;pavucontrol&lt;/code&gt; is a GUI tool to disable all the extra.&lt;/li&gt;
&lt;li&gt;Blacklist the cards using &lt;code&gt;cat /proc/asound/modules&lt;/code&gt; to find the modules you use and blacklist the ones you don&apos;t.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;nano /etc/modprobe.d/alsa-blacklist.conf
blacklist snd_hda_intel
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: to get a better description of the modules use&lt;/em&gt; &lt;code&gt;cat /proc/asound/cards&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pulseaudio broken? delete the entire &lt;code&gt;~/.config/pulse/&lt;/code&gt; folder. Restart pulse using:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;pulseaudio -k
pulseaudio --start
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Davinci Resolve Audio Issues?&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Use Opus for recording audio or transcode from AAC. &lt;em&gt;Note: Opus is better quality than AAC&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Do NOT Use Pipewire! Resolve hasn&apos;t caught up yet. Install &lt;code&gt;pulseaudio&lt;/code&gt; and &lt;code&gt;pulseaudio-alsa&lt;/code&gt; packages using your package manager. Remove any pipewire packages.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These are just a few workarounds and the method to my madness why I choose certain things.&lt;/p&gt;
&lt;h3&gt;Switched to nVidia in 2024&lt;/h3&gt;
&lt;p&gt;I have used AMD GPUs almost exclusively in Linux for the past 5 years. They generally just worked, but the 7000 series has been problematic and caused several issues for me. Helldivers 2 didn&apos;t work, my 7800XT card would never get utilized past 40-50% on ANY Distribution I tried, and compatibility was an issue with Resolve on Linux not liking AMD and openncl. After loading up a new nVidia 4070 Super with nvidia-dkms and linux-headers everything worked right away. All the issues I had melted away.&lt;/p&gt;
&lt;p&gt;I will always use what is best for my needs. Nvidia is now the card I choose on my Linux install, because I don&apos;t have near the issues compared to the 7800XT.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Everything in its current configuration works better than Windows or Mac and I absolutely love my Linux installation. However, it did NOT start out that way. Don&apos;t listen to people saying you have to do things THIS way or use THIS package! All of my options I picked suit my use case and MY NEEDS! It may not suit yours and I wanted to share my experience as others online make it seem black and white when it is NOT!&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/tcQRVOMGXrk&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>Tue, 04 Jun 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Here are my biggest problems with Linux Desktop and How I fixed them.&lt;/p&gt;

&lt;h2&gt;Breaking Linux&lt;/h2&gt;
&lt;p&gt;You know what every new power user does when they come to Linux Desktop? They Break it!&lt;/p&gt;
&lt;p&gt;Seriously, they want to tinker and change things and end up blindly following some guide online and breaking their system because they don&apos;t understand it. They expect it to work like Windows and it does NOT!&lt;/p&gt;
&lt;p&gt;My fix to this is make everything as simple as possible.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;My Desktop Environment? Don&apos;t have one... I just use DWM.&lt;/li&gt;
&lt;li&gt;The Display Renderer? XOrg... its ancient, but it just works.&lt;/li&gt;
&lt;li&gt;Audio Problems? Use Alsa with Pulse. No pipewire.&lt;/li&gt;
&lt;li&gt;Video Card issues? I use Nvidia 4070 with DKMS modules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;ve been on the bleeding edge of Linux for years using Wayland, Pipewire, the new KDE, or other things that were released in the past year or two. What I&apos;ve found is I have more problems when I do that. They work for some, but I want to show where they DO NOT and WHY I do things this way.&lt;/p&gt;
&lt;h3&gt;Desktop Environments&lt;/h3&gt;
&lt;p&gt;Using KDE or Gnome is great for a new user as they have all the tools and system panels that are needed to configure a system just like Windows or Mac. The problem? These are small teams and often are more buggy than Windows or Mac. WHAT!?! Linux more buggy than Windows! Blasphemy! No, just desktop environments are, because they can&apos;t program for all the different configurations that exist and can lead to some undesired results. The older version of KDE 5 can be very reliable, but if you are constantly updating and on the latest version... I&apos;ve had nothing but problems. What Problems? Flickering Screen. Failed Boot from bad cache files in plasmashell from KDE 5 when an upgrade to 6 happened. Gnome? Extensions are manage through your web browser and when it updates the extensions break. Do I need to say more?&lt;/p&gt;
&lt;p&gt;My fix for this? Use a Window Manager&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Everything is done in terminal and coded to work one way&lt;/li&gt;
&lt;li&gt;No reliance on any tool for configuration&lt;/li&gt;
&lt;li&gt;It only manages the windows on the screen and far less things can break&lt;/li&gt;
&lt;li&gt;Never Updates or changes unless you want it to&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Display Rendering&lt;/h3&gt;
&lt;p&gt;All the cool kids in Linux use Wayland. Fedora users are forced to use Wayland in the next release. Wayland works great for &lt;em&gt;most&lt;/em&gt; AMD Cards, but can be hit and miss on nVidia. Most software now works on it... except for Synergy, barrier, or input leap &lt;em&gt;small exception for patched gnome users&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;My Fix for these problems? Use Xorg&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Its old, but everything already works on it.&lt;/li&gt;
&lt;li&gt;I&apos;m a boomer and don&apos;t care about HDR or VRR and all the new hotness. Just give me 60hz at 1080p and I&apos;m good. High resolution monitors at 4k... not for me.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Audio&lt;/h3&gt;
&lt;p&gt;Audio in Linux is strange and has multiple configuration points. I think it is Linux greatest weakness. Pipewire has come a long way to fix some of the audio, but it still sucks to configure properly. Often it gets confused with too many inputs or a program defaults to use alsa instead of pipewire or pulseaudio just stops working out of nowhere.&lt;/p&gt;
&lt;p&gt;My Fix? Use Alsa and strip out all the complexity&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remove all extra inputs/outputs you do NOT use. &lt;code&gt;pavucontrol&lt;/code&gt; is a GUI tool to disable all the extra.&lt;/li&gt;
&lt;li&gt;Blacklist the cards using &lt;code&gt;cat /proc/asound/modules&lt;/code&gt; to find the modules you use and blacklist the ones you don&apos;t.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;nano /etc/modprobe.d/alsa-blacklist.conf
blacklist snd_hda_intel
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: to get a better description of the modules use&lt;/em&gt; &lt;code&gt;cat /proc/asound/cards&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pulseaudio broken? delete the entire &lt;code&gt;~/.config/pulse/&lt;/code&gt; folder. Restart pulse using:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;pulseaudio -k
pulseaudio --start
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Davinci Resolve Audio Issues?&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Use Opus for recording audio or transcode from AAC. &lt;em&gt;Note: Opus is better quality than AAC&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Do NOT Use Pipewire! Resolve hasn&apos;t caught up yet. Install &lt;code&gt;pulseaudio&lt;/code&gt; and &lt;code&gt;pulseaudio-alsa&lt;/code&gt; packages using your package manager. Remove any pipewire packages.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These are just a few workarounds and the method to my madness why I choose certain things.&lt;/p&gt;
&lt;h3&gt;Switched to nVidia in 2024&lt;/h3&gt;
&lt;p&gt;I have used AMD GPUs almost exclusively in Linux for the past 5 years. They generally just worked, but the 7000 series has been problematic and caused several issues for me. Helldivers 2 didn&apos;t work, my 7800XT card would never get utilized past 40-50% on ANY Distribution I tried, and compatibility was an issue with Resolve on Linux not liking AMD and openncl. After loading up a new nVidia 4070 Super with nvidia-dkms and linux-headers everything worked right away. All the issues I had melted away.&lt;/p&gt;
&lt;p&gt;I will always use what is best for my needs. Nvidia is now the card I choose on my Linux install, because I don&apos;t have near the issues compared to the 7800XT.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Everything in its current configuration works better than Windows or Mac and I absolutely love my Linux installation. However, it did NOT start out that way. Don&apos;t listen to people saying you have to do things THIS way or use THIS package! All of my options I picked suit my use case and MY NEEDS! It may not suit yours and I wanted to share my experience as others online make it seem black and white when it is NOT!&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/tcQRVOMGXrk&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>Ultra BASH Prompt</title><link>https://christitus.com/mybash/</link><guid isPermaLink="true">https://christitus.com/mybash/</guid><description>&lt;p&gt;The &lt;code&gt;.bashrc&lt;/code&gt; file is a script that runs every time a new terminal session is started in Unix-like operating systems. It is used to configure the shell session, set up aliases, define functions, and more, making the terminal easier to use and more powerful. Below is a summary of the key sections and functionalities defined in the provided &lt;code&gt;.bashrc&lt;/code&gt; file.&lt;/p&gt;

&lt;h2&gt;Setup&lt;/h2&gt;
&lt;p&gt;This sets up mybash for you. It will backup your current bashrc if you already have one.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ~/build
cd ~/build
git clone https://github.com/christitustech/mybash
cd mybash
./setup.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Aliases and Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aliases&lt;/strong&gt;: Shortcuts for common commands are set up to enhance productivity. For example, &lt;code&gt;alias cp=&apos;cp -i&apos;&lt;/code&gt; makes the &lt;code&gt;cp&lt;/code&gt; command interactive, asking for confirmation before overwriting files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functions&lt;/strong&gt;: Custom functions for complex operations like &lt;code&gt;extract()&lt;/code&gt; for extracting various archive types, and &lt;code&gt;cpp()&lt;/code&gt; for copying files with a progress bar.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Prompt Customization and History Management&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prompt Command&lt;/strong&gt;: The &lt;code&gt;PROMPT_COMMAND&lt;/code&gt; variable is set to automatically save the command history after each command.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;History Control&lt;/strong&gt;: Settings to manage the size of the history file and how duplicates are handled.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;System-Specific Aliases and Settings&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Editor Settings&lt;/strong&gt;: Sets &lt;code&gt;nvim&lt;/code&gt; (NeoVim) as the default editor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conditional Aliases&lt;/strong&gt;: Depending on the system type (like Fedora), it sets specific aliases, e.g., replacing &lt;code&gt;cat&lt;/code&gt; with &lt;code&gt;bat&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Enhancements and Utilities&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Color and Formatting&lt;/strong&gt;: Enhancements for command output readability using colors and formatting for tools like &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, and &lt;code&gt;man&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Navigation Shortcuts&lt;/strong&gt;: Aliases to simplify directory navigation, e.g., &lt;code&gt;alias ..=&apos;cd ..&apos;&lt;/code&gt; to go up one directory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safety Features&lt;/strong&gt;: Aliases for safer file operations, like using &lt;code&gt;trash&lt;/code&gt; instead of &lt;code&gt;rm&lt;/code&gt; for deleting files, to prevent accidental data loss.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensive Zoxide support&lt;/strong&gt;: Easily navigate with &lt;code&gt;z&lt;/code&gt;, &lt;code&gt;zi&lt;/code&gt;, or pressing Ctrl+f to launch zi to see frequently used navigation directories.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Advanced Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System Information&lt;/strong&gt;: Functions to display system information like &lt;code&gt;distribution()&lt;/code&gt; to identify the Linux distribution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Networking Utilities&lt;/strong&gt;: Tools to check internal and external IP addresses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Monitoring&lt;/strong&gt;: Commands to monitor system resources like disk usage and open ports.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Installation and Configuration Helpers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auto-Install&lt;/strong&gt;: A function &lt;code&gt;install_bashrc_support()&lt;/code&gt; to automatically install necessary utilities based on the system type.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Editors&lt;/strong&gt;: Functions to edit important configuration files directly, e.g., &lt;code&gt;apacheconfig()&lt;/code&gt; for Apache server configurations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;This &lt;code&gt;.bashrc&lt;/code&gt; file is a comprehensive setup that not only enhances the shell experience with useful aliases and functions but also provides system-specific configurations and safety features to cater to different user needs and system types. It is designed to make the terminal more user-friendly, efficient, and powerful for an average user.&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/0phdCAFFicY&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, 18 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The &lt;code&gt;.bashrc&lt;/code&gt; file is a script that runs every time a new terminal session is started in Unix-like operating systems. It is used to configure the shell session, set up aliases, define functions, and more, making the terminal easier to use and more powerful. Below is a summary of the key sections and functionalities defined in the provided &lt;code&gt;.bashrc&lt;/code&gt; file.&lt;/p&gt;

&lt;h2&gt;Setup&lt;/h2&gt;
&lt;p&gt;This sets up mybash for you. It will backup your current bashrc if you already have one.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ~/build
cd ~/build
git clone https://github.com/christitustech/mybash
cd mybash
./setup.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Aliases and Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aliases&lt;/strong&gt;: Shortcuts for common commands are set up to enhance productivity. For example, &lt;code&gt;alias cp=&apos;cp -i&apos;&lt;/code&gt; makes the &lt;code&gt;cp&lt;/code&gt; command interactive, asking for confirmation before overwriting files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functions&lt;/strong&gt;: Custom functions for complex operations like &lt;code&gt;extract()&lt;/code&gt; for extracting various archive types, and &lt;code&gt;cpp()&lt;/code&gt; for copying files with a progress bar.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Prompt Customization and History Management&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prompt Command&lt;/strong&gt;: The &lt;code&gt;PROMPT_COMMAND&lt;/code&gt; variable is set to automatically save the command history after each command.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;History Control&lt;/strong&gt;: Settings to manage the size of the history file and how duplicates are handled.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;System-Specific Aliases and Settings&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Editor Settings&lt;/strong&gt;: Sets &lt;code&gt;nvim&lt;/code&gt; (NeoVim) as the default editor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Conditional Aliases&lt;/strong&gt;: Depending on the system type (like Fedora), it sets specific aliases, e.g., replacing &lt;code&gt;cat&lt;/code&gt; with &lt;code&gt;bat&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Enhancements and Utilities&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Color and Formatting&lt;/strong&gt;: Enhancements for command output readability using colors and formatting for tools like &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, and &lt;code&gt;man&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Navigation Shortcuts&lt;/strong&gt;: Aliases to simplify directory navigation, e.g., &lt;code&gt;alias ..=&apos;cd ..&apos;&lt;/code&gt; to go up one directory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safety Features&lt;/strong&gt;: Aliases for safer file operations, like using &lt;code&gt;trash&lt;/code&gt; instead of &lt;code&gt;rm&lt;/code&gt; for deleting files, to prevent accidental data loss.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensive Zoxide support&lt;/strong&gt;: Easily navigate with &lt;code&gt;z&lt;/code&gt;, &lt;code&gt;zi&lt;/code&gt;, or pressing Ctrl+f to launch zi to see frequently used navigation directories.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Advanced Functions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System Information&lt;/strong&gt;: Functions to display system information like &lt;code&gt;distribution()&lt;/code&gt; to identify the Linux distribution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Networking Utilities&lt;/strong&gt;: Tools to check internal and external IP addresses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Resource Monitoring&lt;/strong&gt;: Commands to monitor system resources like disk usage and open ports.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Installation and Configuration Helpers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auto-Install&lt;/strong&gt;: A function &lt;code&gt;install_bashrc_support()&lt;/code&gt; to automatically install necessary utilities based on the system type.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Editors&lt;/strong&gt;: Functions to edit important configuration files directly, e.g., &lt;code&gt;apacheconfig()&lt;/code&gt; for Apache server configurations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;This &lt;code&gt;.bashrc&lt;/code&gt; file is a comprehensive setup that not only enhances the shell experience with useful aliases and functions but also provides system-specific configurations and safety features to cater to different user needs and system types. It is designed to make the terminal more user-friendly, efficient, and powerful for an average user.&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/0phdCAFFicY&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>Atomic Desktops: Revolutionizing the Linux Experience</title><link>https://christitus.com/linux-atomic-desktops/</link><guid isPermaLink="true">https://christitus.com/linux-atomic-desktops/</guid><description>&lt;p&gt;Linux Atomic Desktops, a concept derived from Fedora&apos;s Project Atomic, are designed to provide a more reliable and manageable desktop environment. This initiative extends the principles of atomic updates to Fedora Workstation, aiming to enhance the stability and consistency of the Linux desktop experience.&lt;/p&gt;

&lt;h2&gt;What are Linux Atomic Desktops?&lt;/h2&gt;
&lt;p&gt;Linux Atomic Desktops leverage the concept of atomic updates, which are already popular in server environments through Fedora&apos;s Atomic Host. The idea is to treat the desktop as an immutable entity where updates and changes are applied in a single operation that can easily be rolled back if necessary. This approach minimizes disruptions and ensures that system modifications do not affect the overall stability.&lt;/p&gt;
&lt;h2&gt;How Do Linux Atomic Desktops Work?&lt;/h2&gt;
&lt;h3&gt;1. &lt;strong&gt;Atomic Updates&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transactional Updates&lt;/strong&gt;: Updates are applied as a single transaction. If the update process encounters any issues, it can revert to the previous state, ensuring that the system remains stable and usable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ostree&lt;/strong&gt;: At the core of atomic updates is Ostree, a tool that manages bootable, versioned filesystem trees. Each update is a new tree, allowing for easy rollback and parallel installations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. &lt;strong&gt;Containerization&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flatpak&lt;/strong&gt;: Applications are run in isolated environments using Flatpak. This not only enhances security by limiting application access to the system but also allows different applications to use different versions of libraries without conflict.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Podman&lt;/strong&gt;: For more complex applications, Podman allows running containers in a manner similar to Docker but without requiring a daemon, aligning with the atomic philosophy of minimal overhead.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. &lt;strong&gt;Immutable Infrastructure&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Read-Only System&lt;/strong&gt;: The core system files are treated as read-only, with changes only allowed in specific areas. This reduces the risk of system corruption and unauthorized modifications. Key root folders treated as read-only include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/usr&lt;/code&gt; (where binaries and libraries are stored)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/boot&lt;/code&gt; (contains boot loader files)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mutable but Controlled&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc&lt;/code&gt; (changes are tracked by ostree and layers will maintain separate versions)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Layered Packages&lt;/strong&gt;: Users can still install traditional RPM packages in a layered fashion on top of the base image, which are tracked and can be managed atomically.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can add layered packages with &lt;code&gt;rpm-ostree install program1 program2 etc&lt;/code&gt;, but doing so will slow down updates as it will need to rebuild the entire ostree and add the layered packages after every update.&lt;/li&gt;
&lt;li&gt;Note: It is &lt;strong&gt;ALWAYS&lt;/strong&gt; recommended to use Flatpak, AppImage, or Containers for applications. (Distrobox or Podman)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://docs.fedoraproject.org/en-US/iot/add-layered/&quot;&gt;https://docs.fedoraproject.org/en-US/iot/add-layered/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Benefits of Linux Atomic Desktops&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reliability&lt;/strong&gt;: By minimizing the impact of updates and potential conflicts, the desktop environment becomes more reliable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: Every instance of the desktop is consistent with others, reducing discrepancies in software versions and behavior.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: The isolation of applications and the immutable nature of the system components enhance the overall security posture.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollback and Reproducibility&lt;/strong&gt;: Easy rollback capabilities and the ability to reproduce environments make management and troubleshooting simpler.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Making a Linux Atomic Desktop&lt;/h2&gt;
&lt;p&gt;If you want to dive in and make your own distribution using Atomic Desktops. I recommend the Universal Blue project. &lt;a href=&quot;https://blue-build.org/learn/universal-blue/&quot;&gt;https://blue-build.org/learn/universal-blue/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Linux Atomic Desktops represent a significant shift in how desktop environments are managed and maintained. By adopting technologies and methodologies from the server domain, they offer a more stable, secure, and consistent desktop experience. As this technology matures, it could set a new standard for desktop reliability in the Linux ecosystem.&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/1vSFR8bi0YQ&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, 11 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Linux Atomic Desktops, a concept derived from Fedora&apos;s Project Atomic, are designed to provide a more reliable and manageable desktop environment. This initiative extends the principles of atomic updates to Fedora Workstation, aiming to enhance the stability and consistency of the Linux desktop experience.&lt;/p&gt;

&lt;h2&gt;What are Linux Atomic Desktops?&lt;/h2&gt;
&lt;p&gt;Linux Atomic Desktops leverage the concept of atomic updates, which are already popular in server environments through Fedora&apos;s Atomic Host. The idea is to treat the desktop as an immutable entity where updates and changes are applied in a single operation that can easily be rolled back if necessary. This approach minimizes disruptions and ensures that system modifications do not affect the overall stability.&lt;/p&gt;
&lt;h2&gt;How Do Linux Atomic Desktops Work?&lt;/h2&gt;
&lt;h3&gt;1. &lt;strong&gt;Atomic Updates&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transactional Updates&lt;/strong&gt;: Updates are applied as a single transaction. If the update process encounters any issues, it can revert to the previous state, ensuring that the system remains stable and usable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ostree&lt;/strong&gt;: At the core of atomic updates is Ostree, a tool that manages bootable, versioned filesystem trees. Each update is a new tree, allowing for easy rollback and parallel installations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. &lt;strong&gt;Containerization&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flatpak&lt;/strong&gt;: Applications are run in isolated environments using Flatpak. This not only enhances security by limiting application access to the system but also allows different applications to use different versions of libraries without conflict.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Podman&lt;/strong&gt;: For more complex applications, Podman allows running containers in a manner similar to Docker but without requiring a daemon, aligning with the atomic philosophy of minimal overhead.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. &lt;strong&gt;Immutable Infrastructure&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Read-Only System&lt;/strong&gt;: The core system files are treated as read-only, with changes only allowed in specific areas. This reduces the risk of system corruption and unauthorized modifications. Key root folders treated as read-only include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/usr&lt;/code&gt; (where binaries and libraries are stored)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/boot&lt;/code&gt; (contains boot loader files)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mutable but Controlled&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc&lt;/code&gt; (changes are tracked by ostree and layers will maintain separate versions)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Layered Packages&lt;/strong&gt;: Users can still install traditional RPM packages in a layered fashion on top of the base image, which are tracked and can be managed atomically.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can add layered packages with &lt;code&gt;rpm-ostree install program1 program2 etc&lt;/code&gt;, but doing so will slow down updates as it will need to rebuild the entire ostree and add the layered packages after every update.&lt;/li&gt;
&lt;li&gt;Note: It is &lt;strong&gt;ALWAYS&lt;/strong&gt; recommended to use Flatpak, AppImage, or Containers for applications. (Distrobox or Podman)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://docs.fedoraproject.org/en-US/iot/add-layered/&quot;&gt;https://docs.fedoraproject.org/en-US/iot/add-layered/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Benefits of Linux Atomic Desktops&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reliability&lt;/strong&gt;: By minimizing the impact of updates and potential conflicts, the desktop environment becomes more reliable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: Every instance of the desktop is consistent with others, reducing discrepancies in software versions and behavior.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: The isolation of applications and the immutable nature of the system components enhance the overall security posture.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rollback and Reproducibility&lt;/strong&gt;: Easy rollback capabilities and the ability to reproduce environments make management and troubleshooting simpler.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Making a Linux Atomic Desktop&lt;/h2&gt;
&lt;p&gt;If you want to dive in and make your own distribution using Atomic Desktops. I recommend the Universal Blue project. &lt;a href=&quot;https://blue-build.org/learn/universal-blue/&quot;&gt;https://blue-build.org/learn/universal-blue/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Linux Atomic Desktops represent a significant shift in how desktop environments are managed and maintained. By adopting technologies and methodologies from the server domain, they offer a more stable, secure, and consistent desktop experience. As this technology matures, it could set a new standard for desktop reliability in the Linux ecosystem.&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/1vSFR8bi0YQ&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>Hastebin</title><link>https://christitus.com/hastebin/</link><guid isPermaLink="true">https://christitus.com/hastebin/</guid><description>
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Archived:&lt;/strong&gt; The Chris Titus Tech Hastebin instance has been retired, so
the web interface and upload functions from this guide are no longer
available. The walkthrough remains below for historical reference.&lt;/p&gt;
&lt;/blockquote&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/TpI1siclED0&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, 08 May 2024 00:00:00 GMT</pubDate><content:encoded>
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Archived:&lt;/strong&gt; The Chris Titus Tech Hastebin instance has been retired, so
the web interface and upload functions from this guide are no longer
available. The walkthrough remains below for historical reference.&lt;/p&gt;
&lt;/blockquote&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/TpI1siclED0&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>VPN Tier List 2024</title><link>https://christitus.com/vpn-tier-list-2024/</link><guid isPermaLink="true">https://christitus.com/vpn-tier-list-2024/</guid><description>&lt;p&gt;Did you know most VPNs are owned by only a few companies? Those companies can even sell your data on top of charging you a subscription fee.&lt;/p&gt;
&lt;p&gt;In this post, we&apos;ll be looking at the best VPNs for 2024.&lt;/p&gt;

&lt;h2&gt;Why Use a VPN?&lt;/h2&gt;
&lt;p&gt;If you are looking for &lt;strong&gt;privacy&lt;/strong&gt; or an &lt;strong&gt;encrypted connection on the go&lt;/strong&gt;, setting up a wireguard or openvpn server is a great way to do that. This established a secure connection to your home network and helps block attacks that could happen on the host network providing you internet in a hotel, coffee shop, or other public setting. Setting these up are free and the best way to protect your privacy while helping your maintain a secure connection.&lt;/p&gt;
&lt;p&gt;The next use case for a VPN is torrenting or streaming media from another country (geo-unlock). All VPNs generally are advertised as being able to do this, but make sure the VPN does not LOG any user activities and has servers in the country you want to watch streaming from.&lt;/p&gt;
&lt;h2&gt;Corporate VPNs and the Big Tech Companies&lt;/h2&gt;
&lt;p&gt;Kape Technology&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ExpressVPN&lt;/li&gt;
&lt;li&gt;CyberGhost&lt;/li&gt;
&lt;li&gt;Private Internet Access&lt;/li&gt;
&lt;li&gt;Intego Privacy Protection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ziff Davis&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IPVanish&lt;/li&gt;
&lt;li&gt;StrongVPN&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://Encrypt.me&quot;&gt;Encrypt.me&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SaferVPN&lt;/li&gt;
&lt;li&gt;Perimeter 81&lt;/li&gt;
&lt;li&gt;FastVPN&lt;/li&gt;
&lt;li&gt;Internet Shield VPN by VIPRE&lt;/li&gt;
&lt;li&gt;SpeedtestVPN&lt;/li&gt;
&lt;li&gt;netDNA&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nord Security&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NordVPN&lt;/li&gt;
&lt;li&gt;NordLayer&lt;/li&gt;
&lt;li&gt;Surfshark VPN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I could go on, but these are the heavy hitters in the market. Most other VPN conglomerates own 5-10 different VPN brands each.&lt;/p&gt;
&lt;h2&gt;The Best VPNs&lt;/h2&gt;
&lt;p&gt;These are independent VPNs that are owned by a single company and outside the 14-eyes countries. Mullvad is hosted in Sweden which doesn&apos;t have laws to intercept traffic. Likewise, ProtonVPN is hosted in Switzerland which also doesn&apos;t have these laws.&lt;/p&gt;
&lt;h2&gt;Final Tier List&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/vpn-tier-list-2024/vpns.webp&quot; alt=&quot;vpn-tier-list-2024&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/sPf1q_YLaKQ&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, 19 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Did you know most VPNs are owned by only a few companies? Those companies can even sell your data on top of charging you a subscription fee.&lt;/p&gt;
&lt;p&gt;In this post, we&apos;ll be looking at the best VPNs for 2024.&lt;/p&gt;

&lt;h2&gt;Why Use a VPN?&lt;/h2&gt;
&lt;p&gt;If you are looking for &lt;strong&gt;privacy&lt;/strong&gt; or an &lt;strong&gt;encrypted connection on the go&lt;/strong&gt;, setting up a wireguard or openvpn server is a great way to do that. This established a secure connection to your home network and helps block attacks that could happen on the host network providing you internet in a hotel, coffee shop, or other public setting. Setting these up are free and the best way to protect your privacy while helping your maintain a secure connection.&lt;/p&gt;
&lt;p&gt;The next use case for a VPN is torrenting or streaming media from another country (geo-unlock). All VPNs generally are advertised as being able to do this, but make sure the VPN does not LOG any user activities and has servers in the country you want to watch streaming from.&lt;/p&gt;
&lt;h2&gt;Corporate VPNs and the Big Tech Companies&lt;/h2&gt;
&lt;p&gt;Kape Technology&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ExpressVPN&lt;/li&gt;
&lt;li&gt;CyberGhost&lt;/li&gt;
&lt;li&gt;Private Internet Access&lt;/li&gt;
&lt;li&gt;Intego Privacy Protection&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ziff Davis&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IPVanish&lt;/li&gt;
&lt;li&gt;StrongVPN&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://Encrypt.me&quot;&gt;Encrypt.me&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SaferVPN&lt;/li&gt;
&lt;li&gt;Perimeter 81&lt;/li&gt;
&lt;li&gt;FastVPN&lt;/li&gt;
&lt;li&gt;Internet Shield VPN by VIPRE&lt;/li&gt;
&lt;li&gt;SpeedtestVPN&lt;/li&gt;
&lt;li&gt;netDNA&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nord Security&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NordVPN&lt;/li&gt;
&lt;li&gt;NordLayer&lt;/li&gt;
&lt;li&gt;Surfshark VPN&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I could go on, but these are the heavy hitters in the market. Most other VPN conglomerates own 5-10 different VPN brands each.&lt;/p&gt;
&lt;h2&gt;The Best VPNs&lt;/h2&gt;
&lt;p&gt;These are independent VPNs that are owned by a single company and outside the 14-eyes countries. Mullvad is hosted in Sweden which doesn&apos;t have laws to intercept traffic. Likewise, ProtonVPN is hosted in Switzerland which also doesn&apos;t have these laws.&lt;/p&gt;
&lt;h2&gt;Final Tier List&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/vpn-tier-list-2024/vpns.webp&quot; alt=&quot;vpn-tier-list-2024&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/sPf1q_YLaKQ&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>Bazzite Linux</title><link>https://christitus.com/bazzite-linux/</link><guid isPermaLink="true">https://christitus.com/bazzite-linux/</guid><description>&lt;p&gt;Bazzite is an OCI image designed as an alternative OS for the Steam Deck and a SteamOS-like system for desktops and home theater PCs. It&apos;s built on Fedora, offering broad hardware support and built-in drivers.&lt;/p&gt;
&lt;h2&gt;Official Bazzite Sites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Github: &lt;a href=&quot;https://github.com/ublue-os/bazzite&quot;&gt;https://github.com/ublue-os/bazzite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Website: &lt;a href=&quot;https://bazzite.gg/&quot;&gt;https://bazzite.gg/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download: &lt;a href=&quot;https://bazzite.gg/#image-picker&quot;&gt;https://bazzite.gg/#image-picker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Key Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hardware Support &amp;amp; Drivers&lt;/strong&gt;: Built from &lt;code&gt;ublue-os/main&lt;/code&gt; and &lt;code&gt;ublue-os/nvidia&lt;/code&gt;, ensuring wide hardware compatibility.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Gaming Experience&lt;/strong&gt;: Includes fsync kernel for HDR support, NVK for non-Nvidia builds, and full hardware-accelerated codec support.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comprehensive Driver Support&lt;/strong&gt;: Features drivers for AMD GPUs, Xbox controllers, DisplayLink, and more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gaming Optimizations&lt;/strong&gt;: Comes with LatencyFleX, vkBasalt, MangoHud, OBS VkCapture, and automated duperemove service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customization &amp;amp; Tools&lt;/strong&gt;: Offers Valve&apos;s KDE themes, optional GTK3/4 themes, System76-Scheduler, and Google&apos;s BBR TCP congestion control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handheld &amp;amp; Desktop Variants&lt;/strong&gt;: Tailored versions for desktops (&lt;code&gt;bazzite&lt;/code&gt;), Steam Deck, and HTPCs (&lt;code&gt;bazzite-deck&lt;/code&gt;), each with specific optimizations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation &amp;amp; Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ISO Downloads&lt;/strong&gt;: Available on the releases page with a detailed install guide.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rebasing&lt;/strong&gt;: Instructions provided for rebasing from Fedora Atomic to Bazzite using &lt;code&gt;rpm-ostree&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secure Boot&lt;/strong&gt;: Follow the secure boot documentation if enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Specialized Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Steam Deck &amp;amp; HTPCs&lt;/strong&gt;: Direct boot to Game mode, expanded input support, and custom update system.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GNOME Builds&lt;/strong&gt;: Include variable refresh rate support, GSConnect, and optional extensions for an enhanced user experience.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upstream Features&lt;/strong&gt;: Incorporates features from Universal Blue and Fedora Linux, like pre-installed Nvidia drivers, Flathub, and SELinux.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why Choose Bazzite?&lt;/h2&gt;
&lt;p&gt;Bazzite addresses common issues with SteamOS, such as outdated packages and lack of a functional package manager. It offers a stable base with the latest Linux kernel, SELinux, secure boot, and disk encryption support, making it suitable for both gaming and general computing.&lt;/p&gt;
&lt;h2&gt;My Experiences on a Mini PC&lt;/h2&gt;
&lt;p&gt;Hardware Used&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BeeLink 7840HS Mini PC Specifications:
&lt;ul&gt;
&lt;li&gt;CPU: AMD Ryzen 7 7840HS with Radeon Graphics&lt;/li&gt;
&lt;li&gt;GPU: Integrated AMD Radeon RX Vega 8 (RDNA 3)&lt;/li&gt;
&lt;li&gt;Cores: 8 Cores, 16 Threads&lt;/li&gt;
&lt;li&gt;Base Clock: 3.3 GHz&lt;/li&gt;
&lt;li&gt;Boost Clock: Up to 4.2 GHz&lt;/li&gt;
&lt;li&gt;Cache: 12MB Total Cache&lt;/li&gt;
&lt;li&gt;RAM: 32GB DDR4&lt;/li&gt;
&lt;li&gt;Storage: 1TB NVMe SSD&lt;/li&gt;
&lt;li&gt;Connectivity: Dual Band WiFi, Gigabit Ethernet, Bluetooth 4.0&lt;/li&gt;
&lt;li&gt;Ports: 4x USB 3.0, HDMI, Thunderbolt 3, SD Card Reader&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pros&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installation was smooth and seemless&lt;/li&gt;
&lt;li&gt;Quick Steam setup and no configuration needed&lt;/li&gt;
&lt;li&gt;Launched Helldivers 2 without any change in stock configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ujust&lt;/code&gt; package manager is easy for installs and expansion&lt;/li&gt;
&lt;li&gt;EmuDeck, Decky, and other options built in via &lt;code&gt;ujust&lt;/code&gt; launcher&lt;/li&gt;
&lt;li&gt;HDR Support works better than anything I&apos;ve tried!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cons&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I ran into the multiple power management issues. (Lock ups and will not properly shutdown)&lt;/li&gt;
&lt;li&gt;Dolphin Wii Emulation is dicey via Emudeck&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Livestream First Install&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/MOcekLz18QU&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;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wdC_qiFoHN4&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, 17 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bazzite is an OCI image designed as an alternative OS for the Steam Deck and a SteamOS-like system for desktops and home theater PCs. It&apos;s built on Fedora, offering broad hardware support and built-in drivers.&lt;/p&gt;
&lt;h2&gt;Official Bazzite Sites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Github: &lt;a href=&quot;https://github.com/ublue-os/bazzite&quot;&gt;https://github.com/ublue-os/bazzite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Website: &lt;a href=&quot;https://bazzite.gg/&quot;&gt;https://bazzite.gg/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download: &lt;a href=&quot;https://bazzite.gg/#image-picker&quot;&gt;https://bazzite.gg/#image-picker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Key Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hardware Support &amp;amp; Drivers&lt;/strong&gt;: Built from &lt;code&gt;ublue-os/main&lt;/code&gt; and &lt;code&gt;ublue-os/nvidia&lt;/code&gt;, ensuring wide hardware compatibility.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Gaming Experience&lt;/strong&gt;: Includes fsync kernel for HDR support, NVK for non-Nvidia builds, and full hardware-accelerated codec support.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comprehensive Driver Support&lt;/strong&gt;: Features drivers for AMD GPUs, Xbox controllers, DisplayLink, and more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gaming Optimizations&lt;/strong&gt;: Comes with LatencyFleX, vkBasalt, MangoHud, OBS VkCapture, and automated duperemove service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customization &amp;amp; Tools&lt;/strong&gt;: Offers Valve&apos;s KDE themes, optional GTK3/4 themes, System76-Scheduler, and Google&apos;s BBR TCP congestion control.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handheld &amp;amp; Desktop Variants&lt;/strong&gt;: Tailored versions for desktops (&lt;code&gt;bazzite&lt;/code&gt;), Steam Deck, and HTPCs (&lt;code&gt;bazzite-deck&lt;/code&gt;), each with specific optimizations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation &amp;amp; Usage&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ISO Downloads&lt;/strong&gt;: Available on the releases page with a detailed install guide.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rebasing&lt;/strong&gt;: Instructions provided for rebasing from Fedora Atomic to Bazzite using &lt;code&gt;rpm-ostree&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Secure Boot&lt;/strong&gt;: Follow the secure boot documentation if enabled.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Specialized Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Steam Deck &amp;amp; HTPCs&lt;/strong&gt;: Direct boot to Game mode, expanded input support, and custom update system.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GNOME Builds&lt;/strong&gt;: Include variable refresh rate support, GSConnect, and optional extensions for an enhanced user experience.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upstream Features&lt;/strong&gt;: Incorporates features from Universal Blue and Fedora Linux, like pre-installed Nvidia drivers, Flathub, and SELinux.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why Choose Bazzite?&lt;/h2&gt;
&lt;p&gt;Bazzite addresses common issues with SteamOS, such as outdated packages and lack of a functional package manager. It offers a stable base with the latest Linux kernel, SELinux, secure boot, and disk encryption support, making it suitable for both gaming and general computing.&lt;/p&gt;
&lt;h2&gt;My Experiences on a Mini PC&lt;/h2&gt;
&lt;p&gt;Hardware Used&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BeeLink 7840HS Mini PC Specifications:
&lt;ul&gt;
&lt;li&gt;CPU: AMD Ryzen 7 7840HS with Radeon Graphics&lt;/li&gt;
&lt;li&gt;GPU: Integrated AMD Radeon RX Vega 8 (RDNA 3)&lt;/li&gt;
&lt;li&gt;Cores: 8 Cores, 16 Threads&lt;/li&gt;
&lt;li&gt;Base Clock: 3.3 GHz&lt;/li&gt;
&lt;li&gt;Boost Clock: Up to 4.2 GHz&lt;/li&gt;
&lt;li&gt;Cache: 12MB Total Cache&lt;/li&gt;
&lt;li&gt;RAM: 32GB DDR4&lt;/li&gt;
&lt;li&gt;Storage: 1TB NVMe SSD&lt;/li&gt;
&lt;li&gt;Connectivity: Dual Band WiFi, Gigabit Ethernet, Bluetooth 4.0&lt;/li&gt;
&lt;li&gt;Ports: 4x USB 3.0, HDMI, Thunderbolt 3, SD Card Reader&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pros&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Installation was smooth and seemless&lt;/li&gt;
&lt;li&gt;Quick Steam setup and no configuration needed&lt;/li&gt;
&lt;li&gt;Launched Helldivers 2 without any change in stock configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ujust&lt;/code&gt; package manager is easy for installs and expansion&lt;/li&gt;
&lt;li&gt;EmuDeck, Decky, and other options built in via &lt;code&gt;ujust&lt;/code&gt; launcher&lt;/li&gt;
&lt;li&gt;HDR Support works better than anything I&apos;ve tried!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cons&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I ran into the multiple power management issues. (Lock ups and will not properly shutdown)&lt;/li&gt;
&lt;li&gt;Dolphin Wii Emulation is dicey via Emudeck&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Livestream First Install&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/MOcekLz18QU&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;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wdC_qiFoHN4&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>Freedesktop Bans Hyprland</title><link>https://christitus.com/freedesktop-bans-hyprland/</link><guid isPermaLink="true">https://christitus.com/freedesktop-bans-hyprland/</guid><description>&lt;p&gt;Hyprland maintainer Vaxry has been banned by FreeDesktop. Meaning he can not report or patch anything in FreeDesktop which is a sad state of affairs for the Linux Desktop community as a whole, especially the wayland side of things.&lt;/p&gt;

&lt;h2&gt;What happened?&lt;/h2&gt;
&lt;p&gt;In 2022, the Hyprland Discord had a mod bully a transgender person by changing their nickname removing pronouns to (who/cares). Vaxry also made some off the cuff remarks about this, but I couldn&apos;t find anything worse than above. A transgender person that works for redhat and is part of the freedesktop leadership heard about this and demanded Vaxry respond to it on March, 19th 2024.&lt;/p&gt;
&lt;h2&gt;Why Now?&lt;/h2&gt;
&lt;p&gt;Sometimes it takes a while before these things gain traction. Hyprland is now the biggest tiling window manager on Wayland and Hypr Cursor was recently recommended to replace XCursor which is badly out of date and frankly a terribly coded cursor system. Vaxry has become incredibly popular as he is a gifted programmer.&lt;/p&gt;
&lt;h2&gt;Who are these people?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vaxry - Hyprland and Hypr Project Maintainer&lt;/li&gt;
&lt;li&gt;Drew Devault - Sway Maintainer (Author of article: &lt;a href=&quot;https://drewdevault.com/2024/04/09/2024-04-09-FDO-conduct-enforcement.html&quot;&gt;https://drewdevault.com/2024/04/09/2024-04-09-FDO-conduct-enforcement.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Lyude - Redhat Employee and Freedesktop member (Contacted Vaxry inquiring about discord incidents 2 years old.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Where to go from here?&lt;/h2&gt;
&lt;p&gt;Banning Vaxry means he can&apos;t contribute to wlroots and keep putting patches which were very beneficial to wayland. He will still maintain and produce hyprland.&lt;/p&gt;
&lt;h2&gt;Official Links to Information&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vaxry&apos;s Blog &lt;a href=&quot;https://blog.vaxry.net/articles/2024-fdo-and-redhat2&quot;&gt;Freedesktop/RedHat&apos;s CoC team is worse than you thought.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vaxry&apos;s Blog &lt;a href=&quot;https://blog.vaxry.net/articles/2024-fdo-and-redhat&quot;&gt;How Freedesktop/RedHat harass other projects into submission&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Drew&apos;s Vaxry Takedown - &lt;a href=&quot;https://drewdevault.com/2024/04/09/2024-04-09-FDO-conduct-enforcement.html&quot;&gt;FDO&apos;s conduct enforcement actions regarding Vaxry&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Other YouTuber Takes&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Brodie Robertson&lt;/th&gt;
&lt;th&gt;Nicco (KDE Dev)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/Lm3gLwyjawQ&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;/td&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/xjTdroiDCtc&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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/0ws1SIbAQq8&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, 10 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hyprland maintainer Vaxry has been banned by FreeDesktop. Meaning he can not report or patch anything in FreeDesktop which is a sad state of affairs for the Linux Desktop community as a whole, especially the wayland side of things.&lt;/p&gt;

&lt;h2&gt;What happened?&lt;/h2&gt;
&lt;p&gt;In 2022, the Hyprland Discord had a mod bully a transgender person by changing their nickname removing pronouns to (who/cares). Vaxry also made some off the cuff remarks about this, but I couldn&apos;t find anything worse than above. A transgender person that works for redhat and is part of the freedesktop leadership heard about this and demanded Vaxry respond to it on March, 19th 2024.&lt;/p&gt;
&lt;h2&gt;Why Now?&lt;/h2&gt;
&lt;p&gt;Sometimes it takes a while before these things gain traction. Hyprland is now the biggest tiling window manager on Wayland and Hypr Cursor was recently recommended to replace XCursor which is badly out of date and frankly a terribly coded cursor system. Vaxry has become incredibly popular as he is a gifted programmer.&lt;/p&gt;
&lt;h2&gt;Who are these people?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vaxry - Hyprland and Hypr Project Maintainer&lt;/li&gt;
&lt;li&gt;Drew Devault - Sway Maintainer (Author of article: &lt;a href=&quot;https://drewdevault.com/2024/04/09/2024-04-09-FDO-conduct-enforcement.html&quot;&gt;https://drewdevault.com/2024/04/09/2024-04-09-FDO-conduct-enforcement.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Lyude - Redhat Employee and Freedesktop member (Contacted Vaxry inquiring about discord incidents 2 years old.)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Where to go from here?&lt;/h2&gt;
&lt;p&gt;Banning Vaxry means he can&apos;t contribute to wlroots and keep putting patches which were very beneficial to wayland. He will still maintain and produce hyprland.&lt;/p&gt;
&lt;h2&gt;Official Links to Information&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vaxry&apos;s Blog &lt;a href=&quot;https://blog.vaxry.net/articles/2024-fdo-and-redhat2&quot;&gt;Freedesktop/RedHat&apos;s CoC team is worse than you thought.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Vaxry&apos;s Blog &lt;a href=&quot;https://blog.vaxry.net/articles/2024-fdo-and-redhat&quot;&gt;How Freedesktop/RedHat harass other projects into submission&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Drew&apos;s Vaxry Takedown - &lt;a href=&quot;https://drewdevault.com/2024/04/09/2024-04-09-FDO-conduct-enforcement.html&quot;&gt;FDO&apos;s conduct enforcement actions regarding Vaxry&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Other YouTuber Takes&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Brodie Robertson&lt;/th&gt;
&lt;th&gt;Nicco (KDE Dev)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/Lm3gLwyjawQ&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;/td&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/xjTdroiDCtc&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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/0ws1SIbAQq8&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>Is Sony Abusing FreeBSD with Playstation?</title><link>https://christitus.com/sony-playstation-and-freebsd/</link><guid isPermaLink="true">https://christitus.com/sony-playstation-and-freebsd/</guid><description>&lt;p&gt;The intersection of open-source software and proprietary systems often sparks debate, and Sony&apos;s Playstation is at the heart of a current controversy. This article delves into the complexities of Sony&apos;s use of FreeBSD&apos;s MIT License for its Playstation operating system, examining whether this constitutes an abuse of open-source principles.&lt;/p&gt;

&lt;h2&gt;Sony&apos;s Use of FreeBSD&lt;/h2&gt;
&lt;p&gt;Sony Playstation, a leader in the console gaming market, is powered by an operating system based on FreeBSD. FreeBSD is known for its robustness and is favored in open-source circles for its permissive MIT License. This license allows for considerable freedom in how the software is used, modified, and distributed, including in proprietary products.&lt;/p&gt;
&lt;h2&gt;The Controversy Around MIT License Use&lt;/h2&gt;
&lt;p&gt;The core of the controversy lies in how Sony utilizes FreeBSD&apos;s MIT License. By incorporating FreeBSD into the Playstation&apos;s proprietary system, Sony benefits from decades of open-source development without the obligation to share improvements or modifications made to the FreeBSD code.&lt;/p&gt;
&lt;h3&gt;Key Points of Debate&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Proprietary vs. Open-Source&lt;/strong&gt;: Sony&apos;s approach raises questions about the balance between benefiting from open-source software and contributing back to the community.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Legal vs. Ethical Considerations&lt;/strong&gt;: While Sony&apos;s use of FreeBSD under the MIT License is legal, it prompts a discussion on the ethical implications of such use in proprietary systems.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;The Impact on the FreeBSD Community&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lack of Contributions&lt;/strong&gt;: Critics argue that companies like Sony should contribute back to the FreeBSD project, enhancing the ecosystem from which they benefit. However, it&apos;s important to note that Sony has made some contributions to the FreeBSD community. Notably, Sony has financially supported FreeBSD developers to develop and expand the LLVM portion of the project, which is a significant contribution given LLVM&apos;s importance in the open-source compiler ecosystem. This support for LLVM development underlines a more complex relationship between Sony and the FreeBSD community than might be apparent at first glance. While these contributions are valuable, the debate continues regarding the sufficiency of these efforts and whether they fully compensate for the benefits Sony gains from using FreeBSD in a proprietary context.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Community Sentiment&lt;/strong&gt;: There&apos;s a mixed sentiment within the open-source community, with some seeing Sony&apos;s use of FreeBSD as a testament to the software&apos;s quality and others viewing it as an exploitation of open-source goodwill.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Sony&apos;s Stance&lt;/h2&gt;
&lt;p&gt;Sony has not publicly addressed these concerns in detail, maintaining that their use of FreeBSD complies with the legal requirements of the MIT License. They highlight their contributions to other open-source projects, including significant support for LLVM development, though specifics on contributions to FreeBSD&apos;s core functionalities remain less clear.&lt;/p&gt;
&lt;h2&gt;Contributions Comparison: Netflix vs. Sony&lt;/h2&gt;
&lt;p&gt;While discussing contributions to FreeBSD, it&apos;s insightful to compare Sony&apos;s contributions with those of another major corporation, Netflix. Netflix, which uses FreeBSD to power its content delivery network, has been notably active in contributing back to the FreeBSD community.&lt;/p&gt;
&lt;h3&gt;Netflix&apos;s Contributions to FreeBSD&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Network Performance Enhancements&lt;/strong&gt;: Netflix has contributed significant improvements to the FreeBSD network stack, enhancing performance and scalability. These contributions benefit not only Netflix&apos;s operations but also any FreeBSD user relying on high-performance networking.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open Connect Appliance Software&lt;/strong&gt;: Netflix has open-sourced the software stack for its Open Connect Appliances, which are based on FreeBSD. This move has provided the community with insights into building high-performance, large-scale content delivery systems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Financial Support and Hardware Donations&lt;/strong&gt;: Similar to Sony, Netflix has provided financial support to the FreeBSD Foundation. Additionally, Netflix has donated hardware to FreeBSD developers, aiding in testing and development efforts.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Comparison with Sony&apos;s Contributions&lt;/h3&gt;
&lt;p&gt;While Sony has contributed to the FreeBSD community, primarily through financial support for LLVM development, Netflix&apos;s contributions are more directly related to enhancing FreeBSD&apos;s core functionalities, especially in areas critical to its use case like network performance. Netflix&apos;s approach of open-sourcing its appliance software and contributing improvements directly to the FreeBSD network stack showcases a model of engagement that not only leverages open-source software for commercial benefit but also actively enriches the ecosystem.&lt;/p&gt;
&lt;h2&gt;The Role of Licenses in Open Source&lt;/h2&gt;
&lt;p&gt;This situation underscores the importance of understanding open-source licenses. The MIT License&apos;s permissiveness is designed to encourage the broad use of software, but it also means that large corporations can use open-source projects in proprietary products without contributing back.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The debate over Sony&apos;s use of FreeBSD&apos;s MIT License in the Playstation ecosystem highlights a broader discussion about the relationship between open-source projects and proprietary companies. While legally permissible, the ethical implications of such use without reciprocal contributions spark ongoing debate. The open-source community continues to advocate for a more collaborative approach, hoping for a future where companies like Sony actively contribute to the open-source projects they benefit from.&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/DwHKbQFf_uQ&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, 07 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The intersection of open-source software and proprietary systems often sparks debate, and Sony&apos;s Playstation is at the heart of a current controversy. This article delves into the complexities of Sony&apos;s use of FreeBSD&apos;s MIT License for its Playstation operating system, examining whether this constitutes an abuse of open-source principles.&lt;/p&gt;

&lt;h2&gt;Sony&apos;s Use of FreeBSD&lt;/h2&gt;
&lt;p&gt;Sony Playstation, a leader in the console gaming market, is powered by an operating system based on FreeBSD. FreeBSD is known for its robustness and is favored in open-source circles for its permissive MIT License. This license allows for considerable freedom in how the software is used, modified, and distributed, including in proprietary products.&lt;/p&gt;
&lt;h2&gt;The Controversy Around MIT License Use&lt;/h2&gt;
&lt;p&gt;The core of the controversy lies in how Sony utilizes FreeBSD&apos;s MIT License. By incorporating FreeBSD into the Playstation&apos;s proprietary system, Sony benefits from decades of open-source development without the obligation to share improvements or modifications made to the FreeBSD code.&lt;/p&gt;
&lt;h3&gt;Key Points of Debate&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Proprietary vs. Open-Source&lt;/strong&gt;: Sony&apos;s approach raises questions about the balance between benefiting from open-source software and contributing back to the community.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Legal vs. Ethical Considerations&lt;/strong&gt;: While Sony&apos;s use of FreeBSD under the MIT License is legal, it prompts a discussion on the ethical implications of such use in proprietary systems.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;The Impact on the FreeBSD Community&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lack of Contributions&lt;/strong&gt;: Critics argue that companies like Sony should contribute back to the FreeBSD project, enhancing the ecosystem from which they benefit. However, it&apos;s important to note that Sony has made some contributions to the FreeBSD community. Notably, Sony has financially supported FreeBSD developers to develop and expand the LLVM portion of the project, which is a significant contribution given LLVM&apos;s importance in the open-source compiler ecosystem. This support for LLVM development underlines a more complex relationship between Sony and the FreeBSD community than might be apparent at first glance. While these contributions are valuable, the debate continues regarding the sufficiency of these efforts and whether they fully compensate for the benefits Sony gains from using FreeBSD in a proprietary context.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Community Sentiment&lt;/strong&gt;: There&apos;s a mixed sentiment within the open-source community, with some seeing Sony&apos;s use of FreeBSD as a testament to the software&apos;s quality and others viewing it as an exploitation of open-source goodwill.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Sony&apos;s Stance&lt;/h2&gt;
&lt;p&gt;Sony has not publicly addressed these concerns in detail, maintaining that their use of FreeBSD complies with the legal requirements of the MIT License. They highlight their contributions to other open-source projects, including significant support for LLVM development, though specifics on contributions to FreeBSD&apos;s core functionalities remain less clear.&lt;/p&gt;
&lt;h2&gt;Contributions Comparison: Netflix vs. Sony&lt;/h2&gt;
&lt;p&gt;While discussing contributions to FreeBSD, it&apos;s insightful to compare Sony&apos;s contributions with those of another major corporation, Netflix. Netflix, which uses FreeBSD to power its content delivery network, has been notably active in contributing back to the FreeBSD community.&lt;/p&gt;
&lt;h3&gt;Netflix&apos;s Contributions to FreeBSD&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Network Performance Enhancements&lt;/strong&gt;: Netflix has contributed significant improvements to the FreeBSD network stack, enhancing performance and scalability. These contributions benefit not only Netflix&apos;s operations but also any FreeBSD user relying on high-performance networking.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open Connect Appliance Software&lt;/strong&gt;: Netflix has open-sourced the software stack for its Open Connect Appliances, which are based on FreeBSD. This move has provided the community with insights into building high-performance, large-scale content delivery systems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Financial Support and Hardware Donations&lt;/strong&gt;: Similar to Sony, Netflix has provided financial support to the FreeBSD Foundation. Additionally, Netflix has donated hardware to FreeBSD developers, aiding in testing and development efforts.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Comparison with Sony&apos;s Contributions&lt;/h3&gt;
&lt;p&gt;While Sony has contributed to the FreeBSD community, primarily through financial support for LLVM development, Netflix&apos;s contributions are more directly related to enhancing FreeBSD&apos;s core functionalities, especially in areas critical to its use case like network performance. Netflix&apos;s approach of open-sourcing its appliance software and contributing improvements directly to the FreeBSD network stack showcases a model of engagement that not only leverages open-source software for commercial benefit but also actively enriches the ecosystem.&lt;/p&gt;
&lt;h2&gt;The Role of Licenses in Open Source&lt;/h2&gt;
&lt;p&gt;This situation underscores the importance of understanding open-source licenses. The MIT License&apos;s permissiveness is designed to encourage the broad use of software, but it also means that large corporations can use open-source projects in proprietary products without contributing back.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The debate over Sony&apos;s use of FreeBSD&apos;s MIT License in the Playstation ecosystem highlights a broader discussion about the relationship between open-source projects and proprietary companies. While legally permissible, the ethical implications of such use without reciprocal contributions spark ongoing debate. The open-source community continues to advocate for a more collaborative approach, hoping for a future where companies like Sony actively contribute to the open-source projects they benefit from.&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/DwHKbQFf_uQ&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>XZ Backdoor Affected These Users</title><link>https://christitus.com/xz-affected-these-users/</link><guid isPermaLink="true">https://christitus.com/xz-affected-these-users/</guid><description>&lt;p&gt;Who actually was affected by the XZ Backdoor? Lets go over the vulnurable linux distributions that were affected.&lt;/p&gt;

&lt;h2&gt;Affected Linux Distributions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UNAFFECTED&lt;/strong&gt;: Ubuntu. The distribution uses the older 5.4 version of xz, so no update is necessary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AFFECTED&lt;/strong&gt;: Red Hat. Fedora 41 and Fedora Rawhide contain vulnerable packages. However, Red Hat Enterprise Linux (RHEL) versions are not affected. Users are advised to cease using the affected versions immediately until an updated xz version is released.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AFFECTED&lt;/strong&gt;: SUSE. Users of openSUSE (Tumbleweed or MicroOS) with xz version 5.6.0 and 5.6.1. Update is out to patch the malicious code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AFFECTED&lt;/strong&gt;: Debian Linux. Testing, unstable, and experimental versions included compromised packages, though stable versions remain unaffected. Users are recommended to update xz-utils.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AFFECTED&lt;/strong&gt;: Kali Linux. Systems updated from March 26 to March 29 need to be updated again for the fix. Systems last updated before March 26 are not affected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UNAFFECTED&lt;/strong&gt;: Arch Linux. Arch never linked SSHD with liblzma. Even with the malicious code in liblzma the backdoor was never exploited. Source: &lt;a href=&quot;https://security.archlinux.org/ASA-202403-1&quot;&gt;https://security.archlinux.org/ASA-202403-1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Social Engineering Summary&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://robmensching.com/blog/posts/2024/03/30/a-microcosm-of-the-interactions-in-open-source-projects/&quot;&gt;https://robmensching.com/blog/posts/2024/03/30/a-microcosm-of-the-interactions-in-open-source-projects/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The narrative outlines a common scenario in open-source projects where a maintainer&apos;s burnout leads to vulnerability exploitation, as seen in the xz/liblzma case. Initially, the maintainer&apos;s struggle to keep up with the project invites an attacker to offer help, gaining trust. Despite the community&apos;s demands for more attention and updates, the maintainer&apos;s mental health and the unpaid nature of the work make it challenging to meet these expectations. The situation escalates with unhelpful comments from the community, further pressuring the maintainer. The story highlights the need for a change in how open-source projects are managed and supported, emphasizing the importance of understanding and addressing the challenges maintainers face.&lt;/p&gt;
&lt;h2&gt;XZ Backdoor Summary&lt;/h2&gt;
&lt;p&gt;The XZ exploit, a critical vulnerability identified within the XZ compression utility, has sparked considerable debate and scrutiny within the cybersecurity realm. This exploit compromises the integrity of the liblzma library, enabling attackers to execute arbitrary code on a victim&apos;s system through a buffer overflow vulnerability. Notably, this vulnerability also facilitated unauthorized access via SSH by manipulating the liblzma library used in SSH processes. The exposure of this exploit prompted an extensive evaluation of security protocols for applications relying on the XZ compression algorithm. In response, developers of the XZ utility have issued patches, and there have been widespread advisories urging users to upgrade their software to the most current version. This event has highlighted the critical need for ongoing security audits and timely updates to thwart similar threats.&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/s_WkMtEPsuE&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, 06 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Who actually was affected by the XZ Backdoor? Lets go over the vulnurable linux distributions that were affected.&lt;/p&gt;

&lt;h2&gt;Affected Linux Distributions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UNAFFECTED&lt;/strong&gt;: Ubuntu. The distribution uses the older 5.4 version of xz, so no update is necessary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AFFECTED&lt;/strong&gt;: Red Hat. Fedora 41 and Fedora Rawhide contain vulnerable packages. However, Red Hat Enterprise Linux (RHEL) versions are not affected. Users are advised to cease using the affected versions immediately until an updated xz version is released.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AFFECTED&lt;/strong&gt;: SUSE. Users of openSUSE (Tumbleweed or MicroOS) with xz version 5.6.0 and 5.6.1. Update is out to patch the malicious code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AFFECTED&lt;/strong&gt;: Debian Linux. Testing, unstable, and experimental versions included compromised packages, though stable versions remain unaffected. Users are recommended to update xz-utils.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AFFECTED&lt;/strong&gt;: Kali Linux. Systems updated from March 26 to March 29 need to be updated again for the fix. Systems last updated before March 26 are not affected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UNAFFECTED&lt;/strong&gt;: Arch Linux. Arch never linked SSHD with liblzma. Even with the malicious code in liblzma the backdoor was never exploited. Source: &lt;a href=&quot;https://security.archlinux.org/ASA-202403-1&quot;&gt;https://security.archlinux.org/ASA-202403-1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Social Engineering Summary&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://robmensching.com/blog/posts/2024/03/30/a-microcosm-of-the-interactions-in-open-source-projects/&quot;&gt;https://robmensching.com/blog/posts/2024/03/30/a-microcosm-of-the-interactions-in-open-source-projects/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The narrative outlines a common scenario in open-source projects where a maintainer&apos;s burnout leads to vulnerability exploitation, as seen in the xz/liblzma case. Initially, the maintainer&apos;s struggle to keep up with the project invites an attacker to offer help, gaining trust. Despite the community&apos;s demands for more attention and updates, the maintainer&apos;s mental health and the unpaid nature of the work make it challenging to meet these expectations. The situation escalates with unhelpful comments from the community, further pressuring the maintainer. The story highlights the need for a change in how open-source projects are managed and supported, emphasizing the importance of understanding and addressing the challenges maintainers face.&lt;/p&gt;
&lt;h2&gt;XZ Backdoor Summary&lt;/h2&gt;
&lt;p&gt;The XZ exploit, a critical vulnerability identified within the XZ compression utility, has sparked considerable debate and scrutiny within the cybersecurity realm. This exploit compromises the integrity of the liblzma library, enabling attackers to execute arbitrary code on a victim&apos;s system through a buffer overflow vulnerability. Notably, this vulnerability also facilitated unauthorized access via SSH by manipulating the liblzma library used in SSH processes. The exposure of this exploit prompted an extensive evaluation of security protocols for applications relying on the XZ compression algorithm. In response, developers of the XZ utility have issued patches, and there have been widespread advisories urging users to upgrade their software to the most current version. This event has highlighted the critical need for ongoing security audits and timely updates to thwart similar threats.&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/s_WkMtEPsuE&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>Cursor Editor</title><link>https://christitus.com/cursor-editor/</link><guid isPermaLink="true">https://christitus.com/cursor-editor/</guid><description>&lt;p&gt;Cursor AI Editor is revolutionizing the way developers write code, offering an AI-powered environment that accelerates the software development process. With features like Ctrl+K, Copilot++, and AI chat, Cursor provides an unparalleled coding experience that&apos;s both efficient and intuitive.&lt;/p&gt;
&lt;h2&gt;Key Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ctrl+K&lt;/strong&gt;: This feature allows you to edit and write code seamlessly with AI assistance. Whether you&apos;re tweaking existing code or generating new code from scratch, Ctrl+K simplifies the process.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copilot++&lt;/strong&gt;: Enhance your coding with Copilot++, a native autocomplete feature that suggests mid-line completions and entire diffs, making your coding session smoother.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI Chat&lt;/strong&gt;: Engage in a conversation with an AI that understands your codebase. This feature is perfect for debugging or when you need insights about your project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ctrl+L&lt;/strong&gt;: This feature allows you to edit and write code seamlessly with AI assistance. Whether you&apos;re tweaking existing code or generating new code from scratch, Ctrl+ L simplifies the process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tips and Tricks&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Utilize @ Symbols&lt;/strong&gt;: Quickly reference files or code symbols within your project by using the &quot;@&quot; symbol. This can significantly speed up your coding process by allowing you to generate code with specific dependencies or ask about certain files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fix Lints with Ease&lt;/strong&gt;: Cursor&apos;s AI can help you fix lint errors instantly. Just hover over any lint error and click the &quot;Fix&quot; button for an AI-generated solution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminal Ctrl+K&lt;/strong&gt;: Write terminal commands in plain English. This feature is incredibly useful for writing SQL commands, filling in arg parse arguments, or parsing JSONs with jq.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vision&lt;/strong&gt;: Use images to prompt the AI. This is especially helpful for web UI development, allowing for rapid iteration based on visual inputs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;To experience the full potential of Cursor AI Editor, start by exploring the Ctrl+K feature. It&apos;s the gateway to understanding how AI can assist in your coding tasks. Remember, the more you interact with the AI, the better it becomes at predicting and assisting with your coding needs.&lt;/p&gt;
&lt;p&gt;Cursor AI Editor is not just a tool; it&apos;s a new way of approaching software development. By integrating AI into the coding process, Cursor ensures that developers are equipped with the best resources to build software faster and more efficiently.&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/tjFnifSEEjQ&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, 05 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Cursor AI Editor is revolutionizing the way developers write code, offering an AI-powered environment that accelerates the software development process. With features like Ctrl+K, Copilot++, and AI chat, Cursor provides an unparalleled coding experience that&apos;s both efficient and intuitive.&lt;/p&gt;
&lt;h2&gt;Key Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ctrl+K&lt;/strong&gt;: This feature allows you to edit and write code seamlessly with AI assistance. Whether you&apos;re tweaking existing code or generating new code from scratch, Ctrl+K simplifies the process.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copilot++&lt;/strong&gt;: Enhance your coding with Copilot++, a native autocomplete feature that suggests mid-line completions and entire diffs, making your coding session smoother.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI Chat&lt;/strong&gt;: Engage in a conversation with an AI that understands your codebase. This feature is perfect for debugging or when you need insights about your project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ctrl+L&lt;/strong&gt;: This feature allows you to edit and write code seamlessly with AI assistance. Whether you&apos;re tweaking existing code or generating new code from scratch, Ctrl+ L simplifies the process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tips and Tricks&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Utilize @ Symbols&lt;/strong&gt;: Quickly reference files or code symbols within your project by using the &quot;@&quot; symbol. This can significantly speed up your coding process by allowing you to generate code with specific dependencies or ask about certain files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fix Lints with Ease&lt;/strong&gt;: Cursor&apos;s AI can help you fix lint errors instantly. Just hover over any lint error and click the &quot;Fix&quot; button for an AI-generated solution.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminal Ctrl+K&lt;/strong&gt;: Write terminal commands in plain English. This feature is incredibly useful for writing SQL commands, filling in arg parse arguments, or parsing JSONs with jq.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vision&lt;/strong&gt;: Use images to prompt the AI. This is especially helpful for web UI development, allowing for rapid iteration based on visual inputs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;To experience the full potential of Cursor AI Editor, start by exploring the Ctrl+K feature. It&apos;s the gateway to understanding how AI can assist in your coding tasks. Remember, the more you interact with the AI, the better it becomes at predicting and assisting with your coding needs.&lt;/p&gt;
&lt;p&gt;Cursor AI Editor is not just a tool; it&apos;s a new way of approaching software development. By integrating AI into the coding process, Cursor ensures that developers are equipped with the best resources to build software faster and more efficiently.&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/tjFnifSEEjQ&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>3CX Version 20 Update</title><link>https://christitus.com/3cx-version-20-update/</link><guid isPermaLink="true">https://christitus.com/3cx-version-20-update/</guid><description>&lt;p&gt;3CX just released version 20 of its PBX telephone system. 3CX has been my favorite phone system that I&apos;ve setup at multiple businesses. Let&apos;s explore version 20!&lt;/p&gt;

&lt;h2&gt;New Admin Console&lt;/h2&gt;
&lt;p&gt;All-in-One Admin/Client URL. Version 20 also uses a condensed URL to make it easier to remember. The entire system moves on-prem Debian 10 to 12 and is a huge change.&lt;/p&gt;
&lt;h2&gt;Changes in Administration&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SIP Trunk location moved&lt;/li&gt;
&lt;li&gt;Department Hours added no longer global&lt;/li&gt;
&lt;li&gt;DID routing is now done at the destination (Extension, Ring Group, Digital Receptionist, etc.)&lt;/li&gt;
&lt;li&gt;Queues, Ring Groups, and Digital Receptionists can all be assigned independent holidays and hours of operation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows Softphone (Microsoft Store)&lt;/li&gt;
&lt;li&gt;Google Transcription Update (New API)&lt;/li&gt;
&lt;li&gt;Split DNS (Enhanced security and faster on-prem phones) - Hairpin NAT Support Required&lt;/li&gt;
&lt;li&gt;Improved Reporting (Call logs are improved)&lt;/li&gt;
&lt;li&gt;2FA Added&lt;/li&gt;
&lt;li&gt;Ability to monitor quality of calls&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Call Processing Scripts&lt;/h3&gt;
&lt;p&gt;You can now create custom scripts that route calls based on time, caller id, and a lot more variables. I&apos;ll leave a link below if you want to explore this, but programming specific phone numbers, or numbers with a certain country code and area codes to groups of agents can be huge for businesses.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.3cx.com/docs/manual/call-processing-script/&quot;&gt;https://www.3cx.com/docs/manual/call-processing-script/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;New APIs&lt;/h3&gt;
&lt;p&gt;The update also brings new API access for both the system configuration and client configuration. Each has a new set of calls they will take and you can extract user information to your app or even website.&lt;/p&gt;
&lt;h2&gt;Before You Move&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Check Phone Compatibility &lt;a href=&quot;https://www.3cx.com/sip-phones/&quot;&gt;https://www.3cx.com/sip-phones/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Allocate Downtime (Debian 10 -&amp;gt; 11 -&amp;gt; 12) will take time.&lt;/li&gt;
&lt;li&gt;Check off the official checklist &lt;a href=&quot;https://www.3cx.com/blog/releases/v20-upgrade-checklist-faq/&quot;&gt;https://www.3cx.com/blog/releases/v20-upgrade-checklist-faq/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3CX Setup Videos&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/M7dXvFDhoaI&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;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/P6CS5_CHy8s&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;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/JS0voPjdZMM&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, 28 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;3CX just released version 20 of its PBX telephone system. 3CX has been my favorite phone system that I&apos;ve setup at multiple businesses. Let&apos;s explore version 20!&lt;/p&gt;

&lt;h2&gt;New Admin Console&lt;/h2&gt;
&lt;p&gt;All-in-One Admin/Client URL. Version 20 also uses a condensed URL to make it easier to remember. The entire system moves on-prem Debian 10 to 12 and is a huge change.&lt;/p&gt;
&lt;h2&gt;Changes in Administration&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SIP Trunk location moved&lt;/li&gt;
&lt;li&gt;Department Hours added no longer global&lt;/li&gt;
&lt;li&gt;DID routing is now done at the destination (Extension, Ring Group, Digital Receptionist, etc.)&lt;/li&gt;
&lt;li&gt;Queues, Ring Groups, and Digital Receptionists can all be assigned independent holidays and hours of operation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;New Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Windows Softphone (Microsoft Store)&lt;/li&gt;
&lt;li&gt;Google Transcription Update (New API)&lt;/li&gt;
&lt;li&gt;Split DNS (Enhanced security and faster on-prem phones) - Hairpin NAT Support Required&lt;/li&gt;
&lt;li&gt;Improved Reporting (Call logs are improved)&lt;/li&gt;
&lt;li&gt;2FA Added&lt;/li&gt;
&lt;li&gt;Ability to monitor quality of calls&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Call Processing Scripts&lt;/h3&gt;
&lt;p&gt;You can now create custom scripts that route calls based on time, caller id, and a lot more variables. I&apos;ll leave a link below if you want to explore this, but programming specific phone numbers, or numbers with a certain country code and area codes to groups of agents can be huge for businesses.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.3cx.com/docs/manual/call-processing-script/&quot;&gt;https://www.3cx.com/docs/manual/call-processing-script/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;New APIs&lt;/h3&gt;
&lt;p&gt;The update also brings new API access for both the system configuration and client configuration. Each has a new set of calls they will take and you can extract user information to your app or even website.&lt;/p&gt;
&lt;h2&gt;Before You Move&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Check Phone Compatibility &lt;a href=&quot;https://www.3cx.com/sip-phones/&quot;&gt;https://www.3cx.com/sip-phones/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Allocate Downtime (Debian 10 -&amp;gt; 11 -&amp;gt; 12) will take time.&lt;/li&gt;
&lt;li&gt;Check off the official checklist &lt;a href=&quot;https://www.3cx.com/blog/releases/v20-upgrade-checklist-faq/&quot;&gt;https://www.3cx.com/blog/releases/v20-upgrade-checklist-faq/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;3CX Setup Videos&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/M7dXvFDhoaI&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;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/P6CS5_CHy8s&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;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/JS0voPjdZMM&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 Ultimate System</title><link>https://christitus.com/the-ultimate-system/</link><guid isPermaLink="true">https://christitus.com/the-ultimate-system/</guid><description>&lt;p&gt;The Ulimate System will look different for everyone, but here is an outline of what you need to consider when making yours as I overview mine.&lt;/p&gt;

&lt;p&gt;The purpose of my ultimate system is to have the most enjoyment out of my PC experience while sacrificing nothing to do everything I want to do at 100% efficiency.&lt;/p&gt;
&lt;h2&gt;Hardware&lt;/h2&gt;
&lt;p&gt;Not all hardware is created equal. While I could buy more powerful parts this was one of the most powerful systems I could build with my requirements. Here is all my requirements for Hardware and a link to my final system build.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Low Audio Footprint (No higher than 30dB)&lt;/li&gt;
&lt;li&gt;2 GPU capable (Gaming and AV Work capable in multiple operating systems at the same time)&lt;/li&gt;
&lt;li&gt;Large amount of FULL cores. (No efficiency cores that have lower VM performance.)&lt;/li&gt;
&lt;li&gt;Large amount of Memory for Virtual Machines&lt;/li&gt;
&lt;li&gt;Expandable with Large amount of PCIe Ports (6+ Ports with at least 2 16x slots)&lt;/li&gt;
&lt;li&gt;High-end motherboard (Helps avoid IOMMU Group errors)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These requirements are to avoid past issues I&apos;ve had with systems. It is not about getting the highest number, but about avoiding problems you&apos;ve encountered in the past.&lt;/p&gt;
&lt;h3&gt;My Specifications&lt;/h3&gt;
&lt;p&gt;Build Link: &lt;a href=&quot;https://superworkstations.com/configurations/titus-hp-z8-g5-fury/&quot;&gt;https://superworkstations.com/configurations/titus-hp-z8-g5-fury/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Intel Xeon w5-3435X | 16 cores, 3.1 GHz base frequency&lt;/li&gt;
&lt;li&gt;64GB (4x 16GB) of 4800MT/s DDR5 ECC Memory&lt;/li&gt;
&lt;li&gt;2x 2TB NVMe M.2 PCIe 4.0 Solid-State Drive&lt;/li&gt;
&lt;li&gt;AMD Sapphire Nitro+ 7800XT (Main GPU)&lt;/li&gt;
&lt;li&gt;NVIDIA GeForce RTX 2060 (2nd GPU)&lt;/li&gt;
&lt;li&gt;Single HP Z8 G5 Fury 1125W Power Supply&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Base Operating System&lt;/h2&gt;
&lt;p&gt;I always go back and forth between Debian and Arch Linux for my base. They are both wonderful options with Arch giving access to the newest hardware since it runs on a newer kernel with newer packages and Debian being more stable with older packages. In the end, I have more fun on Arch and will be my choice for my main system.&lt;/p&gt;
&lt;p&gt;There are many guides on how to install Arch Linux, but here are some of my videos going over the various ways I&apos;ve done it in the past.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-- ArchTitus in 2 Minutes --&lt;/th&gt;
&lt;th&gt;-- Archfi Install --&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/hKpxMWm5l7w&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;/td&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/GUtpHFI-vjg&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;The Desktop&lt;/h2&gt;
&lt;p&gt;Most people need a user friendly desktop environment like plasma that you select during the install process. While that is nice for newer users, a tiling window manager is what feels the best to me these days. After years of switching between them all, there is only one that I find the best. DWM from suckless is the one I can do anything with and have zero limitations. I want a new feature, just patch it! Otherwise, everything just works as it always has.&lt;/p&gt;
&lt;p&gt;Official Site for DWM &lt;a href=&quot;https://dwm.suckless.org/&quot;&gt;https://dwm.suckless.org/&lt;/a&gt;
My DWM Configuration &lt;a href=&quot;https://github.com/ChrisTitusTech/dwm-titus&quot;&gt;https://github.com/ChrisTitusTech/dwm-titus&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-- DWM Walkthrough --&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/JXVle0nyA-o&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Removing Friction&lt;/h3&gt;
&lt;p&gt;When using the desktop think about tasks you do everyday and if they can be automated. This will save you time as you use the computer and lead to a happier computing experience.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Launching my Windows 11 virtual machine happens everyday! Solution? Start Virtual Machine on boot! &lt;code&gt;sudo virsh enable win11&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Running a HUGO server to see my test website when creating pages. Solution? Create a user Systemd service that runs when the user logs in:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;~/.config/systemd/user/hugo.service&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=hugo website server

[Service]
Type=simple
StandardOutput=journal
WorkingDirectory=/home/titus/github/website
ExecStart=hugo server -FD

[Install]
WantedBy=default.target
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then issue user command &lt;strong&gt;NO SUDO&lt;/strong&gt; &lt;code&gt;systemctl --user enable hugo.service&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Running Programs by launching start menu. Solution? Hotkey the programs to launch them faster! In my instance, I&apos;d edit config.h in my dwm folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Windows in Linux with PCI Passthrough&lt;/h2&gt;
&lt;p&gt;Linux is great, but sometimes it just isn&apos;t the right tool for what I need. That is why I have a full VM with a dedicated GPU, nvme, and usb card ready to go for anything I need.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;:
PCI passthrough is not for the faint of heart. Some motherboards do not separate IOMMU groups properly which means you can&apos;t isolate the PCI slots to pass them through and you CAN NOT do this on those systems. Laptops and cheap motherboards have the biggest issues.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;QuickPassthrough&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/the-ultimate-system/quickpass.webp&quot; alt=&quot;Quickpass&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Github: &lt;a href=&quot;https://github.com/HikariKnight/quickpassthrough&quot;&gt;https://github.com/HikariKnight/quickpassthrough&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Made by HikariKnight it is an amazing project that makes passthrough much simpler. It will auto blocklist the PCI id&apos;s and make the needed system modifications while holding your hand through the process. If you watch my run of it, there was a bug with &lt;code&gt;mkinitcpio&lt;/code&gt; that made a MODULES=() entry. He has fixed that and said that the latest version is even better. While there is no way to make this perfect and work on every system it has removed a LOT of the legwork.&lt;/p&gt;
&lt;h2&gt;My Setup Videos&lt;/h2&gt;
&lt;p&gt;Here are all the livestreams where I go through the ENTIRE setup.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-- Arch Install --&lt;/th&gt;
&lt;th&gt;-- QEMU/Windows Install --&lt;/th&gt;
&lt;th&gt;-- Looking Glass --&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/Y7LTdEwR9M8&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;/td&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/K2gliga5Vwc&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;/td&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/01R8Ft1BdxE&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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/zq6yvQifyDw&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, 20 Mar 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Ulimate System will look different for everyone, but here is an outline of what you need to consider when making yours as I overview mine.&lt;/p&gt;

&lt;p&gt;The purpose of my ultimate system is to have the most enjoyment out of my PC experience while sacrificing nothing to do everything I want to do at 100% efficiency.&lt;/p&gt;
&lt;h2&gt;Hardware&lt;/h2&gt;
&lt;p&gt;Not all hardware is created equal. While I could buy more powerful parts this was one of the most powerful systems I could build with my requirements. Here is all my requirements for Hardware and a link to my final system build.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Low Audio Footprint (No higher than 30dB)&lt;/li&gt;
&lt;li&gt;2 GPU capable (Gaming and AV Work capable in multiple operating systems at the same time)&lt;/li&gt;
&lt;li&gt;Large amount of FULL cores. (No efficiency cores that have lower VM performance.)&lt;/li&gt;
&lt;li&gt;Large amount of Memory for Virtual Machines&lt;/li&gt;
&lt;li&gt;Expandable with Large amount of PCIe Ports (6+ Ports with at least 2 16x slots)&lt;/li&gt;
&lt;li&gt;High-end motherboard (Helps avoid IOMMU Group errors)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These requirements are to avoid past issues I&apos;ve had with systems. It is not about getting the highest number, but about avoiding problems you&apos;ve encountered in the past.&lt;/p&gt;
&lt;h3&gt;My Specifications&lt;/h3&gt;
&lt;p&gt;Build Link: &lt;a href=&quot;https://superworkstations.com/configurations/titus-hp-z8-g5-fury/&quot;&gt;https://superworkstations.com/configurations/titus-hp-z8-g5-fury/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Intel Xeon w5-3435X | 16 cores, 3.1 GHz base frequency&lt;/li&gt;
&lt;li&gt;64GB (4x 16GB) of 4800MT/s DDR5 ECC Memory&lt;/li&gt;
&lt;li&gt;2x 2TB NVMe M.2 PCIe 4.0 Solid-State Drive&lt;/li&gt;
&lt;li&gt;AMD Sapphire Nitro+ 7800XT (Main GPU)&lt;/li&gt;
&lt;li&gt;NVIDIA GeForce RTX 2060 (2nd GPU)&lt;/li&gt;
&lt;li&gt;Single HP Z8 G5 Fury 1125W Power Supply&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Base Operating System&lt;/h2&gt;
&lt;p&gt;I always go back and forth between Debian and Arch Linux for my base. They are both wonderful options with Arch giving access to the newest hardware since it runs on a newer kernel with newer packages and Debian being more stable with older packages. In the end, I have more fun on Arch and will be my choice for my main system.&lt;/p&gt;
&lt;p&gt;There are many guides on how to install Arch Linux, but here are some of my videos going over the various ways I&apos;ve done it in the past.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-- ArchTitus in 2 Minutes --&lt;/th&gt;
&lt;th&gt;-- Archfi Install --&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/hKpxMWm5l7w&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;/td&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/GUtpHFI-vjg&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;The Desktop&lt;/h2&gt;
&lt;p&gt;Most people need a user friendly desktop environment like plasma that you select during the install process. While that is nice for newer users, a tiling window manager is what feels the best to me these days. After years of switching between them all, there is only one that I find the best. DWM from suckless is the one I can do anything with and have zero limitations. I want a new feature, just patch it! Otherwise, everything just works as it always has.&lt;/p&gt;
&lt;p&gt;Official Site for DWM &lt;a href=&quot;https://dwm.suckless.org/&quot;&gt;https://dwm.suckless.org/&lt;/a&gt;
My DWM Configuration &lt;a href=&quot;https://github.com/ChrisTitusTech/dwm-titus&quot;&gt;https://github.com/ChrisTitusTech/dwm-titus&lt;/a&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-- DWM Walkthrough --&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/JXVle0nyA-o&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Removing Friction&lt;/h3&gt;
&lt;p&gt;When using the desktop think about tasks you do everyday and if they can be automated. This will save you time as you use the computer and lead to a happier computing experience.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Launching my Windows 11 virtual machine happens everyday! Solution? Start Virtual Machine on boot! &lt;code&gt;sudo virsh enable win11&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Running a HUGO server to see my test website when creating pages. Solution? Create a user Systemd service that runs when the user logs in:&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;~/.config/systemd/user/hugo.service&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=hugo website server

[Service]
Type=simple
StandardOutput=journal
WorkingDirectory=/home/titus/github/website
ExecStart=hugo server -FD

[Install]
WantedBy=default.target
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then issue user command &lt;strong&gt;NO SUDO&lt;/strong&gt; &lt;code&gt;systemctl --user enable hugo.service&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Running Programs by launching start menu. Solution? Hotkey the programs to launch them faster! In my instance, I&apos;d edit config.h in my dwm folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Windows in Linux with PCI Passthrough&lt;/h2&gt;
&lt;p&gt;Linux is great, but sometimes it just isn&apos;t the right tool for what I need. That is why I have a full VM with a dedicated GPU, nvme, and usb card ready to go for anything I need.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;:
PCI passthrough is not for the faint of heart. Some motherboards do not separate IOMMU groups properly which means you can&apos;t isolate the PCI slots to pass them through and you CAN NOT do this on those systems. Laptops and cheap motherboards have the biggest issues.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;QuickPassthrough&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2024/the-ultimate-system/quickpass.webp&quot; alt=&quot;Quickpass&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Github: &lt;a href=&quot;https://github.com/HikariKnight/quickpassthrough&quot;&gt;https://github.com/HikariKnight/quickpassthrough&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Made by HikariKnight it is an amazing project that makes passthrough much simpler. It will auto blocklist the PCI id&apos;s and make the needed system modifications while holding your hand through the process. If you watch my run of it, there was a bug with &lt;code&gt;mkinitcpio&lt;/code&gt; that made a MODULES=() entry. He has fixed that and said that the latest version is even better. While there is no way to make this perfect and work on every system it has removed a LOT of the legwork.&lt;/p&gt;
&lt;h2&gt;My Setup Videos&lt;/h2&gt;
&lt;p&gt;Here are all the livestreams where I go through the ENTIRE setup.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-- Arch Install --&lt;/th&gt;
&lt;th&gt;-- QEMU/Windows Install --&lt;/th&gt;
&lt;th&gt;-- Looking Glass --&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/Y7LTdEwR9M8&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;/td&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/K2gliga5Vwc&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;/td&gt;
&lt;td&gt;&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/01R8Ft1BdxE&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;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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/zq6yvQifyDw&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>Remove Youtube Shorts</title><link>https://christitus.com/remove-youtube-shorts/</link><guid isPermaLink="true">https://christitus.com/remove-youtube-shorts/</guid><description>&lt;p&gt;Remove YouTube shorts from your video browsing experience with the following blocklists!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/remove-youtube-shorts/youtube.webp&quot; alt=&quot;Youtube&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Blocklist&lt;/h2&gt;
&lt;p&gt;Install ublock origin and use the following filter under &quot;My Filters&quot; in settings.&lt;/p&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/gijsdev/ublock-hide-yt-shorts&quot;&gt;https://github.com/gijsdev/ublock-hide-yt-shorts&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;! Title: Hide YouTube Shorts
! Description: Hide all traces of YouTube shorts videos on YouTube
! Version: 1.8.0
! Last modified: 2023-01-08 20:02
! Expires: 2 weeks (update frequency)
! Homepage: https://github.com/gijsdev/ublock-hide-yt-shorts
! License: https://github.com/gijsdev/ublock-hide-yt-shorts/blob/master/LICENSE.md

! Hide all videos containing the phrase &quot;#shorts&quot;
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#shorts))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#Shorts))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#short))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#Short))

! Hide all videos with the shorts indicator on the thumbnail
youtube.com##ytd-grid-video-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-rich-item-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-video-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-item-section-renderer.ytd-section-list-renderer[page-subtype=&quot;subscriptions&quot;]:has(ytd-video-renderer:has([overlay-style=&quot;SHORTS&quot;]))

! Hide shorts button in sidebar
youtube.com##ytd-guide-entry-renderer:has-text(Shorts)
youtube.com##ytd-mini-guide-entry-renderer:has-text(Shorts)

! Hide shorts section on homepage
youtube.com##ytd-rich-section-renderer:has(#rich-shelf-header:has-text(Shorts))
youtube.com##ytd-reel-shelf-renderer:has(.ytd-reel-shelf-renderer:has-text(Shorts))

! Hide shorts tab on channel pages
! Old style
youtube.com##tp-yt-paper-tab:has(.tp-yt-paper-tab:has-text(Shorts))
! New style (2023-10)
youtube.com##yt-tab-shape:has-text(/^Shorts$/)

! Hide shorts in video descriptions
youtube.com##ytd-reel-shelf-renderer.ytd-structured-description-content-renderer:has-text(&quot;Shorts remixing this video&quot;)

! Remove empty spaces in grid
youtube.com##ytd-rich-grid-row,#contents.ytd-rich-grid-row:style(display: contents !important)


!!! MOBILE !!!

! Hide all videos in home feed containing the phrase &quot;#shorts&quot;
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#shorts))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#Shorts))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#short))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#Short))

! Hide all videos in subscription feed containing the phrase &quot;#shorts&quot;
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#shorts))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#Shorts))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#short))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#Short))

! Hide shorts button in the bottom navigation bar
m.youtube.com##ytm-pivot-bar-item-renderer:has(.pivot-shorts)

! Hide all videos with the shorts indicator on the thumbnail
m.youtube.com##ytm-video-with-context-renderer:has([data-style=&quot;SHORTS&quot;])

! Hide shorts sections
m.youtube.com##ytm-rich-section-renderer:has(ytm-reel-shelf-renderer:has(.reel-shelf-title-wrapper:has-text(Shorts)))
m.youtube.com##ytm-reel-shelf-renderer.item:has(.reel-shelf-title-wrapper:has-text(Shorts))

! Hide shorts tab on channel pages
m.youtube.com##.single-column-browse-results-tabs&amp;gt;a:has-text(Shorts)
&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/Nfr0uIU2lDI&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, 08 Jan 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Remove YouTube shorts from your video browsing experience with the following blocklists!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2024/remove-youtube-shorts/youtube.webp&quot; alt=&quot;Youtube&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Blocklist&lt;/h2&gt;
&lt;p&gt;Install ublock origin and use the following filter under &quot;My Filters&quot; in settings.&lt;/p&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/gijsdev/ublock-hide-yt-shorts&quot;&gt;https://github.com/gijsdev/ublock-hide-yt-shorts&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;! Title: Hide YouTube Shorts
! Description: Hide all traces of YouTube shorts videos on YouTube
! Version: 1.8.0
! Last modified: 2023-01-08 20:02
! Expires: 2 weeks (update frequency)
! Homepage: https://github.com/gijsdev/ublock-hide-yt-shorts
! License: https://github.com/gijsdev/ublock-hide-yt-shorts/blob/master/LICENSE.md

! Hide all videos containing the phrase &quot;#shorts&quot;
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#shorts))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#Shorts))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#short))
youtube.com##ytd-grid-video-renderer:has(#video-title:has-text(#Short))

! Hide all videos with the shorts indicator on the thumbnail
youtube.com##ytd-grid-video-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-rich-item-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-video-renderer:has([overlay-style=&quot;SHORTS&quot;])
youtube.com##ytd-item-section-renderer.ytd-section-list-renderer[page-subtype=&quot;subscriptions&quot;]:has(ytd-video-renderer:has([overlay-style=&quot;SHORTS&quot;]))

! Hide shorts button in sidebar
youtube.com##ytd-guide-entry-renderer:has-text(Shorts)
youtube.com##ytd-mini-guide-entry-renderer:has-text(Shorts)

! Hide shorts section on homepage
youtube.com##ytd-rich-section-renderer:has(#rich-shelf-header:has-text(Shorts))
youtube.com##ytd-reel-shelf-renderer:has(.ytd-reel-shelf-renderer:has-text(Shorts))

! Hide shorts tab on channel pages
! Old style
youtube.com##tp-yt-paper-tab:has(.tp-yt-paper-tab:has-text(Shorts))
! New style (2023-10)
youtube.com##yt-tab-shape:has-text(/^Shorts$/)

! Hide shorts in video descriptions
youtube.com##ytd-reel-shelf-renderer.ytd-structured-description-content-renderer:has-text(&quot;Shorts remixing this video&quot;)

! Remove empty spaces in grid
youtube.com##ytd-rich-grid-row,#contents.ytd-rich-grid-row:style(display: contents !important)


!!! MOBILE !!!

! Hide all videos in home feed containing the phrase &quot;#shorts&quot;
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#shorts))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#Shorts))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#short))
m.youtube.com##ytm-rich-item-renderer:has(#video-title:has-text(#Short))

! Hide all videos in subscription feed containing the phrase &quot;#shorts&quot;
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#shorts))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#Shorts))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#short))
m.youtube.com##ytm-item-section-renderer:has(#video-title:has-text(#Short))

! Hide shorts button in the bottom navigation bar
m.youtube.com##ytm-pivot-bar-item-renderer:has(.pivot-shorts)

! Hide all videos with the shorts indicator on the thumbnail
m.youtube.com##ytm-video-with-context-renderer:has([data-style=&quot;SHORTS&quot;])

! Hide shorts sections
m.youtube.com##ytm-rich-section-renderer:has(ytm-reel-shelf-renderer:has(.reel-shelf-title-wrapper:has-text(Shorts)))
m.youtube.com##ytm-reel-shelf-renderer.item:has(.reel-shelf-title-wrapper:has-text(Shorts))

! Hide shorts tab on channel pages
m.youtube.com##.single-column-browse-results-tabs&amp;gt;a:has-text(Shorts)
&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/Nfr0uIU2lDI&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>My New Editor</title><link>https://christitus.com/my-new-editor/</link><guid isPermaLink="true">https://christitus.com/my-new-editor/</guid><description>&lt;p&gt;After years of switching IDE&apos;s and editors, then trying dozens of vim configurations... I HAVE FOUND THE PERFECT EDITOR! My Neovim configuration I have tweaked to perfection.&lt;/p&gt;

&lt;p&gt;I&apos;m not a god programmer the likes of the primeagen, but a mere mortal that has taken the time to finally come to a spot that makes my configuration the perfect one for me and possibly you.&lt;/p&gt;
&lt;h2&gt;Neovim Problems&lt;/h2&gt;
&lt;p&gt;I&apos;ve done several iterations of setting up neovim from scratch, to using neovim distros like lazyvim, nvchad, and lunarvim. These &quot;distros&quot; just customize too much for my liking.&lt;/p&gt;
&lt;p&gt;Starting from scratch is rough, because of all the options and customization that needs to be done. This is why people end up using vscode because it just works. However, there is a better way!&lt;/p&gt;
&lt;h2&gt;Kickstart&lt;/h2&gt;
&lt;p&gt;One of the devs of Neovim made an amazing kickstart project &lt;a href=&quot;https://github.com/nvim-lua/kickstart.nvim&quot;&gt;https://github.com/nvim-lua/kickstart.nvim&lt;/a&gt; that I have taken and make my own modifications to.&lt;/p&gt;
&lt;p&gt;The entire project is meant as a jumping off point. Giving you a functional LSP and the essentials that everyone wants in Neovim, but not a bunch of customizations that you may not want. I recommend referring back to this project often and checking for updates.&lt;/p&gt;
&lt;h2&gt;My Neovim&lt;/h2&gt;
&lt;p&gt;Using the kickstart base, here are the customizations I&apos;ve made for my neovim. &lt;a href=&quot;https://github.com/ChrisTitusTech/neovim&quot;&gt;https://github.com/ChrisTitusTech/neovim&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;copilot.vim added&lt;/li&gt;
&lt;li&gt;synthwave84 theme&lt;/li&gt;
&lt;li&gt;spellcheck on startup&lt;/li&gt;
&lt;li&gt;telescope ignores images by default&lt;/li&gt;
&lt;li&gt;custom clipboard image addon for markdown files&lt;/li&gt;
&lt;li&gt;windows fixes&lt;/li&gt;
&lt;li&gt;undotree addition (F5 Hotkey)&lt;/li&gt;
&lt;li&gt;wakatime for tracking time spent programming&lt;/li&gt;
&lt;li&gt;autosave.vim&lt;/li&gt;
&lt;li&gt;suda.vim to elevate to sudo and save file&lt;/li&gt;
&lt;li&gt;Alpha Dashboard on startup for recent items and projects (Leader + a to switch to dashboard at anytime)&lt;/li&gt;
&lt;li&gt;zoxide for project search&lt;/li&gt;
&lt;li&gt;New Tab Hotkeys (leader + 1-5 for selecting tab, leader+t for new tab, and leader+c to closetab)&lt;/li&gt;
&lt;li&gt;jj to quick esc&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/WgXO2cvmdQc&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 Nov 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After years of switching IDE&apos;s and editors, then trying dozens of vim configurations... I HAVE FOUND THE PERFECT EDITOR! My Neovim configuration I have tweaked to perfection.&lt;/p&gt;

&lt;p&gt;I&apos;m not a god programmer the likes of the primeagen, but a mere mortal that has taken the time to finally come to a spot that makes my configuration the perfect one for me and possibly you.&lt;/p&gt;
&lt;h2&gt;Neovim Problems&lt;/h2&gt;
&lt;p&gt;I&apos;ve done several iterations of setting up neovim from scratch, to using neovim distros like lazyvim, nvchad, and lunarvim. These &quot;distros&quot; just customize too much for my liking.&lt;/p&gt;
&lt;p&gt;Starting from scratch is rough, because of all the options and customization that needs to be done. This is why people end up using vscode because it just works. However, there is a better way!&lt;/p&gt;
&lt;h2&gt;Kickstart&lt;/h2&gt;
&lt;p&gt;One of the devs of Neovim made an amazing kickstart project &lt;a href=&quot;https://github.com/nvim-lua/kickstart.nvim&quot;&gt;https://github.com/nvim-lua/kickstart.nvim&lt;/a&gt; that I have taken and make my own modifications to.&lt;/p&gt;
&lt;p&gt;The entire project is meant as a jumping off point. Giving you a functional LSP and the essentials that everyone wants in Neovim, but not a bunch of customizations that you may not want. I recommend referring back to this project often and checking for updates.&lt;/p&gt;
&lt;h2&gt;My Neovim&lt;/h2&gt;
&lt;p&gt;Using the kickstart base, here are the customizations I&apos;ve made for my neovim. &lt;a href=&quot;https://github.com/ChrisTitusTech/neovim&quot;&gt;https://github.com/ChrisTitusTech/neovim&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;copilot.vim added&lt;/li&gt;
&lt;li&gt;synthwave84 theme&lt;/li&gt;
&lt;li&gt;spellcheck on startup&lt;/li&gt;
&lt;li&gt;telescope ignores images by default&lt;/li&gt;
&lt;li&gt;custom clipboard image addon for markdown files&lt;/li&gt;
&lt;li&gt;windows fixes&lt;/li&gt;
&lt;li&gt;undotree addition (F5 Hotkey)&lt;/li&gt;
&lt;li&gt;wakatime for tracking time spent programming&lt;/li&gt;
&lt;li&gt;autosave.vim&lt;/li&gt;
&lt;li&gt;suda.vim to elevate to sudo and save file&lt;/li&gt;
&lt;li&gt;Alpha Dashboard on startup for recent items and projects (Leader + a to switch to dashboard at anytime)&lt;/li&gt;
&lt;li&gt;zoxide for project search&lt;/li&gt;
&lt;li&gt;New Tab Hotkeys (leader + 1-5 for selecting tab, leader+t for new tab, and leader+c to closetab)&lt;/li&gt;
&lt;li&gt;jj to quick esc&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/WgXO2cvmdQc&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>Installing Arch in 2 Minutes</title><link>https://christitus.com/installing-arch-in-2-minutes/</link><guid isPermaLink="true">https://christitus.com/installing-arch-in-2-minutes/</guid><description>&lt;p&gt;You can install Arch Linux in 120 seconds with my script.&lt;/p&gt;

&lt;h2&gt;One Line Command&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;2026 Update: ArchTitus has moved to Linutil project launch linutil -&amp;gt; System Settings -&amp;gt; Arch -&amp;gt; Server Setup&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL christitus.com/linux | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The Evolution of ArchTitus&lt;/h2&gt;
&lt;p&gt;The script is based on ArchTitus from several years ago that I had archived on GitHub. The project at the time was meant as an all-in-one script to install various desktop environments and configurations. As the official Arch script has become good, I didn&apos;t see a point in my script anymore... but recently my mind changed on this. Instead of making a project that everyone uses, I made it do the things I needed and the official script didn&apos;t do.&lt;/p&gt;
&lt;p&gt;I now have began modifying the project to specify my configurations.&lt;/p&gt;
&lt;h2&gt;The First Change - SPEED&lt;/h2&gt;
&lt;p&gt;I install Linux a lot and most times for testing. I generally don&apos;t care which distro I use, but find that Arch can be used the quickest with a minimal iso and a script for base install. The &lt;code&gt;server&lt;/code&gt; option in the script installs only the base system with my configuration. No GUI elements or desktop environments and tons of crap. Just a nice simple server CLI that I can play on.&lt;/p&gt;
&lt;h2&gt;Future Changes&lt;/h2&gt;
&lt;p&gt;There are 3 additional changes that I&apos;m working on.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DWM-Titus - MY DWM configuration&lt;/li&gt;
&lt;li&gt;Hyprland-Titus - My Hyprland Configuration&lt;/li&gt;
&lt;li&gt;KDE - My beginner friend config meant for new Linux users.&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/hKpxMWm5l7w&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, 07 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You can install Arch Linux in 120 seconds with my script.&lt;/p&gt;

&lt;h2&gt;One Line Command&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;2026 Update: ArchTitus has moved to Linutil project launch linutil -&amp;gt; System Settings -&amp;gt; Arch -&amp;gt; Server Setup&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL christitus.com/linux | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;The Evolution of ArchTitus&lt;/h2&gt;
&lt;p&gt;The script is based on ArchTitus from several years ago that I had archived on GitHub. The project at the time was meant as an all-in-one script to install various desktop environments and configurations. As the official Arch script has become good, I didn&apos;t see a point in my script anymore... but recently my mind changed on this. Instead of making a project that everyone uses, I made it do the things I needed and the official script didn&apos;t do.&lt;/p&gt;
&lt;p&gt;I now have began modifying the project to specify my configurations.&lt;/p&gt;
&lt;h2&gt;The First Change - SPEED&lt;/h2&gt;
&lt;p&gt;I install Linux a lot and most times for testing. I generally don&apos;t care which distro I use, but find that Arch can be used the quickest with a minimal iso and a script for base install. The &lt;code&gt;server&lt;/code&gt; option in the script installs only the base system with my configuration. No GUI elements or desktop environments and tons of crap. Just a nice simple server CLI that I can play on.&lt;/p&gt;
&lt;h2&gt;Future Changes&lt;/h2&gt;
&lt;p&gt;There are 3 additional changes that I&apos;m working on.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DWM-Titus - MY DWM configuration&lt;/li&gt;
&lt;li&gt;Hyprland-Titus - My Hyprland Configuration&lt;/li&gt;
&lt;li&gt;KDE - My beginner friend config meant for new Linux users.&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/hKpxMWm5l7w&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>Creating a Secure System</title><link>https://christitus.com/creating-a-secure-system/</link><guid isPermaLink="true">https://christitus.com/creating-a-secure-system/</guid><description>&lt;p&gt;Security is a journey not a destination. Let&apos;s go over all the ways you aren&apos;t secure and how you can minimize your footprint.&lt;/p&gt;

&lt;p&gt;If you think you can just install a VPN and you are secure... you are probably an easy target.&lt;/p&gt;
&lt;h2&gt;Hardware&lt;/h2&gt;
&lt;p&gt;Most hardware these days has a firmware that is loaded before the operating system is even loaded. This is the most dangerous security hole as when exploited it can give the attacked hardware level access to change files, remotely power on, and complete out of band access.&lt;/p&gt;
&lt;p&gt;Intel has done the worst job at securing down their system as it has been exploited numerous times as documented here: &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_Management_Engine#Security_vulnerabilities&quot;&gt;https://en.wikipedia.org/wiki/Intel_Management_Engine#Security_vulnerabilities&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can help mitigate these attacks by keeping Intel ME up to date, but the only way to close the hole would be removal which involves flashing the hardware firmware and can not be done on many systems. I highly recommend the open source tool &lt;a href=&quot;https://meshcentral.com/&quot;&gt;https://meshcentral.com/&lt;/a&gt; that is free and can update a lot these systems for you without much hassle. It also offers ways to setup this out of band access on the system with vPro capabilities.&lt;/p&gt;
&lt;p&gt;In the server sphere you have Dell iDRAC and HP iLO for out of band access that you need to secure as well.&lt;/p&gt;
&lt;p&gt;AMD doesn&apos;t have as many vulnurbilities, but does have security concerns with AMD Platform Security Processor (PSP) that was added in 2013.&lt;/p&gt;
&lt;h2&gt;Operating Systems&lt;/h2&gt;
&lt;p&gt;Windows is the most problamatic with extensive telemetry and the most remote execution CVEs out of any operating system. However, I&apos;d caution against using a stock Linux install as well, since many distributions like Arch Linux do not even come with a firewall. I find that &lt;a href=&quot;https://www.qubes-os.org/&quot;&gt;QubesOS&lt;/a&gt; is the best choice as it has a locked down OS and extensive compartmentalisation via Virtual Machines and seperated networks. However, there is a difficult learning curve.&lt;/p&gt;
&lt;h2&gt;Browsers&lt;/h2&gt;
&lt;p&gt;There isn&apos;t a web browser I&apos;d recommend. I&apos;m currently using Brave, but it could be better. All web browsers have their faults and most of them are running off the Google Chrome codebase.&lt;/p&gt;
&lt;p&gt;Probably the best would be a private firefox you make yourself with this script: &lt;a href=&quot;https://github.com/simeononsecurity/FireFox-Privacy-Script&quot;&gt;https://github.com/simeononsecurity/FireFox-Privacy-Script&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Password Managers&lt;/h2&gt;
&lt;p&gt;Self hosted in a secure location would be the best, but convience often gets that better of us. Most recommend is &lt;a href=&quot;https://bitwarden.com/&quot;&gt;Bitwarden&lt;/a&gt;, but I&apos;d caution against many online password managers as if someone gets your login, everything will be compromosied. The best solution would be a Yubikey or another FIDO device to physically authenticate any new logins or devices.&lt;/p&gt;
&lt;h2&gt;Network Gateway and Open Ports&lt;/h2&gt;
&lt;p&gt;Test your network and see what ports are open using &amp;lt;&lt;a href=&quot;http://grc.com&quot;&gt;grc.com&lt;/a&gt;&amp;gt;. You should not be port forwarding or using uPnP in your router if you are trying to be secure. The basic shield up! test should give you a good idea of open ports and areas where you can improve your network. While having an open port isn&apos;t the end of the world, it is an increased attack surface that can be exploited.&lt;/p&gt;
&lt;h2&gt;Don&apos;t be Stupid&lt;/h2&gt;
&lt;p&gt;Downloading hacked programs, clicking on phishing links, and installing 50 extensions in your browser are not good practices. There are some tools that help train yourself, but they are not bulletproof. Security is about layering and using common sense. You can never be 100% secure and private.&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/ffnIL6hE__w&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, 24 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Security is a journey not a destination. Let&apos;s go over all the ways you aren&apos;t secure and how you can minimize your footprint.&lt;/p&gt;

&lt;p&gt;If you think you can just install a VPN and you are secure... you are probably an easy target.&lt;/p&gt;
&lt;h2&gt;Hardware&lt;/h2&gt;
&lt;p&gt;Most hardware these days has a firmware that is loaded before the operating system is even loaded. This is the most dangerous security hole as when exploited it can give the attacked hardware level access to change files, remotely power on, and complete out of band access.&lt;/p&gt;
&lt;p&gt;Intel has done the worst job at securing down their system as it has been exploited numerous times as documented here: &lt;a href=&quot;https://en.wikipedia.org/wiki/Intel_Management_Engine#Security_vulnerabilities&quot;&gt;https://en.wikipedia.org/wiki/Intel_Management_Engine#Security_vulnerabilities&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can help mitigate these attacks by keeping Intel ME up to date, but the only way to close the hole would be removal which involves flashing the hardware firmware and can not be done on many systems. I highly recommend the open source tool &lt;a href=&quot;https://meshcentral.com/&quot;&gt;https://meshcentral.com/&lt;/a&gt; that is free and can update a lot these systems for you without much hassle. It also offers ways to setup this out of band access on the system with vPro capabilities.&lt;/p&gt;
&lt;p&gt;In the server sphere you have Dell iDRAC and HP iLO for out of band access that you need to secure as well.&lt;/p&gt;
&lt;p&gt;AMD doesn&apos;t have as many vulnurbilities, but does have security concerns with AMD Platform Security Processor (PSP) that was added in 2013.&lt;/p&gt;
&lt;h2&gt;Operating Systems&lt;/h2&gt;
&lt;p&gt;Windows is the most problamatic with extensive telemetry and the most remote execution CVEs out of any operating system. However, I&apos;d caution against using a stock Linux install as well, since many distributions like Arch Linux do not even come with a firewall. I find that &lt;a href=&quot;https://www.qubes-os.org/&quot;&gt;QubesOS&lt;/a&gt; is the best choice as it has a locked down OS and extensive compartmentalisation via Virtual Machines and seperated networks. However, there is a difficult learning curve.&lt;/p&gt;
&lt;h2&gt;Browsers&lt;/h2&gt;
&lt;p&gt;There isn&apos;t a web browser I&apos;d recommend. I&apos;m currently using Brave, but it could be better. All web browsers have their faults and most of them are running off the Google Chrome codebase.&lt;/p&gt;
&lt;p&gt;Probably the best would be a private firefox you make yourself with this script: &lt;a href=&quot;https://github.com/simeononsecurity/FireFox-Privacy-Script&quot;&gt;https://github.com/simeononsecurity/FireFox-Privacy-Script&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Password Managers&lt;/h2&gt;
&lt;p&gt;Self hosted in a secure location would be the best, but convience often gets that better of us. Most recommend is &lt;a href=&quot;https://bitwarden.com/&quot;&gt;Bitwarden&lt;/a&gt;, but I&apos;d caution against many online password managers as if someone gets your login, everything will be compromosied. The best solution would be a Yubikey or another FIDO device to physically authenticate any new logins or devices.&lt;/p&gt;
&lt;h2&gt;Network Gateway and Open Ports&lt;/h2&gt;
&lt;p&gt;Test your network and see what ports are open using &amp;lt;&lt;a href=&quot;http://grc.com&quot;&gt;grc.com&lt;/a&gt;&amp;gt;. You should not be port forwarding or using uPnP in your router if you are trying to be secure. The basic shield up! test should give you a good idea of open ports and areas where you can improve your network. While having an open port isn&apos;t the end of the world, it is an increased attack surface that can be exploited.&lt;/p&gt;
&lt;h2&gt;Don&apos;t be Stupid&lt;/h2&gt;
&lt;p&gt;Downloading hacked programs, clicking on phishing links, and installing 50 extensions in your browser are not good practices. There are some tools that help train yourself, but they are not bulletproof. Security is about layering and using common sense. You can never be 100% secure and private.&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/ffnIL6hE__w&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>Github Mistakes and What I Wish I Knew Sooner</title><link>https://christitus.com/do-not-make-these-github-mistakes/</link><guid isPermaLink="true">https://christitus.com/do-not-make-these-github-mistakes/</guid><description>&lt;p&gt;I&apos;ve made a LOT of GitHub mistakes! Here is a list of things most new users do not know or do WRONG!&lt;/p&gt;

&lt;h2&gt;Raw Files&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Raw Button&lt;/li&gt;
&lt;li&gt;Raw Files only update every few minutes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Using Branches and Release Tags&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;list branches with &lt;code&gt;git branch -a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;clone a specific branch with &lt;code&gt;git clone -b main https://github.com/christitustech/winutil&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;list tags and releases with &lt;code&gt;git fetch --all --tags&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;checkout tag with &lt;code&gt;git checkout tags/v1.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;see a log of commits and tags &lt;code&gt;git log --oneline --graph&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Pull Requests&lt;/h2&gt;
&lt;p&gt;Pull requests are a great way of collaboration. However, most developers joke that they just close and don&apos;t merge most public pull requests. This is mainly because there can be a lot of low quality or hap-hazard commits. I&apos;ve seen this in many of projects and have made strict requirements before accepting any. The biggest rule I stole from Linus Torvalds, &quot;Never merge a pull request that you do NOT understand.&quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/do-not-make-these-github-mistakes/pullrequest.webp&quot; alt=&quot;pr&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Issues&lt;/h2&gt;
&lt;p&gt;It is easy to ignore issues, because most issues do not fill out the basic form below. However, I find about half the issues are great at testing your program and help develop it. Delete the issues that say, &quot;IT DON&apos;T WORK!&quot; with no elaboration. Issues help roadmap the development of the program and fix or document any bugs.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/do-not-make-these-github-mistakes/issues.webp&quot; alt=&quot;issues&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Rolling back commits and Referencing them&lt;/h2&gt;
&lt;p&gt;GitHub is truly amazing because of the ability to go back in time revert a single commit or create a branch based on the project at the time a commit was done!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/do-not-make-these-github-mistakes/revert.webp&quot; alt=&quot;revert&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Unit Tests&lt;/h2&gt;
&lt;p&gt;Unit testing is a vital part of every project as it checks for syntax errors and keeps you from accepting a bad pull request. This is done with automated builds and tests. Check project examples and the &lt;code&gt;pester&lt;/code&gt; folder. For the github documentation on unit tests refer to &lt;a href=&quot;https://docs.github.com/en/actions/automating-builds-and-tests&quot;&gt;https://docs.github.com/en/actions/automating-builds-and-tests&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/djPC_hBKl3I&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, 20 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve made a LOT of GitHub mistakes! Here is a list of things most new users do not know or do WRONG!&lt;/p&gt;

&lt;h2&gt;Raw Files&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Raw Button&lt;/li&gt;
&lt;li&gt;Raw Files only update every few minutes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Using Branches and Release Tags&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;list branches with &lt;code&gt;git branch -a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;clone a specific branch with &lt;code&gt;git clone -b main https://github.com/christitustech/winutil&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;list tags and releases with &lt;code&gt;git fetch --all --tags&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;checkout tag with &lt;code&gt;git checkout tags/v1.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;see a log of commits and tags &lt;code&gt;git log --oneline --graph&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Pull Requests&lt;/h2&gt;
&lt;p&gt;Pull requests are a great way of collaboration. However, most developers joke that they just close and don&apos;t merge most public pull requests. This is mainly because there can be a lot of low quality or hap-hazard commits. I&apos;ve seen this in many of projects and have made strict requirements before accepting any. The biggest rule I stole from Linus Torvalds, &quot;Never merge a pull request that you do NOT understand.&quot;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/do-not-make-these-github-mistakes/pullrequest.webp&quot; alt=&quot;pr&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Issues&lt;/h2&gt;
&lt;p&gt;It is easy to ignore issues, because most issues do not fill out the basic form below. However, I find about half the issues are great at testing your program and help develop it. Delete the issues that say, &quot;IT DON&apos;T WORK!&quot; with no elaboration. Issues help roadmap the development of the program and fix or document any bugs.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/do-not-make-these-github-mistakes/issues.webp&quot; alt=&quot;issues&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Rolling back commits and Referencing them&lt;/h2&gt;
&lt;p&gt;GitHub is truly amazing because of the ability to go back in time revert a single commit or create a branch based on the project at the time a commit was done!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/do-not-make-these-github-mistakes/revert.webp&quot; alt=&quot;revert&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Unit Tests&lt;/h2&gt;
&lt;p&gt;Unit testing is a vital part of every project as it checks for syntax errors and keeps you from accepting a bad pull request. This is done with automated builds and tests. Check project examples and the &lt;code&gt;pester&lt;/code&gt; folder. For the github documentation on unit tests refer to &lt;a href=&quot;https://docs.github.com/en/actions/automating-builds-and-tests&quot;&gt;https://docs.github.com/en/actions/automating-builds-and-tests&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/djPC_hBKl3I&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>Saving a Business Thousands a Year in Telecom</title><link>https://christitus.com/saving-a-business-5000-a-year-in-telecom/</link><guid isPermaLink="true">https://christitus.com/saving-a-business-5000-a-year-in-telecom/</guid><description>&lt;p&gt;Over the past 3 years I&apos;ve setup a hosted solution for a business that has saved them over $5000 per year on their telephone bill.&lt;/p&gt;

&lt;p&gt;If you have ever dealt with porting numbers or switching telephone services it is a complete nightmare. However, you can do this all yourself and take control and save a TON of money in the process. Need to move from this solution? Install and register your numbers on something else in minutes, NOT days or even weeks in some instances.&lt;/p&gt;
&lt;p&gt;The best part is you will own your numbers directly and have NO contracts that some sneaky companies that lock you in to their services for years at a time.&lt;/p&gt;
&lt;h2&gt;The Solution&lt;/h2&gt;
&lt;p&gt;There are many solutions that can be self hosted where you register a telephony trunk, but the easiest I&apos;ve found is 3CX. It has a variety of plans from free to under 10 users to a good small business setup for around 20 users, but the best part is you pay for the SERVER... NOT the user accounts.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/pricing.webp&quot; alt=&quot;Pricing&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;I&apos;ve done videos on 3cx installation. Here are links to both self-hosted and using the hosted plans above. For a small business I&apos;d recommend the SMB Plan above.&lt;/p&gt;
&lt;p&gt;3CX Hosted Installation Video: &lt;a href=&quot;https://youtu.be/M7dXvFDhoaI&quot;&gt;https://youtu.be/M7dXvFDhoaI&lt;/a&gt;
3CX Self-Hosted Installation Video: &lt;a href=&quot;https://youtu.be/P6CS5_CHy8s&quot;&gt;https://youtu.be/P6CS5_CHy8s&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;h3&gt;Call Forwarding&lt;/h3&gt;
&lt;p&gt;To setup Call forwarding I&apos;d recommend adding a mobile number in User Web Client -&amp;gt; Settings&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/call-forwarding.webp&quot; alt=&quot;Call Forwarding&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After that is setup, Specify My Mobile in different modes (DND, Away, Etc.). You can also specify different forwards for internal and external calls.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/call-forwarding2.webp&quot; alt=&quot;Call Forwarding2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Office/Holiday Hours&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/office-hours.webp&quot; alt=&quot;Office Hours&quot; /&gt;&lt;/p&gt;
&lt;p&gt;In the System configuration panel, You can specify Office Hours and Holiday Messages.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/holidays.webp&quot; alt=&quot;Holidays&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Mobile Application&lt;/h3&gt;
&lt;p&gt;The mobile app for android and iOS is amazing. Has a ton of functionality and can substitute as an extension.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/chat.webp&quot; alt=&quot;Chat&quot; /&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/recent.webp&quot; alt=&quot;Recent&quot; /&gt;
&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/voicemail.webp&quot; alt=&quot;Voicemail&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Live Chat&lt;/h3&gt;
&lt;p&gt;They also have live chat code that is really easy to add to any website. Only two lines of code and you can setup an entire call center. Here is the video I did on that.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/IPhbI3LWkTg&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;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/klsqtRclpXo&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, 15 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Over the past 3 years I&apos;ve setup a hosted solution for a business that has saved them over $5000 per year on their telephone bill.&lt;/p&gt;

&lt;p&gt;If you have ever dealt with porting numbers or switching telephone services it is a complete nightmare. However, you can do this all yourself and take control and save a TON of money in the process. Need to move from this solution? Install and register your numbers on something else in minutes, NOT days or even weeks in some instances.&lt;/p&gt;
&lt;p&gt;The best part is you will own your numbers directly and have NO contracts that some sneaky companies that lock you in to their services for years at a time.&lt;/p&gt;
&lt;h2&gt;The Solution&lt;/h2&gt;
&lt;p&gt;There are many solutions that can be self hosted where you register a telephony trunk, but the easiest I&apos;ve found is 3CX. It has a variety of plans from free to under 10 users to a good small business setup for around 20 users, but the best part is you pay for the SERVER... NOT the user accounts.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/pricing.webp&quot; alt=&quot;Pricing&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;I&apos;ve done videos on 3cx installation. Here are links to both self-hosted and using the hosted plans above. For a small business I&apos;d recommend the SMB Plan above.&lt;/p&gt;
&lt;p&gt;3CX Hosted Installation Video: &lt;a href=&quot;https://youtu.be/M7dXvFDhoaI&quot;&gt;https://youtu.be/M7dXvFDhoaI&lt;/a&gt;
3CX Self-Hosted Installation Video: &lt;a href=&quot;https://youtu.be/P6CS5_CHy8s&quot;&gt;https://youtu.be/P6CS5_CHy8s&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Features&lt;/h2&gt;
&lt;h3&gt;Call Forwarding&lt;/h3&gt;
&lt;p&gt;To setup Call forwarding I&apos;d recommend adding a mobile number in User Web Client -&amp;gt; Settings&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/call-forwarding.webp&quot; alt=&quot;Call Forwarding&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After that is setup, Specify My Mobile in different modes (DND, Away, Etc.). You can also specify different forwards for internal and external calls.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/call-forwarding2.webp&quot; alt=&quot;Call Forwarding2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Office/Holiday Hours&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/office-hours.webp&quot; alt=&quot;Office Hours&quot; /&gt;&lt;/p&gt;
&lt;p&gt;In the System configuration panel, You can specify Office Hours and Holiday Messages.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/holidays.webp&quot; alt=&quot;Holidays&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Mobile Application&lt;/h3&gt;
&lt;p&gt;The mobile app for android and iOS is amazing. Has a ton of functionality and can substitute as an extension.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/chat.webp&quot; alt=&quot;Chat&quot; /&gt;&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/recent.webp&quot; alt=&quot;Recent&quot; /&gt;
&lt;img src=&quot;/images/2023/saving-a-business-5000-a-year-in-telecom/voicemail.webp&quot; alt=&quot;Voicemail&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Live Chat&lt;/h3&gt;
&lt;p&gt;They also have live chat code that is really easy to add to any website. Only two lines of code and you can setup an entire call center. Here is the video I did on that.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/IPhbI3LWkTg&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;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/klsqtRclpXo&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>NixOS Explained</title><link>https://christitus.com/nixos-explained/</link><guid isPermaLink="true">https://christitus.com/nixos-explained/</guid><description>&lt;p&gt;NixOS is a very different type of Linux distribution. Everything can be controlled by one file.&lt;/p&gt;

&lt;h2&gt;The Configuration&lt;/h2&gt;
&lt;p&gt;Unlike other distributions where you configure system wide programs with &lt;code&gt;/etc&lt;/code&gt; and install programs with a package manage like APT, with NixOS EVERYTHING is done in &lt;code&gt;/etc/nixos/configuration.nix&lt;/code&gt; or hardware specific configurations in &lt;code&gt;/etc/nixos/hardware-configuration.nix&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can reference all my videos below and see my ending configuration files @ &lt;a href=&quot;https://github.com/ChrisTitusTech/nixos-titus&quot;&gt;https://github.com/ChrisTitusTech/nixos-titus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A viewer of the channel also sent me this in-depth guide covering much more of NixOS including flakes and home manager. Here is that article: &lt;a href=&quot;https://thiscute.world/en/posts/nixos-and-flake-basics&quot;&gt;https://thiscute.world/en/posts/nixos-and-flake-basics&lt;/a&gt; - which is a great resource as well!&lt;/p&gt;
&lt;h2&gt;Install and Config Videos&lt;/h2&gt;
&lt;p&gt;First Time Install: &lt;a href=&quot;https://youtu.be/_Z32SYFbxpw&quot;&gt;https://youtu.be/_Z32SYFbxpw&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Timestamps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;00:00:00 - NixOS Overview&lt;/li&gt;
&lt;li&gt;00:04:05 - Finding Packages to use before install&lt;/li&gt;
&lt;li&gt;00:17:26 - Install Begins&lt;/li&gt;
&lt;li&gt;00:23:46 - Manual Partitioning&lt;/li&gt;
&lt;li&gt;00:34:24 - Generating Our Configuration File for Install&lt;/li&gt;
&lt;li&gt;00:39:49 - Finishing Install from ISO&lt;/li&gt;
&lt;li&gt;00:40:58 - First Boot&lt;/li&gt;
&lt;li&gt;00:41:39 - Login and user setup&lt;/li&gt;
&lt;li&gt;00:42:07 - SetFont problems&lt;/li&gt;
&lt;li&gt;00:43:28 - Figuring out Installing Packages&lt;/li&gt;
&lt;li&gt;00:46:20 - mounting backup drive&lt;/li&gt;
&lt;li&gt;00:47:29 - Grabing Backup Packagelist&lt;/li&gt;
&lt;li&gt;00:50:24 - Installing ALL the Packages 1000+&lt;/li&gt;
&lt;li&gt;00:55:01 - Understanding PATHS and proper XDG Paths&lt;/li&gt;
&lt;li&gt;01:02:02 - Install Done - Reboot&lt;/li&gt;
&lt;li&gt;01:03:19 - Adding a Desktop Session&lt;/li&gt;
&lt;li&gt;01:05:10 - Nix Handles Services VERY Differently&lt;/li&gt;
&lt;li&gt;01:07:38 - Fixing permissions on mounted external home&lt;/li&gt;
&lt;li&gt;01:09:35 - You can NOT change stuff in /etc&lt;/li&gt;
&lt;li&gt;01:21:02 - Cloning DWM Setup&lt;/li&gt;
&lt;li&gt;01:22:26 - Titus is dogwater at using elinks&lt;/li&gt;
&lt;li&gt;01:27:02 - Wierd NixOS package names&lt;/li&gt;
&lt;li&gt;01:31:12 - MINDBLOWING NixOS Overlays&lt;/li&gt;
&lt;li&gt;01:40:51 - bin bash errors with it not existing&lt;/li&gt;
&lt;li&gt;01:48:37 - Successful Install and Recap&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NixOS Configuration: &lt;a href=&quot;https://youtu.be/IRRtk320j2A&quot;&gt;https://youtu.be/IRRtk320j2A&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Timestamps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;00:00:00 - NixOS Config Overview&lt;/li&gt;
&lt;li&gt;00:01:41 - Overall feelings about NixOS&lt;/li&gt;
&lt;li&gt;00:02:20 - Improvements with Flatpak and XDG via Config&lt;/li&gt;
&lt;li&gt;00:04:02 - Improving Configuration.nix&lt;/li&gt;
&lt;li&gt;00:04:23 - ipv6config&lt;/li&gt;
&lt;li&gt;00:05:23 - Locale&lt;/li&gt;
&lt;li&gt;00:06:16 - XServices and Display Manager Configs&lt;/li&gt;
&lt;li&gt;00:09:24 - Fonts Config&lt;/li&gt;
&lt;li&gt;00:11:07 - Polkit Config&lt;/li&gt;
&lt;li&gt;00:22:47 - Revisting Flatpak&lt;/li&gt;
&lt;li&gt;00:25:08 - Console Font Problems&lt;/li&gt;
&lt;li&gt;00:30:46 - SwayCons&lt;/li&gt;
&lt;li&gt;00:33:40 - Upgrading NixOS to New Release&lt;/li&gt;
&lt;li&gt;00:43:47 - Upgrade problems with insecure packages&lt;/li&gt;
&lt;li&gt;00:49:45 - NixOS Virtualization Setup&lt;/li&gt;
&lt;li&gt;00:51:38 - The Old Way does NOT work&lt;/li&gt;
&lt;li&gt;00:53:49 - The NixOS Way of Adding Groups&lt;/li&gt;
&lt;li&gt;00:57:01 - Adding Libvirt to NixOS&lt;/li&gt;
&lt;li&gt;01:00:17 - Finally Fixing Console Fonts&lt;/li&gt;
&lt;li&gt;01:02:00 - DaVinci Resolve in NixOS&lt;/li&gt;
&lt;li&gt;01:04:04 - Setting up Autologin in NixOS&lt;/li&gt;
&lt;li&gt;01:13:31 - DaVinci Resolve launch test&lt;/li&gt;
&lt;li&gt;01:15:19 - Next Steps and Sharing Config&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NixOS SystemD TimeOut Config: &lt;a href=&quot;https://youtu.be/1qd0iHadvdo&quot;&gt;https://youtu.be/1qd0iHadvdo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;NixOS NFS Mounting: &lt;a href=&quot;https://youtu.be/l7HvMM6rLNE&quot;&gt;https://youtu.be/l7HvMM6rLNE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;NixOS Gaming Setup: &lt;a href=&quot;https://youtu.be/wpS3qIprHL0&quot;&gt;https://youtu.be/wpS3qIprHL0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Timestamps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;00:00:00 - NixOS Gaming&lt;/li&gt;
&lt;li&gt;00:02:08 - Nix configuration changes for resolution&lt;/li&gt;
&lt;li&gt;00:03:22 - Diablo 4 problems with DWM&lt;/li&gt;
&lt;li&gt;00:07:19 - Manually changing Diablo 4 config&lt;/li&gt;
&lt;li&gt;00:12:08 - Changing Lutris Options&lt;/li&gt;
&lt;li&gt;00:16:25 - Diablo 4 initial launch&lt;/li&gt;
&lt;li&gt;00:19:26 - Unlocking vsync and fps benchmarks&lt;/li&gt;
&lt;li&gt;00:22:52 - Adding HD Packs&lt;/li&gt;
&lt;li&gt;00:26:33 - Comparing Windows vs Linux Performance in Diablo 4&lt;/li&gt;
&lt;li&gt;00:29:31 - Diablo 4 Linux Benchmark Settings&lt;/li&gt;
&lt;li&gt;00:30:03 - Diablo 4 Linux Benchmark Gameplay&lt;/li&gt;
&lt;li&gt;00:33:04 - Windows Display Issues&lt;/li&gt;
&lt;li&gt;00:34:53 - Adding Windows HD Assets&lt;/li&gt;
&lt;li&gt;00:36:43 - GRUB and Bootloaders&lt;/li&gt;
&lt;li&gt;00:38:18 - Windows Benchmarks Begins&lt;/li&gt;
&lt;li&gt;00:39:41 - Installing Windows OSD Tools&lt;/li&gt;
&lt;li&gt;00:43:19 - Windows Gameplay Benchmarks&lt;/li&gt;
&lt;li&gt;00:46:52 - Overview of Linux vs Windows Diablo 4&lt;/li&gt;
&lt;li&gt;00:50:33 - Why I do not use VMs for new installs&lt;/li&gt;
&lt;li&gt;00:51:44 - GPU Acceleration in Linux&lt;/li&gt;
&lt;li&gt;00:52:58 - The Oh Crap Moment&lt;/li&gt;
&lt;li&gt;00:55:51 - DWM the LAST Window Manager&lt;/li&gt;
&lt;li&gt;01:01:17 - Wrapping Up&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/fuWPuJZ9NcU&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, 16 Jun 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;NixOS is a very different type of Linux distribution. Everything can be controlled by one file.&lt;/p&gt;

&lt;h2&gt;The Configuration&lt;/h2&gt;
&lt;p&gt;Unlike other distributions where you configure system wide programs with &lt;code&gt;/etc&lt;/code&gt; and install programs with a package manage like APT, with NixOS EVERYTHING is done in &lt;code&gt;/etc/nixos/configuration.nix&lt;/code&gt; or hardware specific configurations in &lt;code&gt;/etc/nixos/hardware-configuration.nix&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can reference all my videos below and see my ending configuration files @ &lt;a href=&quot;https://github.com/ChrisTitusTech/nixos-titus&quot;&gt;https://github.com/ChrisTitusTech/nixos-titus&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A viewer of the channel also sent me this in-depth guide covering much more of NixOS including flakes and home manager. Here is that article: &lt;a href=&quot;https://thiscute.world/en/posts/nixos-and-flake-basics&quot;&gt;https://thiscute.world/en/posts/nixos-and-flake-basics&lt;/a&gt; - which is a great resource as well!&lt;/p&gt;
&lt;h2&gt;Install and Config Videos&lt;/h2&gt;
&lt;p&gt;First Time Install: &lt;a href=&quot;https://youtu.be/_Z32SYFbxpw&quot;&gt;https://youtu.be/_Z32SYFbxpw&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Timestamps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;00:00:00 - NixOS Overview&lt;/li&gt;
&lt;li&gt;00:04:05 - Finding Packages to use before install&lt;/li&gt;
&lt;li&gt;00:17:26 - Install Begins&lt;/li&gt;
&lt;li&gt;00:23:46 - Manual Partitioning&lt;/li&gt;
&lt;li&gt;00:34:24 - Generating Our Configuration File for Install&lt;/li&gt;
&lt;li&gt;00:39:49 - Finishing Install from ISO&lt;/li&gt;
&lt;li&gt;00:40:58 - First Boot&lt;/li&gt;
&lt;li&gt;00:41:39 - Login and user setup&lt;/li&gt;
&lt;li&gt;00:42:07 - SetFont problems&lt;/li&gt;
&lt;li&gt;00:43:28 - Figuring out Installing Packages&lt;/li&gt;
&lt;li&gt;00:46:20 - mounting backup drive&lt;/li&gt;
&lt;li&gt;00:47:29 - Grabing Backup Packagelist&lt;/li&gt;
&lt;li&gt;00:50:24 - Installing ALL the Packages 1000+&lt;/li&gt;
&lt;li&gt;00:55:01 - Understanding PATHS and proper XDG Paths&lt;/li&gt;
&lt;li&gt;01:02:02 - Install Done - Reboot&lt;/li&gt;
&lt;li&gt;01:03:19 - Adding a Desktop Session&lt;/li&gt;
&lt;li&gt;01:05:10 - Nix Handles Services VERY Differently&lt;/li&gt;
&lt;li&gt;01:07:38 - Fixing permissions on mounted external home&lt;/li&gt;
&lt;li&gt;01:09:35 - You can NOT change stuff in /etc&lt;/li&gt;
&lt;li&gt;01:21:02 - Cloning DWM Setup&lt;/li&gt;
&lt;li&gt;01:22:26 - Titus is dogwater at using elinks&lt;/li&gt;
&lt;li&gt;01:27:02 - Wierd NixOS package names&lt;/li&gt;
&lt;li&gt;01:31:12 - MINDBLOWING NixOS Overlays&lt;/li&gt;
&lt;li&gt;01:40:51 - bin bash errors with it not existing&lt;/li&gt;
&lt;li&gt;01:48:37 - Successful Install and Recap&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NixOS Configuration: &lt;a href=&quot;https://youtu.be/IRRtk320j2A&quot;&gt;https://youtu.be/IRRtk320j2A&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Timestamps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;00:00:00 - NixOS Config Overview&lt;/li&gt;
&lt;li&gt;00:01:41 - Overall feelings about NixOS&lt;/li&gt;
&lt;li&gt;00:02:20 - Improvements with Flatpak and XDG via Config&lt;/li&gt;
&lt;li&gt;00:04:02 - Improving Configuration.nix&lt;/li&gt;
&lt;li&gt;00:04:23 - ipv6config&lt;/li&gt;
&lt;li&gt;00:05:23 - Locale&lt;/li&gt;
&lt;li&gt;00:06:16 - XServices and Display Manager Configs&lt;/li&gt;
&lt;li&gt;00:09:24 - Fonts Config&lt;/li&gt;
&lt;li&gt;00:11:07 - Polkit Config&lt;/li&gt;
&lt;li&gt;00:22:47 - Revisting Flatpak&lt;/li&gt;
&lt;li&gt;00:25:08 - Console Font Problems&lt;/li&gt;
&lt;li&gt;00:30:46 - SwayCons&lt;/li&gt;
&lt;li&gt;00:33:40 - Upgrading NixOS to New Release&lt;/li&gt;
&lt;li&gt;00:43:47 - Upgrade problems with insecure packages&lt;/li&gt;
&lt;li&gt;00:49:45 - NixOS Virtualization Setup&lt;/li&gt;
&lt;li&gt;00:51:38 - The Old Way does NOT work&lt;/li&gt;
&lt;li&gt;00:53:49 - The NixOS Way of Adding Groups&lt;/li&gt;
&lt;li&gt;00:57:01 - Adding Libvirt to NixOS&lt;/li&gt;
&lt;li&gt;01:00:17 - Finally Fixing Console Fonts&lt;/li&gt;
&lt;li&gt;01:02:00 - DaVinci Resolve in NixOS&lt;/li&gt;
&lt;li&gt;01:04:04 - Setting up Autologin in NixOS&lt;/li&gt;
&lt;li&gt;01:13:31 - DaVinci Resolve launch test&lt;/li&gt;
&lt;li&gt;01:15:19 - Next Steps and Sharing Config&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NixOS SystemD TimeOut Config: &lt;a href=&quot;https://youtu.be/1qd0iHadvdo&quot;&gt;https://youtu.be/1qd0iHadvdo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;NixOS NFS Mounting: &lt;a href=&quot;https://youtu.be/l7HvMM6rLNE&quot;&gt;https://youtu.be/l7HvMM6rLNE&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;NixOS Gaming Setup: &lt;a href=&quot;https://youtu.be/wpS3qIprHL0&quot;&gt;https://youtu.be/wpS3qIprHL0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Timestamps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;00:00:00 - NixOS Gaming&lt;/li&gt;
&lt;li&gt;00:02:08 - Nix configuration changes for resolution&lt;/li&gt;
&lt;li&gt;00:03:22 - Diablo 4 problems with DWM&lt;/li&gt;
&lt;li&gt;00:07:19 - Manually changing Diablo 4 config&lt;/li&gt;
&lt;li&gt;00:12:08 - Changing Lutris Options&lt;/li&gt;
&lt;li&gt;00:16:25 - Diablo 4 initial launch&lt;/li&gt;
&lt;li&gt;00:19:26 - Unlocking vsync and fps benchmarks&lt;/li&gt;
&lt;li&gt;00:22:52 - Adding HD Packs&lt;/li&gt;
&lt;li&gt;00:26:33 - Comparing Windows vs Linux Performance in Diablo 4&lt;/li&gt;
&lt;li&gt;00:29:31 - Diablo 4 Linux Benchmark Settings&lt;/li&gt;
&lt;li&gt;00:30:03 - Diablo 4 Linux Benchmark Gameplay&lt;/li&gt;
&lt;li&gt;00:33:04 - Windows Display Issues&lt;/li&gt;
&lt;li&gt;00:34:53 - Adding Windows HD Assets&lt;/li&gt;
&lt;li&gt;00:36:43 - GRUB and Bootloaders&lt;/li&gt;
&lt;li&gt;00:38:18 - Windows Benchmarks Begins&lt;/li&gt;
&lt;li&gt;00:39:41 - Installing Windows OSD Tools&lt;/li&gt;
&lt;li&gt;00:43:19 - Windows Gameplay Benchmarks&lt;/li&gt;
&lt;li&gt;00:46:52 - Overview of Linux vs Windows Diablo 4&lt;/li&gt;
&lt;li&gt;00:50:33 - Why I do not use VMs for new installs&lt;/li&gt;
&lt;li&gt;00:51:44 - GPU Acceleration in Linux&lt;/li&gt;
&lt;li&gt;00:52:58 - The Oh Crap Moment&lt;/li&gt;
&lt;li&gt;00:55:51 - DWM the LAST Window Manager&lt;/li&gt;
&lt;li&gt;01:01:17 - Wrapping Up&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/fuWPuJZ9NcU&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 Perfect System</title><link>https://christitus.com/the-perfect-system/</link><guid isPermaLink="true">https://christitus.com/the-perfect-system/</guid><description>&lt;p&gt;The perfect system is stable, reliable, and does everything you need it to, while it feels amazing to use.&lt;/p&gt;

&lt;h2&gt;The Base System&lt;/h2&gt;
&lt;p&gt;Choose a Stable Release that won&apos;t get many feature updates that change the experience, but gets security updates that makes it stable and secure.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RHEL 10-year Support (Red Hat Enterprise Linux - Require Subscription)
-Free Variants (Rocky and Alma Linux)&lt;/li&gt;
&lt;li&gt;Debian 5-year Support (Stable - Bookworm(06/2023) or Bullseye)&lt;/li&gt;
&lt;li&gt;Ubuntu 5-year Support (Version 22 or 20)&lt;/li&gt;
&lt;li&gt;OpenSUSE 6-year Support (Leap only)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Packages&lt;/h2&gt;
&lt;p&gt;Getting all your packages and updating them reliably can be a challenge. With LTS releases, you will always be installing old version of software, where something like Arch Linux or other rolling releases will have the latest and greatest. We can get around this with NixOS Packages and Flatpak. There are other all-in-one tools like AppImages or Snap packages, but I don&apos;t find these to be any better than just using Nix or Flatpak.&lt;/p&gt;
&lt;h2&gt;The Look and Feel&lt;/h2&gt;
&lt;p&gt;This will be different for everyone. The idea is to have a system you enjoy being in and looking forward to coming back to it.&lt;/p&gt;
&lt;p&gt;I&apos;ve attempted a bastardized version of the genome project from unixporn and
made several Ubuntu, Debian, and Fedora configurations that kinda worked. Those
old repositories have since been retired. It ended up looking like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-perfect-system/fedora-mydesktop.webp&quot; alt=&quot;mydesktop&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The problem is I am not good at graphic design. I&apos;m a function over form person and these desktop below are the opposite of that.&lt;/p&gt;
&lt;p&gt;This rice is interesting using hyprland, eww, and is clean.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-perfect-system/fedora-hyprland-eww.webp&quot; alt=&quot;hyprland&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/Aylur/dotfiles&quot;&gt;https://github.com/Aylur/dotfiles&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another rice that is using awesomewm w/ bling utilties and rofi for menus. Simplistic and clean.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-perfect-system/awesomewm-bling-rofi.webp&quot; alt=&quot;awesomewm&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/beastsongithub/AwesomeWMRice&quot;&gt;https://github.com/beastsongithub/AwesomeWMRice&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I mentioned the above projects for the simplistic nature and not requiring a TON of dependancies. Too many rices in Linux require 10+ programs to even function, which is bad design where the two above look good, but don&apos;t have tons of problems. I say this to encourage more rices that are easier to replicate for people.&lt;/p&gt;
&lt;p&gt;What does my future desktop look like? Two versions... The pretty version in a year using Hyprland, Wayland, and the pretty desktop and the suckless barebones minimal one that just works like below.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-perfect-system/dwm.webp&quot; alt=&quot;dwm&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/ZgHX8jPuHjE&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, 24 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The perfect system is stable, reliable, and does everything you need it to, while it feels amazing to use.&lt;/p&gt;

&lt;h2&gt;The Base System&lt;/h2&gt;
&lt;p&gt;Choose a Stable Release that won&apos;t get many feature updates that change the experience, but gets security updates that makes it stable and secure.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RHEL 10-year Support (Red Hat Enterprise Linux - Require Subscription)
-Free Variants (Rocky and Alma Linux)&lt;/li&gt;
&lt;li&gt;Debian 5-year Support (Stable - Bookworm(06/2023) or Bullseye)&lt;/li&gt;
&lt;li&gt;Ubuntu 5-year Support (Version 22 or 20)&lt;/li&gt;
&lt;li&gt;OpenSUSE 6-year Support (Leap only)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Packages&lt;/h2&gt;
&lt;p&gt;Getting all your packages and updating them reliably can be a challenge. With LTS releases, you will always be installing old version of software, where something like Arch Linux or other rolling releases will have the latest and greatest. We can get around this with NixOS Packages and Flatpak. There are other all-in-one tools like AppImages or Snap packages, but I don&apos;t find these to be any better than just using Nix or Flatpak.&lt;/p&gt;
&lt;h2&gt;The Look and Feel&lt;/h2&gt;
&lt;p&gt;This will be different for everyone. The idea is to have a system you enjoy being in and looking forward to coming back to it.&lt;/p&gt;
&lt;p&gt;I&apos;ve attempted a bastardized version of the genome project from unixporn and
made several Ubuntu, Debian, and Fedora configurations that kinda worked. Those
old repositories have since been retired. It ended up looking like this:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-perfect-system/fedora-mydesktop.webp&quot; alt=&quot;mydesktop&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The problem is I am not good at graphic design. I&apos;m a function over form person and these desktop below are the opposite of that.&lt;/p&gt;
&lt;p&gt;This rice is interesting using hyprland, eww, and is clean.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-perfect-system/fedora-hyprland-eww.webp&quot; alt=&quot;hyprland&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/Aylur/dotfiles&quot;&gt;https://github.com/Aylur/dotfiles&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Another rice that is using awesomewm w/ bling utilties and rofi for menus. Simplistic and clean.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-perfect-system/awesomewm-bling-rofi.webp&quot; alt=&quot;awesomewm&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/beastsongithub/AwesomeWMRice&quot;&gt;https://github.com/beastsongithub/AwesomeWMRice&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I mentioned the above projects for the simplistic nature and not requiring a TON of dependancies. Too many rices in Linux require 10+ programs to even function, which is bad design where the two above look good, but don&apos;t have tons of problems. I say this to encourage more rices that are easier to replicate for people.&lt;/p&gt;
&lt;p&gt;What does my future desktop look like? Two versions... The pretty version in a year using Hyprland, Wayland, and the pretty desktop and the suckless barebones minimal one that just works like below.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-perfect-system/dwm.webp&quot; alt=&quot;dwm&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/ZgHX8jPuHjE&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>You Will Watch Ads</title><link>https://christitus.com/you-will-watch-ads/</link><guid isPermaLink="true">https://christitus.com/you-will-watch-ads/</guid><description>&lt;p&gt;There are massive changes coming to the internet and youtube in the form of Ads and the death of the ad blocker.&lt;/p&gt;

&lt;p&gt;This is happening in several different ways in the coming months. Let&apos;s go over what I see as inevitable and talk about workarounds.&lt;/p&gt;
&lt;h2&gt;YouTube detecting Ad Blockers&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/you-will-watch-ads/yt-ads.webp&quot; alt=&quot;Yt Ads&quot; /&gt;&lt;/p&gt;
&lt;p&gt;YouTube is testing blocking ad blockers like so many different news websites do right now. This will bring the rise of secondary viewers and the use of other sites likes odysee or freetube. These sites rely on YouTube&apos;s API and public sync, which will also be in the cross-hairs very soon.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.bleepingcomputer.com/news/technology/youtube-tests-blocking-videos-unless-you-disable-ad-blockers/&quot;&gt;https://www.bleepingcomputer.com/news/technology/youtube-tests-blocking-videos-unless-you-disable-ad-blockers/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Chromium changes&lt;/h2&gt;
&lt;p&gt;Google&apos;s Manifest 3 is almost here in June 2023 and that will hamstring all Ad blockers. Most ad blockers and privacy plugins rely on Manifest 2 and with version 3 being activated they will sunset version 2. How will this affect Firefox users? Will they require google and youtube viewers to be compliant with version 3? Time will tell...&lt;/p&gt;
&lt;p&gt;Here was a good writeup from adguard on manifest v3: &lt;a href=&quot;https://adguard.com/en/blog/firefox-manifestv3-chrome-adblocking.html&quot;&gt;https://adguard.com/en/blog/firefox-manifestv3-chrome-adblocking.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TLDR; Firefox will see more adoption and regular chrome ad extensions will be limited.&lt;/p&gt;
&lt;h2&gt;API Access and 3rd Party sites&lt;/h2&gt;
&lt;p&gt;I can already see an ocean of comments that I will x, y, or z instead of youtube and google. The main issue is most alternatives rely on Google and it&apos;s VERY open API. Sites like Odysee and many youtube apps not playing ads, rely on the API to SYNC the youtube videos to their servers. These services are on borrowed time and I&apos;m shocked they haven&apos;t already been taken down or at least restricted access for syncing YouTube content.&lt;/p&gt;
&lt;h2&gt;What About Custom DNS like pihole?&lt;/h2&gt;
&lt;p&gt;Ad block through custom dns always works, but it works too well. The reason we use ublock orgin or a browser based ad block is to keep the sites loading correctly and apps functioning properly. It would be trivial for Google to put roadblocks in the way of loading youtube if you block adsense. A good solution, but not the best when it comes to the user experience and using Google Ad supported products.&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/oQL9dVsEXT0&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, 15 May 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There are massive changes coming to the internet and youtube in the form of Ads and the death of the ad blocker.&lt;/p&gt;

&lt;p&gt;This is happening in several different ways in the coming months. Let&apos;s go over what I see as inevitable and talk about workarounds.&lt;/p&gt;
&lt;h2&gt;YouTube detecting Ad Blockers&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/you-will-watch-ads/yt-ads.webp&quot; alt=&quot;Yt Ads&quot; /&gt;&lt;/p&gt;
&lt;p&gt;YouTube is testing blocking ad blockers like so many different news websites do right now. This will bring the rise of secondary viewers and the use of other sites likes odysee or freetube. These sites rely on YouTube&apos;s API and public sync, which will also be in the cross-hairs very soon.&lt;/p&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://www.bleepingcomputer.com/news/technology/youtube-tests-blocking-videos-unless-you-disable-ad-blockers/&quot;&gt;https://www.bleepingcomputer.com/news/technology/youtube-tests-blocking-videos-unless-you-disable-ad-blockers/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Chromium changes&lt;/h2&gt;
&lt;p&gt;Google&apos;s Manifest 3 is almost here in June 2023 and that will hamstring all Ad blockers. Most ad blockers and privacy plugins rely on Manifest 2 and with version 3 being activated they will sunset version 2. How will this affect Firefox users? Will they require google and youtube viewers to be compliant with version 3? Time will tell...&lt;/p&gt;
&lt;p&gt;Here was a good writeup from adguard on manifest v3: &lt;a href=&quot;https://adguard.com/en/blog/firefox-manifestv3-chrome-adblocking.html&quot;&gt;https://adguard.com/en/blog/firefox-manifestv3-chrome-adblocking.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;TLDR; Firefox will see more adoption and regular chrome ad extensions will be limited.&lt;/p&gt;
&lt;h2&gt;API Access and 3rd Party sites&lt;/h2&gt;
&lt;p&gt;I can already see an ocean of comments that I will x, y, or z instead of youtube and google. The main issue is most alternatives rely on Google and it&apos;s VERY open API. Sites like Odysee and many youtube apps not playing ads, rely on the API to SYNC the youtube videos to their servers. These services are on borrowed time and I&apos;m shocked they haven&apos;t already been taken down or at least restricted access for syncing YouTube content.&lt;/p&gt;
&lt;h2&gt;What About Custom DNS like pihole?&lt;/h2&gt;
&lt;p&gt;Ad block through custom dns always works, but it works too well. The reason we use ublock orgin or a browser based ad block is to keep the sites loading correctly and apps functioning properly. It would be trivial for Google to put roadblocks in the way of loading youtube if you block adsense. A good solution, but not the best when it comes to the user experience and using Google Ad supported products.&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/oQL9dVsEXT0&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>TitusPi 3.0</title><link>https://christitus.com/tituspi-2023/</link><guid isPermaLink="true">https://christitus.com/tituspi-2023/</guid><description>&lt;p&gt;TitusPi is a raspberrypi desktop that can play retro games and also substitute for a full desktop.&lt;/p&gt;

&lt;h2&gt;What is it?&lt;/h2&gt;
&lt;p&gt;Linux ARM is at its roots using the Raspbian server lite spin. Official Raspbian Desktop uses XFCE and I don&apos;t like it&apos;s configuration, look, or performance. TitusPi changes it to what I have found to be the best for a new user.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KDE Desktop&lt;/li&gt;
&lt;li&gt;Optimized for RaspberryPi 3 and 4&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How is Different from Raspbian Desktop?&lt;/h2&gt;
&lt;p&gt;The desktop offers much better customization, style, and features compared to the official one. The stock KDE experience has performance issues due to the compositing. I optimized this by disabling the compositor in KWIN and making the entire interface much more responsive.&lt;/p&gt;
&lt;p&gt;A customized terminal using my &lt;a href=&quot;https://github.com/ChrisTitusTech/mybash&quot;&gt;custom bash settings&lt;/a&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Terminal&lt;/th&gt;
&lt;th&gt;Desktop&lt;/th&gt;
&lt;th&gt;KDE Profile&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src=&quot;/images/2023/tituspi/terminal.webp&quot; alt=&quot;Terminal&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;/images/2023/tituspi/desktop.webp&quot; alt=&quot;Desktop&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;/images/2023/tituspi/konsave.webp&quot; alt=&quot;Konsave&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Build instructions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install Raspberry Pi OS LITE (NOT THE DESKTOP)&lt;/li&gt;
&lt;li&gt;From console on login use &lt;code&gt;tasksel&lt;/code&gt; and select KDE&lt;/li&gt;
&lt;li&gt;Modify KDE to DISABLE composition in KWIN (Massive performance boost)&lt;/li&gt;
&lt;li&gt;Modify &lt;code&gt;/boot/cmdline.txt&lt;/code&gt; for leverage graphics acceleration and other boot modifications (quiet boot).&lt;/li&gt;
&lt;li&gt;Use &lt;a href=&quot;https://github.com/Prayag2/konsave&quot;&gt;konsave&lt;/a&gt; and tituspi.knsv (extracted from tituspi.7z files - 7Zip Required) to copy fonts, KDE settings and more!&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;disable_splash=1
disable_overscan=1
hdmi_group=1
hdmi_mode=4
hdmi_drive=2
hdmi_ignore_cec_init=1
arm_freq=2048
v3d_freq=750
over_voltage=6
dtparam=i2c_arm=on
dtparam=audio=on
enable_uart=1
[pi4]
dtoverlay=vc4-fkms-v3d
[all]
hdmi_enable_4kp60=1
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;boot cmdline.txt explainations&lt;/h4&gt;
&lt;p&gt;&amp;lt;&lt;a href=&quot;http://www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md&quot;&gt;www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md&lt;/a&gt;&amp;gt;
&amp;lt;&lt;a href=&quot;http://www.cnx-software.com/2020/02/24/raspberry-pi-4-rev-1-2-fixes-usb-c-power-issues-improves-sd-card-resilience/&quot;&gt;www.cnx-software.com/2020/02/24/raspberry-pi-4-rev-1-2-fixes-usb-c-power-issues-improves-sd-card-resilience/&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;Seems my RPi4 version is more sensitive to what chargers I can use, therefore limits overclocking options.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat /proc/cpuinfo | grep Revision
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Revision : c03111&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5&gt;Overclocking&lt;/h5&gt;
&lt;p&gt;Reference: &amp;lt;&lt;a href=&quot;http://www.raspberrypi.org/documentation/configuration/config-txt/overclocking.md&quot;&gt;www.raspberrypi.org/documentation/configuration/config-txt/overclocking.md&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;These are the speeds I achieve with arm_freq=2048. arm_freq=2047 reports a lower scaling_max_freq which can be noticed in games like God of War: Chains of Olympus (one of the games I used as benchmark). v3d_freq=750 is the max GPU overclock, over_voltage=6 required to provide extra juice (over_voltage=5 worked for me with arm_freq=2000).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;2194967&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;echo performance &amp;gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;vcgencmd measure_clock arm
frequency(48)=2048519552&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As for hdmi_enable_4kp60=1 I also use it for overclocking reasons, as the only way to increase the GPU core_freq from 500 to 550, enable_tvout underclocks to 360:
&quot;Specific to Pi 4B: The core_freq of the Raspberry Pi 4 can change from the default if either hdmi_enable_4kp60 or enable_tvout are used, due to relationship between internal clocks and the particular requirements of the requested display modes.&quot;&lt;/p&gt;
&lt;h5&gt;HDMI options and resolution&lt;/h5&gt;
&lt;p&gt;Reference: &amp;lt;&lt;a href=&quot;http://www.raspberrypi.org/documentation/configuration/config-txt/video.md&quot;&gt;www.raspberrypi.org/documentation/configuration/config-txt/video.md&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;hdmi_group=1, hdmi_mode=4, hdmi_drive=2 : these options set the RPi at 16:9 720p using the standard CEA TV timings and sending audio through HDMI.&lt;/p&gt;
&lt;p&gt;hdmi_ignore_cec_init=1 &quot;prevents a CEC-enabled TV from coming out of standby and channel-switching when you are rebooting your Raspberry Pi.&quot;
Channel switching on reboots was quite annoying indeed :)&lt;/p&gt;
&lt;h5&gt;No gpu_mem parameters??&lt;/h5&gt;
&lt;p&gt;Reference: &amp;lt;&lt;a href=&quot;http://www.raspberrypi.org/documentation/configuration/config-txt/memory.md&quot;&gt;www.raspberrypi.org/documentation/configuration/config-txt/memory.md&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;That&apos;s right! :) &quot;On the Raspberry Pi 4 the 3D component of the GPU has its own memory management unit (MMU), and does not use memory from the gpu_mem allocation. Instead memory is allocated dynamically within Linux. This may allow a smaller value to be specified for gpu_mem on the Pi 4, compared to previous models.&quot; Note: Still recommended for Pi 3&apos;s if using for emulation!&lt;/p&gt;
&lt;p&gt;The performance of N64 Conker&apos;s Bad Fur Day increased noticeably after removing all gpu_mem parameters.&lt;/p&gt;
&lt;p&gt;Information pulled from retropie community forum: &lt;a href=&quot;https://retropie.org.uk/forum/topic/27430/howto-optimized-boot-config-txt&quot;&gt;https://retropie.org.uk/forum/topic/27430/howto-optimized-boot-config-txt&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;RetroPie Addition&lt;/h3&gt;
&lt;p&gt;Check official documentation from RetroPie @ &lt;a href=&quot;https://retropie.org.uk/docs/Manual-Installation/&quot;&gt;https://retropie.org.uk/docs/Manual-Installation/&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/z6Ut8zSCczU&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>Tue, 25 Apr 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;TitusPi is a raspberrypi desktop that can play retro games and also substitute for a full desktop.&lt;/p&gt;

&lt;h2&gt;What is it?&lt;/h2&gt;
&lt;p&gt;Linux ARM is at its roots using the Raspbian server lite spin. Official Raspbian Desktop uses XFCE and I don&apos;t like it&apos;s configuration, look, or performance. TitusPi changes it to what I have found to be the best for a new user.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KDE Desktop&lt;/li&gt;
&lt;li&gt;Optimized for RaspberryPi 3 and 4&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How is Different from Raspbian Desktop?&lt;/h2&gt;
&lt;p&gt;The desktop offers much better customization, style, and features compared to the official one. The stock KDE experience has performance issues due to the compositing. I optimized this by disabling the compositor in KWIN and making the entire interface much more responsive.&lt;/p&gt;
&lt;p&gt;A customized terminal using my &lt;a href=&quot;https://github.com/ChrisTitusTech/mybash&quot;&gt;custom bash settings&lt;/a&gt;.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Terminal&lt;/th&gt;
&lt;th&gt;Desktop&lt;/th&gt;
&lt;th&gt;KDE Profile&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src=&quot;/images/2023/tituspi/terminal.webp&quot; alt=&quot;Terminal&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;/images/2023/tituspi/desktop.webp&quot; alt=&quot;Desktop&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;/images/2023/tituspi/konsave.webp&quot; alt=&quot;Konsave&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Build instructions&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Install Raspberry Pi OS LITE (NOT THE DESKTOP)&lt;/li&gt;
&lt;li&gt;From console on login use &lt;code&gt;tasksel&lt;/code&gt; and select KDE&lt;/li&gt;
&lt;li&gt;Modify KDE to DISABLE composition in KWIN (Massive performance boost)&lt;/li&gt;
&lt;li&gt;Modify &lt;code&gt;/boot/cmdline.txt&lt;/code&gt; for leverage graphics acceleration and other boot modifications (quiet boot).&lt;/li&gt;
&lt;li&gt;Use &lt;a href=&quot;https://github.com/Prayag2/konsave&quot;&gt;konsave&lt;/a&gt; and tituspi.knsv (extracted from tituspi.7z files - 7Zip Required) to copy fonts, KDE settings and more!&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;disable_splash=1
disable_overscan=1
hdmi_group=1
hdmi_mode=4
hdmi_drive=2
hdmi_ignore_cec_init=1
arm_freq=2048
v3d_freq=750
over_voltage=6
dtparam=i2c_arm=on
dtparam=audio=on
enable_uart=1
[pi4]
dtoverlay=vc4-fkms-v3d
[all]
hdmi_enable_4kp60=1
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;boot cmdline.txt explainations&lt;/h4&gt;
&lt;p&gt;&amp;lt;&lt;a href=&quot;http://www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md&quot;&gt;www.raspberrypi.org/documentation/hardware/raspberrypi/revision-codes/README.md&lt;/a&gt;&amp;gt;
&amp;lt;&lt;a href=&quot;http://www.cnx-software.com/2020/02/24/raspberry-pi-4-rev-1-2-fixes-usb-c-power-issues-improves-sd-card-resilience/&quot;&gt;www.cnx-software.com/2020/02/24/raspberry-pi-4-rev-1-2-fixes-usb-c-power-issues-improves-sd-card-resilience/&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;Seems my RPi4 version is more sensitive to what chargers I can use, therefore limits overclocking options.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat /proc/cpuinfo | grep Revision
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Revision : c03111&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5&gt;Overclocking&lt;/h5&gt;
&lt;p&gt;Reference: &amp;lt;&lt;a href=&quot;http://www.raspberrypi.org/documentation/configuration/config-txt/overclocking.md&quot;&gt;www.raspberrypi.org/documentation/configuration/config-txt/overclocking.md&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;These are the speeds I achieve with arm_freq=2048. arm_freq=2047 reports a lower scaling_max_freq which can be noticed in games like God of War: Chains of Olympus (one of the games I used as benchmark). v3d_freq=750 is the max GPU overclock, over_voltage=6 required to provide extra juice (over_voltage=5 worked for me with arm_freq=2000).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;2194967&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;echo performance &amp;gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;vcgencmd measure_clock arm
frequency(48)=2048519552&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As for hdmi_enable_4kp60=1 I also use it for overclocking reasons, as the only way to increase the GPU core_freq from 500 to 550, enable_tvout underclocks to 360:
&quot;Specific to Pi 4B: The core_freq of the Raspberry Pi 4 can change from the default if either hdmi_enable_4kp60 or enable_tvout are used, due to relationship between internal clocks and the particular requirements of the requested display modes.&quot;&lt;/p&gt;
&lt;h5&gt;HDMI options and resolution&lt;/h5&gt;
&lt;p&gt;Reference: &amp;lt;&lt;a href=&quot;http://www.raspberrypi.org/documentation/configuration/config-txt/video.md&quot;&gt;www.raspberrypi.org/documentation/configuration/config-txt/video.md&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;hdmi_group=1, hdmi_mode=4, hdmi_drive=2 : these options set the RPi at 16:9 720p using the standard CEA TV timings and sending audio through HDMI.&lt;/p&gt;
&lt;p&gt;hdmi_ignore_cec_init=1 &quot;prevents a CEC-enabled TV from coming out of standby and channel-switching when you are rebooting your Raspberry Pi.&quot;
Channel switching on reboots was quite annoying indeed :)&lt;/p&gt;
&lt;h5&gt;No gpu_mem parameters??&lt;/h5&gt;
&lt;p&gt;Reference: &amp;lt;&lt;a href=&quot;http://www.raspberrypi.org/documentation/configuration/config-txt/memory.md&quot;&gt;www.raspberrypi.org/documentation/configuration/config-txt/memory.md&lt;/a&gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;That&apos;s right! :) &quot;On the Raspberry Pi 4 the 3D component of the GPU has its own memory management unit (MMU), and does not use memory from the gpu_mem allocation. Instead memory is allocated dynamically within Linux. This may allow a smaller value to be specified for gpu_mem on the Pi 4, compared to previous models.&quot; Note: Still recommended for Pi 3&apos;s if using for emulation!&lt;/p&gt;
&lt;p&gt;The performance of N64 Conker&apos;s Bad Fur Day increased noticeably after removing all gpu_mem parameters.&lt;/p&gt;
&lt;p&gt;Information pulled from retropie community forum: &lt;a href=&quot;https://retropie.org.uk/forum/topic/27430/howto-optimized-boot-config-txt&quot;&gt;https://retropie.org.uk/forum/topic/27430/howto-optimized-boot-config-txt&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;RetroPie Addition&lt;/h3&gt;
&lt;p&gt;Check official documentation from RetroPie @ &lt;a href=&quot;https://retropie.org.uk/docs/Manual-Installation/&quot;&gt;https://retropie.org.uk/docs/Manual-Installation/&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/z6Ut8zSCczU&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>Replace Google Fonts With Bunny Fonts</title><link>https://christitus.com/replace-google-fonts-with-bunny-fonts/</link><guid isPermaLink="true">https://christitus.com/replace-google-fonts-with-bunny-fonts/</guid><description>&lt;p&gt;Did you know Google Fonts is bloated and can cause longer load times? Bunny fonts to the rescue!&lt;/p&gt;

&lt;p&gt;Oh, I forgot to mention, Google fonts is also NOT GDPR compliant. For legal reasons and traffic you might switch over to bunny because it IS GDPR compliant.&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Wordpress Install: &lt;a href=&quot;https://wordpress.org/plugins/replace-google-fonts-with-bunny-fonts/&quot;&gt;https://wordpress.org/plugins/replace-google-fonts-with-bunny-fonts/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Using a static site like me? or are a web designer? Great! It&apos;s even easier.&lt;/p&gt;
&lt;p&gt;The Bunny Fonts API was designed to be fully compatible with the Google Fonts CSS v1 API, making the switch as easy as changing the hostname.&lt;/p&gt;
&lt;p&gt;Simply swap &lt;code&gt;https://fonts.bunny.net/css&lt;/code&gt; in place of &lt;code&gt;https://fonts.googleapis.com/css&lt;/code&gt; on your website&apos;s source code and let your users enjoy better privacy.&lt;/p&gt;
&lt;p&gt;Thanks to DigitalSparky for the Pull Request and updating my website for me! Here is Bunny font implementation pull request on this website: &lt;a href=&quot;https://github.com/ChrisTitusTech/website/pull/108&quot;&gt;https://github.com/ChrisTitusTech/website/pull/108&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Future Improvements&lt;/h2&gt;
&lt;p&gt;There are so many more improvements to make! Thanks to feedback from users here is the to-do list.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use both Netlify AND Cloudflare utilizing round-robin DNS (Thanks Larry!)&lt;/li&gt;
&lt;li&gt;Fix &quot;Total Blocking Time&quot; delays with either a new theme or using Partytown to debloat Javascript &lt;a href=&quot;https://github.com/BuilderIO/partytown&quot;&gt;https://github.com/BuilderIO/partytown&lt;/a&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/nBcZASOwo1Q&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, 15 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Did you know Google Fonts is bloated and can cause longer load times? Bunny fonts to the rescue!&lt;/p&gt;

&lt;p&gt;Oh, I forgot to mention, Google fonts is also NOT GDPR compliant. For legal reasons and traffic you might switch over to bunny because it IS GDPR compliant.&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Wordpress Install: &lt;a href=&quot;https://wordpress.org/plugins/replace-google-fonts-with-bunny-fonts/&quot;&gt;https://wordpress.org/plugins/replace-google-fonts-with-bunny-fonts/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Using a static site like me? or are a web designer? Great! It&apos;s even easier.&lt;/p&gt;
&lt;p&gt;The Bunny Fonts API was designed to be fully compatible with the Google Fonts CSS v1 API, making the switch as easy as changing the hostname.&lt;/p&gt;
&lt;p&gt;Simply swap &lt;code&gt;https://fonts.bunny.net/css&lt;/code&gt; in place of &lt;code&gt;https://fonts.googleapis.com/css&lt;/code&gt; on your website&apos;s source code and let your users enjoy better privacy.&lt;/p&gt;
&lt;p&gt;Thanks to DigitalSparky for the Pull Request and updating my website for me! Here is Bunny font implementation pull request on this website: &lt;a href=&quot;https://github.com/ChrisTitusTech/website/pull/108&quot;&gt;https://github.com/ChrisTitusTech/website/pull/108&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Future Improvements&lt;/h2&gt;
&lt;p&gt;There are so many more improvements to make! Thanks to feedback from users here is the to-do list.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use both Netlify AND Cloudflare utilizing round-robin DNS (Thanks Larry!)&lt;/li&gt;
&lt;li&gt;Fix &quot;Total Blocking Time&quot; delays with either a new theme or using Partytown to debloat Javascript &lt;a href=&quot;https://github.com/BuilderIO/partytown&quot;&gt;https://github.com/BuilderIO/partytown&lt;/a&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/nBcZASOwo1Q&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 Teamviewer Scam</title><link>https://christitus.com/the-teamviewer-scam/</link><guid isPermaLink="true">https://christitus.com/the-teamviewer-scam/</guid><description>&lt;p&gt;This keeps getting worse... removal of lifetime memberships, subscriptions for everything, and now predatory tactics to force it&apos;s users to keep paying by removing cancellations of the subscriptions.&lt;/p&gt;

&lt;h2&gt;Still the most used Remote Software?&lt;/h2&gt;
&lt;p&gt;Teamviewer rose to the #1 spot after logmein stopped offering a free tier. In the beginning it was a great piece of software and even offered a lifetime membership. You pay for it once and have it forever. The free tier was also really nice in a pinch you could load up their software and easily remote in to any PC. To this day, it is one of the most used remote software applications on the market.&lt;/p&gt;
&lt;h2&gt;The Downfall&lt;/h2&gt;
&lt;p&gt;On June 1st, 2021 Teamviewer stopped supporting Teamviewr 9 &amp;amp; 10 versions that had the last of the lifetime subscriptions. This forced anyone that bought these &quot;lifetime&quot; licenses to purchase a subscription or move to a different product. However, something else happened behind the scenes that has NOT been talked about. The Lock in and predatory behaviors were being escalated to force people to continue paying them far beyond their intended expiration date.&lt;/p&gt;
&lt;h2&gt;The Scam&lt;/h2&gt;
&lt;p&gt;Behind the scenes, Teamviewer has removed the ability to CANCEL any subscriptions. This used to not be the case, but you have to create a support ticket to cancel is the official text on their site.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-teamviewer-scam/cancel-ticket.webp&quot; alt=&quot;Cancel Ticket&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Finding the support ticket creation is difficult and hidden through a sister site with a DIFFERENT login.&lt;/p&gt;
&lt;p&gt;Use this website: &lt;a href=&quot;https://support.teamviewer.com/en/support/tickets&quot;&gt;https://support.teamviewer.com/en/support/tickets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you do NOT cancel within 28 days of the renewal you WILL BE CHARGED for an ENTIRE YEAR!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-teamviewer-scam/28days.webp&quot; alt=&quot;28days&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Ticket answer time? 7-10 DAYS!&lt;/p&gt;
&lt;p&gt;Need to talk with someone now? Call their phone number at +1-800-638-0253 Use option 4 and then Option 3 to Cancel&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/zbrPQsMK2gU&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, 13 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This keeps getting worse... removal of lifetime memberships, subscriptions for everything, and now predatory tactics to force it&apos;s users to keep paying by removing cancellations of the subscriptions.&lt;/p&gt;

&lt;h2&gt;Still the most used Remote Software?&lt;/h2&gt;
&lt;p&gt;Teamviewer rose to the #1 spot after logmein stopped offering a free tier. In the beginning it was a great piece of software and even offered a lifetime membership. You pay for it once and have it forever. The free tier was also really nice in a pinch you could load up their software and easily remote in to any PC. To this day, it is one of the most used remote software applications on the market.&lt;/p&gt;
&lt;h2&gt;The Downfall&lt;/h2&gt;
&lt;p&gt;On June 1st, 2021 Teamviewer stopped supporting Teamviewr 9 &amp;amp; 10 versions that had the last of the lifetime subscriptions. This forced anyone that bought these &quot;lifetime&quot; licenses to purchase a subscription or move to a different product. However, something else happened behind the scenes that has NOT been talked about. The Lock in and predatory behaviors were being escalated to force people to continue paying them far beyond their intended expiration date.&lt;/p&gt;
&lt;h2&gt;The Scam&lt;/h2&gt;
&lt;p&gt;Behind the scenes, Teamviewer has removed the ability to CANCEL any subscriptions. This used to not be the case, but you have to create a support ticket to cancel is the official text on their site.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-teamviewer-scam/cancel-ticket.webp&quot; alt=&quot;Cancel Ticket&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Finding the support ticket creation is difficult and hidden through a sister site with a DIFFERENT login.&lt;/p&gt;
&lt;p&gt;Use this website: &lt;a href=&quot;https://support.teamviewer.com/en/support/tickets&quot;&gt;https://support.teamviewer.com/en/support/tickets&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you do NOT cancel within 28 days of the renewal you WILL BE CHARGED for an ENTIRE YEAR!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/the-teamviewer-scam/28days.webp&quot; alt=&quot;28days&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Ticket answer time? 7-10 DAYS!&lt;/p&gt;
&lt;p&gt;Need to talk with someone now? Call their phone number at +1-800-638-0253 Use option 4 and then Option 3 to Cancel&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/zbrPQsMK2gU&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>Flatseal: The Best Flatpak Addon</title><link>https://christitus.com/flatseal-required-flatpak-addon/</link><guid isPermaLink="true">https://christitus.com/flatseal-required-flatpak-addon/</guid><description>&lt;p&gt;Managing Flatpak permissions and file storage outside of the flatpak can be difficult to manage. Flatseal fixes all that!&lt;/p&gt;

&lt;h2&gt;Installing Flatseal&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;flatpak install flathub com.github.tchx84.Flatseal
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Using Flatseal&lt;/h2&gt;
&lt;p&gt;View each flatpak permissions&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/flatseal-required-flatpak-addon/perms.webp&quot; alt=&quot;Perms&quot; /&gt;&lt;/p&gt;
&lt;p&gt;See user modified permissions&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/flatseal-required-flatpak-addon/user-perms.webp&quot; alt=&quot;User Perms&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Reset permissions in the top right corner&lt;/p&gt;
&lt;p&gt;The thing I use the most is filesystem access. This lets you specify the flatpak can read from other parts in the filesystem.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/flatseal-required-flatpak-addon/filesystem.webp&quot; alt=&quot;Filesystem&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is the best way to manage and maintain flatpaks with ease and it&apos;s the first thing I install after the base flatpak!&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/IfDUXZfDhEI&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, 10 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Managing Flatpak permissions and file storage outside of the flatpak can be difficult to manage. Flatseal fixes all that!&lt;/p&gt;

&lt;h2&gt;Installing Flatseal&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;flatpak install flathub com.github.tchx84.Flatseal
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Using Flatseal&lt;/h2&gt;
&lt;p&gt;View each flatpak permissions&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/flatseal-required-flatpak-addon/perms.webp&quot; alt=&quot;Perms&quot; /&gt;&lt;/p&gt;
&lt;p&gt;See user modified permissions&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/flatseal-required-flatpak-addon/user-perms.webp&quot; alt=&quot;User Perms&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Reset permissions in the top right corner&lt;/p&gt;
&lt;p&gt;The thing I use the most is filesystem access. This lets you specify the flatpak can read from other parts in the filesystem.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/flatseal-required-flatpak-addon/filesystem.webp&quot; alt=&quot;Filesystem&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is the best way to manage and maintain flatpaks with ease and it&apos;s the first thing I install after the base flatpak!&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/IfDUXZfDhEI&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>Im Sorry Netlify</title><link>https://christitus.com/im-sorry-netlify/</link><guid isPermaLink="true">https://christitus.com/im-sorry-netlify/</guid><description>&lt;p&gt;I&apos;ve used Netlify for years on my website and it&apos;s a fantastic service! As I&apos;ve grown it&apos;s becoming unaffordable. I submitted a support request and this is what happened...&lt;/p&gt;

&lt;h2&gt;Excess Bandwidth&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/im-sorry-netlify/intro.webp&quot; alt=&quot;Intro&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/im-sorry-netlify/graph.webp&quot; alt=&quot;Graph&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The statistics on the website have grown with data usage. More Users = More Bandwidth Used. At this rate of growth I&apos;m going to be spending well over $100 a month in bandwidth usage. Don&apos;t get me wrong for starting a website, Netlify limits won&apos;t be a problem. Heck, for the past year I had a 1TB of bandwidth per month for $19! The downside? Over 1TB it starts getting REALLY EXPENSIVE, every 100GB after that is $55! It isn&apos;t sustainable.&lt;/p&gt;
&lt;h2&gt;The Switch&lt;/h2&gt;
&lt;p&gt;There are many competitors to Netlify launching competing services, but one in particular caught my eye. Cloudflare launched it&apos;s &quot;Pages&quot; service that hooks in with GitHub in 2020. The free tier even gives you UNLIMITED bandwidth! Having used Cloudflare extensively for DNS and DDoS setups in business this is a no brainer. The best part? Analytics are also free!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/im-sorry-netlify/cloudflare.webp&quot; alt=&quot;Cloudflare&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;The Experience&lt;/h2&gt;
&lt;p&gt;I setup pages and click &quot;Connect to GitHub&quot; then selected my existing Netlify website to see if it could build the HUGO site. FAILURE.&lt;/p&gt;
&lt;p&gt;The stock hugo instance is v0.50 which is old (Netlify does the same thing) so I added an Environmental Variable. Fixed with the following:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/im-sorry-netlify/hugo-variable.webp&quot; alt=&quot;Hugo Variable&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The other downside? Netlify redirect rules do NOT apply. Cloudflare takes a different approach with Page Rules. This might get expensive for anyone doing a LOT of redirects, as you only get 20 rules for free or pro plan.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/im-sorry-netlify/rules.webp&quot; alt=&quot;Rules&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Overall, I&apos;m pretty darn happy with Cloudflare.&lt;/p&gt;
&lt;p&gt;They also have a bunch of optimization rules, DDoS prevention, and more, but its about on par with Netlify and haven&apos;t noticed any speed or optimization difference.&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/Cfr4YNbKrB8&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, 08 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;ve used Netlify for years on my website and it&apos;s a fantastic service! As I&apos;ve grown it&apos;s becoming unaffordable. I submitted a support request and this is what happened...&lt;/p&gt;

&lt;h2&gt;Excess Bandwidth&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/im-sorry-netlify/intro.webp&quot; alt=&quot;Intro&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/im-sorry-netlify/graph.webp&quot; alt=&quot;Graph&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The statistics on the website have grown with data usage. More Users = More Bandwidth Used. At this rate of growth I&apos;m going to be spending well over $100 a month in bandwidth usage. Don&apos;t get me wrong for starting a website, Netlify limits won&apos;t be a problem. Heck, for the past year I had a 1TB of bandwidth per month for $19! The downside? Over 1TB it starts getting REALLY EXPENSIVE, every 100GB after that is $55! It isn&apos;t sustainable.&lt;/p&gt;
&lt;h2&gt;The Switch&lt;/h2&gt;
&lt;p&gt;There are many competitors to Netlify launching competing services, but one in particular caught my eye. Cloudflare launched it&apos;s &quot;Pages&quot; service that hooks in with GitHub in 2020. The free tier even gives you UNLIMITED bandwidth! Having used Cloudflare extensively for DNS and DDoS setups in business this is a no brainer. The best part? Analytics are also free!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/im-sorry-netlify/cloudflare.webp&quot; alt=&quot;Cloudflare&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;The Experience&lt;/h2&gt;
&lt;p&gt;I setup pages and click &quot;Connect to GitHub&quot; then selected my existing Netlify website to see if it could build the HUGO site. FAILURE.&lt;/p&gt;
&lt;p&gt;The stock hugo instance is v0.50 which is old (Netlify does the same thing) so I added an Environmental Variable. Fixed with the following:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/im-sorry-netlify/hugo-variable.webp&quot; alt=&quot;Hugo Variable&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The other downside? Netlify redirect rules do NOT apply. Cloudflare takes a different approach with Page Rules. This might get expensive for anyone doing a LOT of redirects, as you only get 20 rules for free or pro plan.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/im-sorry-netlify/rules.webp&quot; alt=&quot;Rules&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Overall, I&apos;m pretty darn happy with Cloudflare.&lt;/p&gt;
&lt;p&gt;They also have a bunch of optimization rules, DDoS prevention, and more, but its about on par with Netlify and haven&apos;t noticed any speed or optimization difference.&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/Cfr4YNbKrB8&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>Hardest Game to Play on Steamdeck</title><link>https://christitus.com/hardest-game-to-play-on-steamdeck/</link><guid isPermaLink="true">https://christitus.com/hardest-game-to-play-on-steamdeck/</guid><description>&lt;p&gt;Most games work great on Steamdeck, but Final Fantasy XI is one that doesn&apos;t. It requires dotnet, injection of 3rd party tool, and other modifications to make it playable.&lt;/p&gt;

&lt;h2&gt;Launcher Problems&lt;/h2&gt;
&lt;p&gt;PlayOnline has a TON of problems, as do many other games with independent launchers. This is complicated even more with another tool that makes gearswaps, adds minimaps, and other quality of life tools that aren&apos;t in the vanilla game.&lt;/p&gt;
&lt;h3&gt;Workarounds&lt;/h3&gt;
&lt;p&gt;Multiple launchers are the kiss of death for most emulation and compatibility layers. To get around this, we need to bypass launchers.&lt;/p&gt;
&lt;p&gt;Steam has some fantastic bypass arguments for a LOT of games. Example: Cyberpunk 2077 (Set Launch Options) &lt;code&gt;--launcher-skip -skipStartScreen&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;There is also modding the game files themselves to bypass intro movies and other problematic launches. For FFXI we need to do this.&lt;/p&gt;
&lt;h2&gt;Setting up the Environment&lt;/h2&gt;
&lt;p&gt;Wine bottles are folders that contain all the operating variables. These folders can be anywhere when using WINE, but for the steamdeck I like using bottles flatpak which isolates them to &lt;code&gt;~/.var/app/com.usebottles.bottles/data/bottles&lt;/code&gt;. You&apos;d be shocked how far you can get with the stock &quot;Gaming&quot; bottle.&lt;/p&gt;
&lt;p&gt;Bottle Flatpak Install&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;flatpak install flathub com.usebottles.bottles
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/hardest-game-to-play-on-steamdeck/gaming-bottle.webp&quot; alt=&quot;Gaming Bottle&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Set Launch Options&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/hardest-game-to-play-on-steamdeck/launch-options.webp&quot; alt=&quot;Launch Options&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bottles Bug: Nothing Happens when selection launch options&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/hardest-game-to-play-on-steamdeck/bottle-bug.webp&quot; alt=&quot;Bottle Bug&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If you run into this bug, then you need to manually edit the yml file at the root directory.&lt;/p&gt;
&lt;p&gt;Change this section to include &lt;code&gt;arguments=&apos;&apos;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;External_Programs:
    f43fe6b6-29c6-49b4-88f8-dc724361f3d5:
        arguments: horizonxi.ini &amp;lt;-- Added Line
        executable: Ashita-cli.exe
        folder: /home/titus/Games/horizonxi/drive_c/HorizonXI/Game
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After this line is added, you will now be able to use the launch options or just add the arguments you need directly in the yml file.&lt;/p&gt;
&lt;h3&gt;FFXI Injection&lt;/h3&gt;
&lt;p&gt;Using the new HorizonXI fan made server, we can see that it is using Ashita. Ashita/Windower were the main projects almost every FFXI player uses on PC. These days Ashita is by far my favorite as the lead developer, Atm0s, has been developing and re-writing it for more than 10 years. His dedication has made strides to the community and made HorizonXI launcher possible.&lt;/p&gt;
&lt;p&gt;The Official Horizon XI Launcher is written in 2022 Visual C++ and those libraries aren&apos;t possible yet, at least to my knowledge. So how do we get the game files? Use Windows with Syncthing if you have another PC or just load up a VM and share the local folder.&lt;/p&gt;
&lt;p&gt;Then add that folder in the the bottles directory so it has access to it, and the argument &lt;code&gt;horizonxi.ini&lt;/code&gt; using the executable &lt;code&gt;Ashita-cli.exe&lt;/code&gt; and we are almost done.&lt;/p&gt;
&lt;p&gt;There are two modifications to make: Auto-Login and Controller Support for Steamdeck. The steamdeck uses an XInput (Xbox Style) controller scheme and autologin is just adding a few lines to the ini.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[ashita.boot]
; Retail Server Usage
file        = .\\bootloader\\horizon-loader.exe
command     = --server betabox.horizonxi.com --user USERNAMEHERE --pass PASSWORDHERE
gamemodule  = ffximain.dll
script      = default.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Gamepad config&lt;/p&gt;
&lt;p&gt;Change the following lines to mimic these at the end of &lt;code&gt;[ffxi.registry]&lt;/code&gt; entry.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;padmode000 = 1,0,0,0,0,1
padsin000 = 8,9,13,12,10,0,1,3,2,15,-1,-1,14,-33,-33,32,32,-36,-36,35,35,6,7,5,4,16,-1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now when you run the FFXI Bottle it will auto launch into the game WITHOUT ANY LAUNCHER!&lt;/p&gt;
&lt;p&gt;_Note: My personal setup is using syncthing on my windows machine and automatically syncing the files directly in the bottle.&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/DCwGENR5scE&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, 06 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Most games work great on Steamdeck, but Final Fantasy XI is one that doesn&apos;t. It requires dotnet, injection of 3rd party tool, and other modifications to make it playable.&lt;/p&gt;

&lt;h2&gt;Launcher Problems&lt;/h2&gt;
&lt;p&gt;PlayOnline has a TON of problems, as do many other games with independent launchers. This is complicated even more with another tool that makes gearswaps, adds minimaps, and other quality of life tools that aren&apos;t in the vanilla game.&lt;/p&gt;
&lt;h3&gt;Workarounds&lt;/h3&gt;
&lt;p&gt;Multiple launchers are the kiss of death for most emulation and compatibility layers. To get around this, we need to bypass launchers.&lt;/p&gt;
&lt;p&gt;Steam has some fantastic bypass arguments for a LOT of games. Example: Cyberpunk 2077 (Set Launch Options) &lt;code&gt;--launcher-skip -skipStartScreen&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;There is also modding the game files themselves to bypass intro movies and other problematic launches. For FFXI we need to do this.&lt;/p&gt;
&lt;h2&gt;Setting up the Environment&lt;/h2&gt;
&lt;p&gt;Wine bottles are folders that contain all the operating variables. These folders can be anywhere when using WINE, but for the steamdeck I like using bottles flatpak which isolates them to &lt;code&gt;~/.var/app/com.usebottles.bottles/data/bottles&lt;/code&gt;. You&apos;d be shocked how far you can get with the stock &quot;Gaming&quot; bottle.&lt;/p&gt;
&lt;p&gt;Bottle Flatpak Install&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;flatpak install flathub com.usebottles.bottles
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/hardest-game-to-play-on-steamdeck/gaming-bottle.webp&quot; alt=&quot;Gaming Bottle&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Set Launch Options&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/hardest-game-to-play-on-steamdeck/launch-options.webp&quot; alt=&quot;Launch Options&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bottles Bug: Nothing Happens when selection launch options&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/hardest-game-to-play-on-steamdeck/bottle-bug.webp&quot; alt=&quot;Bottle Bug&quot; /&gt;&lt;/p&gt;
&lt;p&gt;If you run into this bug, then you need to manually edit the yml file at the root directory.&lt;/p&gt;
&lt;p&gt;Change this section to include &lt;code&gt;arguments=&apos;&apos;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;External_Programs:
    f43fe6b6-29c6-49b4-88f8-dc724361f3d5:
        arguments: horizonxi.ini &amp;lt;-- Added Line
        executable: Ashita-cli.exe
        folder: /home/titus/Games/horizonxi/drive_c/HorizonXI/Game
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After this line is added, you will now be able to use the launch options or just add the arguments you need directly in the yml file.&lt;/p&gt;
&lt;h3&gt;FFXI Injection&lt;/h3&gt;
&lt;p&gt;Using the new HorizonXI fan made server, we can see that it is using Ashita. Ashita/Windower were the main projects almost every FFXI player uses on PC. These days Ashita is by far my favorite as the lead developer, Atm0s, has been developing and re-writing it for more than 10 years. His dedication has made strides to the community and made HorizonXI launcher possible.&lt;/p&gt;
&lt;p&gt;The Official Horizon XI Launcher is written in 2022 Visual C++ and those libraries aren&apos;t possible yet, at least to my knowledge. So how do we get the game files? Use Windows with Syncthing if you have another PC or just load up a VM and share the local folder.&lt;/p&gt;
&lt;p&gt;Then add that folder in the the bottles directory so it has access to it, and the argument &lt;code&gt;horizonxi.ini&lt;/code&gt; using the executable &lt;code&gt;Ashita-cli.exe&lt;/code&gt; and we are almost done.&lt;/p&gt;
&lt;p&gt;There are two modifications to make: Auto-Login and Controller Support for Steamdeck. The steamdeck uses an XInput (Xbox Style) controller scheme and autologin is just adding a few lines to the ini.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[ashita.boot]
; Retail Server Usage
file        = .\\bootloader\\horizon-loader.exe
command     = --server betabox.horizonxi.com --user USERNAMEHERE --pass PASSWORDHERE
gamemodule  = ffximain.dll
script      = default.txt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Gamepad config&lt;/p&gt;
&lt;p&gt;Change the following lines to mimic these at the end of &lt;code&gt;[ffxi.registry]&lt;/code&gt; entry.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;padmode000 = 1,0,0,0,0,1
padsin000 = 8,9,13,12,10,0,1,3,2,15,-1,-1,14,-33,-33,32,32,-36,-36,35,35,6,7,5,4,16,-1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now when you run the FFXI Bottle it will auto launch into the game WITHOUT ANY LAUNCHER!&lt;/p&gt;
&lt;p&gt;_Note: My personal setup is using syncthing on my windows machine and automatically syncing the files directly in the bottle.&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/DCwGENR5scE&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>Script for Optimizing Images</title><link>https://christitus.com/script-for-optimizing-images/</link><guid isPermaLink="true">https://christitus.com/script-for-optimizing-images/</guid><description>&lt;p&gt;Optimizing images is easy with this script! Img-optimizer + ImageMagicK leverages multiple CLI tools to give the best results.&lt;/p&gt;

&lt;h2&gt;Dependencies&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;imagemagick&lt;/li&gt;
&lt;li&gt;optipng&lt;/li&gt;
&lt;li&gt;jpegoptim&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install script&lt;/p&gt;
&lt;h3&gt;Debian Command&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install jpegoptim optipng imagemagick webp -y
git clone https://github.com/VirtuBox/img-optimize.git $HOME/.img-optimize
sudo ln -s $HOME/.img-optimize/optimize.sh /usr/local/bin/img-optimize
sudo chmod +x /usr/local/bin/img-optimize
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Arch Command&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;yay -S jpegoptim optipng imagemagick webp -y
git clone https://github.com/VirtuBox/img-optimize.git $HOME/.img-optimize
sudo ln -s $HOME/.img-optimize/optimize.sh /usr/local/bin/img-optimize
sudo chmod +x /usr/local/bin/img-optimize
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;My Custom Script&lt;/h2&gt;
&lt;p&gt;Change the variables for FOLDER, WIDTH, and HEIGHT.&lt;/p&gt;
&lt;p&gt;The script used at the time of writing is included below.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# Dependancies
# - img-optimize - https://virtubox.github.io/img-optimize/
# - imagemagick
# - jpegoptim
# - optipng

FOLDER=&quot;/home/titus/github/website/content/images&quot;

# max width
WIDTH=800

# max height
HEIGHT=600

#resize png or jpg to either height or width, keeps proportions using imagemagick
find ${FOLDER} -iname &apos;*.webp&apos; -o -iname &apos;*.webp&apos; -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\&amp;gt; \{} \;
img-optimize --std --path ${FOLDER}
&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/Fq3HBk6swuQ&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, 30 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Optimizing images is easy with this script! Img-optimizer + ImageMagicK leverages multiple CLI tools to give the best results.&lt;/p&gt;

&lt;h2&gt;Dependencies&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;imagemagick&lt;/li&gt;
&lt;li&gt;optipng&lt;/li&gt;
&lt;li&gt;jpegoptim&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Install script&lt;/p&gt;
&lt;h3&gt;Debian Command&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install jpegoptim optipng imagemagick webp -y
git clone https://github.com/VirtuBox/img-optimize.git $HOME/.img-optimize
sudo ln -s $HOME/.img-optimize/optimize.sh /usr/local/bin/img-optimize
sudo chmod +x /usr/local/bin/img-optimize
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Arch Command&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;yay -S jpegoptim optipng imagemagick webp -y
git clone https://github.com/VirtuBox/img-optimize.git $HOME/.img-optimize
sudo ln -s $HOME/.img-optimize/optimize.sh /usr/local/bin/img-optimize
sudo chmod +x /usr/local/bin/img-optimize
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;My Custom Script&lt;/h2&gt;
&lt;p&gt;Change the variables for FOLDER, WIDTH, and HEIGHT.&lt;/p&gt;
&lt;p&gt;The script used at the time of writing is included below.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
# Dependancies
# - img-optimize - https://virtubox.github.io/img-optimize/
# - imagemagick
# - jpegoptim
# - optipng

FOLDER=&quot;/home/titus/github/website/content/images&quot;

# max width
WIDTH=800

# max height
HEIGHT=600

#resize png or jpg to either height or width, keeps proportions using imagemagick
find ${FOLDER} -iname &apos;*.webp&apos; -o -iname &apos;*.webp&apos; -exec convert \{} -verbose -resize $WIDTHx$HEIGHT\&amp;gt; \{} \;
img-optimize --std --path ${FOLDER}
&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/Fq3HBk6swuQ&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>My New Desktop Hyprland</title><link>https://christitus.com/my-new-desktop-hyprland/</link><guid isPermaLink="true">https://christitus.com/my-new-desktop-hyprland/</guid><description>&lt;p&gt;Hyprland is an amazing desktop that feels amazing. Here is my current setup that is being made.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Please Note: This is beta and not for a beginner. You WILL encounter bugs!&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;The Desktop&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/ChrisTitusTech/hyprland-titus/raw/main/hyprland-titus.png&quot; alt=&quot;Screenshot&quot; /&gt;&lt;/p&gt;
&lt;p&gt;GitHub Project: &lt;a href=&quot;https://github.com/ChrisTitusTech/hyprland-titus&quot;&gt;https://github.com/ChrisTitusTech/hyprland-titus&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Install&lt;/h2&gt;
&lt;h3&gt;Yay&lt;/h3&gt;
&lt;p&gt;Run as user NOT ROOT!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://aur.archlinux.org/yay-bin
cd yay-bin
makepkg -si
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Packages&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;yay -S hyprland-bin polkit-gnome ffmpeg neovim viewnior       \
rofi pavucontrol thunar starship wl-clipboard wf-recorder     \
swaybg grimblast-git ffmpegthumbnailer tumbler playerctl      \
noise-suppression-for-voice thunar-archive-plugin kitty       \
waybar-hyprland wlogout swaylock-effects sddm-git pamixer     \
nwg-look-bin nordic-theme papirus-icon-theme dunst otf-sora   \
ttf-nerd-fonts-symbols-common otf-firamono-nerd inter-font    \
ttf-fantasque-nerd noto-fonts noto-fonts-emoji ttf-comfortaa  \
ttf-jetbrains-mono-nerd ttf-icomoon-feather ttf-iosevka-nerd  \
adobe-source-code-pro-fonts
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Workarounds that need to be addressed&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Recommend archinstall with Sway as desktop for base&lt;/li&gt;
&lt;li&gt;SDDM-GIT is required or you will run into shutdown bugs and delays&lt;/li&gt;
&lt;li&gt;SDDM needs to be configured for autologin (recommend using swaylock on start of script for security)&lt;/li&gt;
&lt;li&gt;Replace xdg-desktop-portal-wlr with
&lt;strong&gt;&lt;a href=&quot;https://wiki.hypr.land/Hypr-Ecosystem/xdg-desktop-portal-hyprland/&quot;&gt;xdg-desktop-portal-hyprland-git&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Bugs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Hyprland is still in beta (0.2) as of the creation of these dot files&lt;/li&gt;
&lt;li&gt;Sometimes my RX5700XT goes to sleep and requires a reload, because it is stuck on black screen.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Work In Progress&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Help Popup with Hotkey&lt;/li&gt;
&lt;li&gt;[ ] Wayland guide for nwg-look, wlr-randr, etc.&lt;/li&gt;
&lt;li&gt;[ ] Synergy Workaround - Looking at waynergy or just using KVM&lt;/li&gt;
&lt;li&gt;[ ] Gamescope Addition - Adding more parity with Steamdeck features&lt;/li&gt;
&lt;li&gt;[X] More Customizations for Waybar - Battery, Backlight, etc.&lt;/li&gt;
&lt;li&gt;[ ] Auto-configuration - Long term goal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Sources used making these&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Official Hyprland Github &lt;a href=&quot;https://github.com/hyprwm/Hyprland&quot;&gt;https://github.com/hyprwm/Hyprland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux Mobiles Hyprland dot files &lt;a href=&quot;https://github.com/linuxmobile/hyprland-dots&quot;&gt;https://github.com/linuxmobile/hyprland-dots&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4 Hour Live Stream Attempt&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/sDmLCBI9L4E&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;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wNL6eIoksd8&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, 23 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hyprland is an amazing desktop that feels amazing. Here is my current setup that is being made.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Please Note: This is beta and not for a beginner. You WILL encounter bugs!&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;The Desktop&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://github.com/ChrisTitusTech/hyprland-titus/raw/main/hyprland-titus.png&quot; alt=&quot;Screenshot&quot; /&gt;&lt;/p&gt;
&lt;p&gt;GitHub Project: &lt;a href=&quot;https://github.com/ChrisTitusTech/hyprland-titus&quot;&gt;https://github.com/ChrisTitusTech/hyprland-titus&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Install&lt;/h2&gt;
&lt;h3&gt;Yay&lt;/h3&gt;
&lt;p&gt;Run as user NOT ROOT!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://aur.archlinux.org/yay-bin
cd yay-bin
makepkg -si
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Packages&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;yay -S hyprland-bin polkit-gnome ffmpeg neovim viewnior       \
rofi pavucontrol thunar starship wl-clipboard wf-recorder     \
swaybg grimblast-git ffmpegthumbnailer tumbler playerctl      \
noise-suppression-for-voice thunar-archive-plugin kitty       \
waybar-hyprland wlogout swaylock-effects sddm-git pamixer     \
nwg-look-bin nordic-theme papirus-icon-theme dunst otf-sora   \
ttf-nerd-fonts-symbols-common otf-firamono-nerd inter-font    \
ttf-fantasque-nerd noto-fonts noto-fonts-emoji ttf-comfortaa  \
ttf-jetbrains-mono-nerd ttf-icomoon-feather ttf-iosevka-nerd  \
adobe-source-code-pro-fonts
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Workarounds that need to be addressed&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Recommend archinstall with Sway as desktop for base&lt;/li&gt;
&lt;li&gt;SDDM-GIT is required or you will run into shutdown bugs and delays&lt;/li&gt;
&lt;li&gt;SDDM needs to be configured for autologin (recommend using swaylock on start of script for security)&lt;/li&gt;
&lt;li&gt;Replace xdg-desktop-portal-wlr with
&lt;strong&gt;&lt;a href=&quot;https://wiki.hypr.land/Hypr-Ecosystem/xdg-desktop-portal-hyprland/&quot;&gt;xdg-desktop-portal-hyprland-git&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Bugs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Hyprland is still in beta (0.2) as of the creation of these dot files&lt;/li&gt;
&lt;li&gt;Sometimes my RX5700XT goes to sleep and requires a reload, because it is stuck on black screen.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Work In Progress&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] Help Popup with Hotkey&lt;/li&gt;
&lt;li&gt;[ ] Wayland guide for nwg-look, wlr-randr, etc.&lt;/li&gt;
&lt;li&gt;[ ] Synergy Workaround - Looking at waynergy or just using KVM&lt;/li&gt;
&lt;li&gt;[ ] Gamescope Addition - Adding more parity with Steamdeck features&lt;/li&gt;
&lt;li&gt;[X] More Customizations for Waybar - Battery, Backlight, etc.&lt;/li&gt;
&lt;li&gt;[ ] Auto-configuration - Long term goal&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Sources used making these&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Official Hyprland Github &lt;a href=&quot;https://github.com/hyprwm/Hyprland&quot;&gt;https://github.com/hyprwm/Hyprland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux Mobiles Hyprland dot files &lt;a href=&quot;https://github.com/linuxmobile/hyprland-dots&quot;&gt;https://github.com/linuxmobile/hyprland-dots&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;4 Hour Live Stream Attempt&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/sDmLCBI9L4E&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;Walkthrough Video&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wNL6eIoksd8&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>How to Sync Local Files</title><link>https://christitus.com/sync-local-files/</link><guid isPermaLink="true">https://christitus.com/sync-local-files/</guid><description>&lt;p&gt;A guide over how to set up Syncthing for local sync only.&lt;/p&gt;

&lt;h2&gt;Things you NEED to know&lt;/h2&gt;
&lt;p&gt;Syncthing by defaults it will sync files through relays across the internet. This is useful when needing to grab a file while you are outside your network, but slow and can cause security issues. While the information is encrypted, it still poses a threat to some. Also, the slowdown is relaying that information outside the network even in a LAN transfer.&lt;/p&gt;
&lt;p&gt;The following guide shows you how to make it sync only in a LAN environment. Note: This will make your files NOT sync when outside your own network!&lt;/p&gt;
&lt;h2&gt;Installing Syncthing&lt;/h2&gt;
&lt;p&gt;There is a cli service that you can install via syncthing. I prefer to take a GUI approach to the configuration as it helps when troubleshooting. Here are the following tools I recommend based on the operating system.&lt;/p&gt;
&lt;h3&gt;Windows and Linux&lt;/h3&gt;
&lt;p&gt;Syncthing-GTK is a proven companion I&apos;ve used with syncthing for years. It is open source and you can download the latest releases here: &lt;a href=&quot;https://github.com/kozec/syncthing-gtk/releases&quot;&gt;https://github.com/kozec/syncthing-gtk/releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;During the install process choose the default selections and manage via localhost.&lt;/p&gt;
&lt;p&gt;Installing on Steamdeck? Checkout it&apos;s flatpak: &lt;a href=&quot;https://flathub.org/apps/details/me.kozec.syncthingtk&quot;&gt;https://flathub.org/apps/details/me.kozec.syncthingtk&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;MacOS&lt;/h3&gt;
&lt;p&gt;Syncthing for MacOS is a great open source project @ &lt;a href=&quot;https://github.com/syncthing/syncthing-macos&quot;&gt;https://github.com/syncthing/syncthing-macos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Homebrew install method:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install --cask syncthing
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/config.webp&quot; alt=&quot;Config&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With multiple syncthing clients you can connect one using &quot;Connect Remote Device&quot; this is what the server interface looks like.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/server.webp&quot; alt=&quot;Server&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On the other system it will prompt to connect the two.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/client.webp&quot; alt=&quot;Client&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I generally always have a main server that manages all the connects and hosts the share. You don&apos;t have to do this, but it&apos;s easier to manage. To start syncing -&amp;gt; Create a folder -&amp;gt; Edit Folder -&amp;gt; Click Sharing Options -&amp;gt; Check the other syncthing computers to share it to!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/share.webp&quot; alt=&quot;Share&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On the client computers click add and watch the sync happen. This is the final result of the sync:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/final-sync.webp&quot; alt=&quot;Final Sync&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Disable External Access&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/settings.webp&quot; alt=&quot;Settings&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This simple configuration will set everything to LAN only. Making sure anon usage and Global Discovery are disabled will work for most.&lt;/p&gt;
&lt;p&gt;However, for a deeper dive for those security minded and configuration junkies, here is another tidbit. (Advanced Users Only)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sync Listen Address - This is where the incoming sync is and can be set to be IPv4 or a specific address if you want. It&apos;s a bit overkill but by default it runs on 22000. Adjusting this value isn&apos;t recommended and can cause headaches in a dynamic environment. Highly recommend using hostnames to resolve instead of IPs unless they are static!&lt;/li&gt;
&lt;li&gt;GUI Listen Address - Syncthings web interface runs on port 8080 and typically only listens from localhost (local connections).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Syncthing Backups&lt;/h2&gt;
&lt;p&gt;Here is Syncthing&apos;s wonderful backup system. I always use this for the times I delete something or need to recover from a bad sync. The options are: simple, trash can, staggered, and external. If you want basic backups, choose simple. Trash can is good for deleted files and often you want to grab an older version of an existing file when using sync. Personally, I do the overkill option of staggered versioning. This hold all the different version in a hour, day, week, month format til the end of the retention period. This will use a TON of space where the folder is synced from, so be CAREFUL!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/backup.webp&quot; alt=&quot;Backup&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/dBVTedUWbfg&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, 20 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A guide over how to set up Syncthing for local sync only.&lt;/p&gt;

&lt;h2&gt;Things you NEED to know&lt;/h2&gt;
&lt;p&gt;Syncthing by defaults it will sync files through relays across the internet. This is useful when needing to grab a file while you are outside your network, but slow and can cause security issues. While the information is encrypted, it still poses a threat to some. Also, the slowdown is relaying that information outside the network even in a LAN transfer.&lt;/p&gt;
&lt;p&gt;The following guide shows you how to make it sync only in a LAN environment. Note: This will make your files NOT sync when outside your own network!&lt;/p&gt;
&lt;h2&gt;Installing Syncthing&lt;/h2&gt;
&lt;p&gt;There is a cli service that you can install via syncthing. I prefer to take a GUI approach to the configuration as it helps when troubleshooting. Here are the following tools I recommend based on the operating system.&lt;/p&gt;
&lt;h3&gt;Windows and Linux&lt;/h3&gt;
&lt;p&gt;Syncthing-GTK is a proven companion I&apos;ve used with syncthing for years. It is open source and you can download the latest releases here: &lt;a href=&quot;https://github.com/kozec/syncthing-gtk/releases&quot;&gt;https://github.com/kozec/syncthing-gtk/releases&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;During the install process choose the default selections and manage via localhost.&lt;/p&gt;
&lt;p&gt;Installing on Steamdeck? Checkout it&apos;s flatpak: &lt;a href=&quot;https://flathub.org/apps/details/me.kozec.syncthingtk&quot;&gt;https://flathub.org/apps/details/me.kozec.syncthingtk&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;MacOS&lt;/h3&gt;
&lt;p&gt;Syncthing for MacOS is a great open source project @ &lt;a href=&quot;https://github.com/syncthing/syncthing-macos&quot;&gt;https://github.com/syncthing/syncthing-macos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Homebrew install method:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install --cask syncthing
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/config.webp&quot; alt=&quot;Config&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With multiple syncthing clients you can connect one using &quot;Connect Remote Device&quot; this is what the server interface looks like.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/server.webp&quot; alt=&quot;Server&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On the other system it will prompt to connect the two.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/client.webp&quot; alt=&quot;Client&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I generally always have a main server that manages all the connects and hosts the share. You don&apos;t have to do this, but it&apos;s easier to manage. To start syncing -&amp;gt; Create a folder -&amp;gt; Edit Folder -&amp;gt; Click Sharing Options -&amp;gt; Check the other syncthing computers to share it to!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/share.webp&quot; alt=&quot;Share&quot; /&gt;&lt;/p&gt;
&lt;p&gt;On the client computers click add and watch the sync happen. This is the final result of the sync:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/final-sync.webp&quot; alt=&quot;Final Sync&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Disable External Access&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/settings.webp&quot; alt=&quot;Settings&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This simple configuration will set everything to LAN only. Making sure anon usage and Global Discovery are disabled will work for most.&lt;/p&gt;
&lt;p&gt;However, for a deeper dive for those security minded and configuration junkies, here is another tidbit. (Advanced Users Only)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sync Listen Address - This is where the incoming sync is and can be set to be IPv4 or a specific address if you want. It&apos;s a bit overkill but by default it runs on 22000. Adjusting this value isn&apos;t recommended and can cause headaches in a dynamic environment. Highly recommend using hostnames to resolve instead of IPs unless they are static!&lt;/li&gt;
&lt;li&gt;GUI Listen Address - Syncthings web interface runs on port 8080 and typically only listens from localhost (local connections).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Syncthing Backups&lt;/h2&gt;
&lt;p&gt;Here is Syncthing&apos;s wonderful backup system. I always use this for the times I delete something or need to recover from a bad sync. The options are: simple, trash can, staggered, and external. If you want basic backups, choose simple. Trash can is good for deleted files and often you want to grab an older version of an existing file when using sync. Personally, I do the overkill option of staggered versioning. This hold all the different version in a hour, day, week, month format til the end of the retention period. This will use a TON of space where the folder is synced from, so be CAREFUL!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/sync-local-files/backup.webp&quot; alt=&quot;Backup&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/dBVTedUWbfg&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>Steamdeck as a Desktop</title><link>https://christitus.com/steamdeck-as-a-desktop/</link><guid isPermaLink="true">https://christitus.com/steamdeck-as-a-desktop/</guid><description>&lt;p&gt;No, do NOT modify the system. This guide shows you how to retain the system while adding package management and the things you need to make the steamdeck your desktop!&lt;/p&gt;

&lt;h2&gt;Adding NIX as your Package Manager&lt;/h2&gt;
&lt;p&gt;NIX is an amazing package manager and far better than the flatpak and other solutions I&apos;ve seen. We create a home directory called nix and map it&apos;s package manager to it, so on updates all our installed packages still work! Not familiar with NIX? Check out this article: &lt;a href=&quot;https://christitus.com/nix-package-manager/&quot;&gt;https://christitus.com/nix-package-manager/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Install NIX on Steamdeck&lt;/h3&gt;
&lt;p&gt;You may need to make the system writeable with &lt;code&gt;steamos-readonly disable&lt;/code&gt;, but &lt;strong&gt;DO NOT MODIFY EXISTING FILES!&lt;/strong&gt;. When steam updates, you could lose your customizations! We will only be making new files.&lt;/p&gt;
&lt;p&gt;Credit for this idea comes from &lt;a href=&quot;https://determinate.systems/posts/nix-on-the-steam-deck#enabling-an-install&quot;&gt;https://determinate.systems/posts/nix-on-the-steam-deck#enabling-an-install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Create &lt;code&gt;/etc/systemd/system/nix-directory.service&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Create a `/nix` directory to be used for bind mounting
PropagatesStopTo=nix-daemon.service
PropagatesStopTo=nix.mount
DefaultDependencies=no
After=grub-recordfail.service
After=steamos-finish-oobe-migration.service

[Service]
Type=oneshot
ExecStart=steamos-readonly disable
ExecStart=mkdir -vp /nix
ExecStart=chmod -v 0755 /nix
ExecStart=chown -v root /nix
ExecStart=chgrp -v root /nix
ExecStart=steamos-readonly enable
ExecStop=steamos-readonly disable
ExecStop=rmdir /nix
ExecStop=steamos-readonly enable
RemainAfterExit=true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create &lt;code&gt;/etc/systemd/system/nix.mount&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Mount `/home/nix` on `/nix`
PropagatesStopTo=nix-daemon.service
PropagatesStopTo=nix-directory.service
After=nix-directory.service
Requires=nix-directory.service
ConditionPathIsDirectory=/nix
DefaultDependencies=no

[Mount]
What=/home/nix
Where=/nix
Type=none
DirectoryMode=0755
Options=bind
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create &lt;code&gt;/etc/systemd/system/ensure-symlinked-units-resolve.service&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Ensure Nix related units which are symlinked resolve
After=nix.mount
Requires=nix-directory.service
Requires=nix.mount
PropagatesStopTo=nix-directory.service
PropagatesStopTo=nix.mount
DefaultDependencies=no

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/systemctl daemon-reload
ExecStart=/usr/bin/systemctl restart --no-block sockets.target timers.target multi-user.target

[Install]
WantedBy=sysinit.target
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enable and start it all with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl enable --now ensure-symlinked-units-resolve.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install NIX&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sh &amp;lt;(curl -L https://nixos.org/nix/install) --daemon
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Searching and Installing Packages&lt;/h3&gt;
&lt;p&gt;Search for packages @ &lt;a href=&quot;https://search.nixos.org/packages&quot;&gt;https://search.nixos.org/packages&lt;/a&gt; Or you can use this from terminal: &lt;code&gt;nix search nixpkgs packagename&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: Look under nix-env and &quot;On Non NixOS&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Install packages with &lt;code&gt;nix-env -iA nixpkgs.packagename&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Improving Performance&lt;/h2&gt;
&lt;p&gt;Change Swappiness 100 to 10 (Reduces use of Swap file)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;vm.swappiness=10&quot; | sudo tee /etc/sysctl.d/99-custom-swappiness.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Change Swap File Size from 1G to 10G (&lt;em&gt;Note:This will take up more space!&lt;/em&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo 0
echo &quot;# Disabling swap...&quot;
sudo swapoff -a
echo 25
echo &quot;# Creating new 8 GB swapfile (be patient, this can take between 10 seconds and 30 minutes)...&quot;
sudo dd if=/dev/zero of=/home/swapfile bs=1G count=&quot;8&quot; status=none
echo 50
echo &quot;# Setting permissions on swapfile...&quot;
sudo chmod 0600 /home/swapfile
echo 75
echo &quot;# Initializing new swapfile...&quot;
sudo mkswap /home/swapfile  
sudo swapon /home/swapfile 
&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/ttOs5iWgNzk&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, 16 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;No, do NOT modify the system. This guide shows you how to retain the system while adding package management and the things you need to make the steamdeck your desktop!&lt;/p&gt;

&lt;h2&gt;Adding NIX as your Package Manager&lt;/h2&gt;
&lt;p&gt;NIX is an amazing package manager and far better than the flatpak and other solutions I&apos;ve seen. We create a home directory called nix and map it&apos;s package manager to it, so on updates all our installed packages still work! Not familiar with NIX? Check out this article: &lt;a href=&quot;https://christitus.com/nix-package-manager/&quot;&gt;https://christitus.com/nix-package-manager/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Install NIX on Steamdeck&lt;/h3&gt;
&lt;p&gt;You may need to make the system writeable with &lt;code&gt;steamos-readonly disable&lt;/code&gt;, but &lt;strong&gt;DO NOT MODIFY EXISTING FILES!&lt;/strong&gt;. When steam updates, you could lose your customizations! We will only be making new files.&lt;/p&gt;
&lt;p&gt;Credit for this idea comes from &lt;a href=&quot;https://determinate.systems/posts/nix-on-the-steam-deck#enabling-an-install&quot;&gt;https://determinate.systems/posts/nix-on-the-steam-deck#enabling-an-install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Create &lt;code&gt;/etc/systemd/system/nix-directory.service&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Create a `/nix` directory to be used for bind mounting
PropagatesStopTo=nix-daemon.service
PropagatesStopTo=nix.mount
DefaultDependencies=no
After=grub-recordfail.service
After=steamos-finish-oobe-migration.service

[Service]
Type=oneshot
ExecStart=steamos-readonly disable
ExecStart=mkdir -vp /nix
ExecStart=chmod -v 0755 /nix
ExecStart=chown -v root /nix
ExecStart=chgrp -v root /nix
ExecStart=steamos-readonly enable
ExecStop=steamos-readonly disable
ExecStop=rmdir /nix
ExecStop=steamos-readonly enable
RemainAfterExit=true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create &lt;code&gt;/etc/systemd/system/nix.mount&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Mount `/home/nix` on `/nix`
PropagatesStopTo=nix-daemon.service
PropagatesStopTo=nix-directory.service
After=nix-directory.service
Requires=nix-directory.service
ConditionPathIsDirectory=/nix
DefaultDependencies=no

[Mount]
What=/home/nix
Where=/nix
Type=none
DirectoryMode=0755
Options=bind
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create &lt;code&gt;/etc/systemd/system/ensure-symlinked-units-resolve.service&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Ensure Nix related units which are symlinked resolve
After=nix.mount
Requires=nix-directory.service
Requires=nix.mount
PropagatesStopTo=nix-directory.service
PropagatesStopTo=nix.mount
DefaultDependencies=no

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/systemctl daemon-reload
ExecStart=/usr/bin/systemctl restart --no-block sockets.target timers.target multi-user.target

[Install]
WantedBy=sysinit.target
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Enable and start it all with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl enable --now ensure-symlinked-units-resolve.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install NIX&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sh &amp;lt;(curl -L https://nixos.org/nix/install) --daemon
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Searching and Installing Packages&lt;/h3&gt;
&lt;p&gt;Search for packages @ &lt;a href=&quot;https://search.nixos.org/packages&quot;&gt;https://search.nixos.org/packages&lt;/a&gt; Or you can use this from terminal: &lt;code&gt;nix search nixpkgs packagename&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: Look under nix-env and &quot;On Non NixOS&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Install packages with &lt;code&gt;nix-env -iA nixpkgs.packagename&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Improving Performance&lt;/h2&gt;
&lt;p&gt;Change Swappiness 100 to 10 (Reduces use of Swap file)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;vm.swappiness=10&quot; | sudo tee /etc/sysctl.d/99-custom-swappiness.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Change Swap File Size from 1G to 10G (&lt;em&gt;Note:This will take up more space!&lt;/em&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo 0
echo &quot;# Disabling swap...&quot;
sudo swapoff -a
echo 25
echo &quot;# Creating new 8 GB swapfile (be patient, this can take between 10 seconds and 30 minutes)...&quot;
sudo dd if=/dev/zero of=/home/swapfile bs=1G count=&quot;8&quot; status=none
echo 50
echo &quot;# Setting permissions on swapfile...&quot;
sudo chmod 0600 /home/swapfile
echo 75
echo &quot;# Initializing new swapfile...&quot;
sudo mkswap /home/swapfile  
sudo swapon /home/swapfile 
&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/ttOs5iWgNzk&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 Open Source?</title><link>https://christitus.com/why-open-source/</link><guid isPermaLink="true">https://christitus.com/why-open-source/</guid><description>&lt;p&gt;Why is open source done? The developer gives up all his code and potential for profit from the code.&lt;/p&gt;

&lt;h2&gt;The Reason&lt;/h2&gt;
&lt;p&gt;The main reason for open source is for collaboration and standardization. Without open source, you are reliant on a team of developers you hire and you are responsible for maintenance and all development. Hire less talented people? You have less development with a high cost. You also don&apos;t have the ability to learn past what skills the people on the project has. One man band? You can&apos;t learn much because you have no contributions and are reliant on your abilities.&lt;/p&gt;
&lt;p&gt;On the flip side, you can learn and collaborate with thousands of people around the world WITH open source. What about the loss of money from sales? I remind myself that I&apos;m not John Carmack, which was one of the first commercial open source successes with Quake and making it&apos;s engine open source. He did close source the content of the Game, but is a gifted individual. The game made millions while also being open source at its core. When I open source all my projects, I do so with the intent of learning something. The knowledge I pickup is MORE valuable to me than if I sold the project as a closed source tool.&lt;/p&gt;
&lt;h2&gt;Making Profit&lt;/h2&gt;
&lt;p&gt;Let&apos;s analyse how I make a million dollars off a project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Closed Source - Project requires a purchase and little longer development time to put in DRM so it can&apos;t be copied or stolen. The software can only be as good as the developer. Even with a gifted developer, the chances of success are slim to even make $1000. However, if the program has a successful launch with massive adoption making a million dollars off a $50 sale price is easy. The main issue is marketing, which can be solved with social media. The downside is the programmer learns just what is needed for project completion if anything at all. The only person that should consider this option is the truly elite or companies that hire teams of people to complete the program.&lt;/li&gt;
&lt;li&gt;Open Source - Project can develop at a rapid pace with issues coming in from users, collaboration happening with pull requests from other programmers that have different knowledge sets than you. The amount of knowledge you gain by doing this is vast. I value the knowledge gained greater than the possibilities of closed source development. Also, since there are more eyeballs on the project the program itself will be more complete and feature rich. Instead of making with profit in mind, you are programming with the end user experience at the forefront.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Open Source Myths&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Crowdfunding - Doesn&apos;t work or rarely works in many instances. If you need a paycheck from a program, you need to go punch a clock somewhere. Every project I follow needs VC or private funding to see it to the finish line when time and money are priorities.&lt;/li&gt;
&lt;li&gt;Everything should be FREE - Quake is a perfect example of a properly monetized project. Engine was open source, but the content was not. Just because something is open source doesn&apos;t mean the compiled project needs to be.&lt;/li&gt;
&lt;li&gt;Less Secure - This is a strange belief that some subscribe to the security by obscurity line of thought. Popular open source projects have its code reviewed almost daily and security holes plugged quicker than closed source that might never even have an independent code review!&lt;/li&gt;
&lt;li&gt;Hard to Maintain - Since more people are pushing requests and issues it becomes harder to maintain as a few have said. Any project that I stopped maintaining or it just became unwieldy was my fault. The person in charge of the open source project has to be willing to deny and refuse MANY pull requests. It is up to the project maintainer to be vigilant, clean the code, and have strict rules for contribution. Anytime I&apos;ve failed to maintain a project, it was because of a poor understanding of a PR or GitHub in general.&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/dhox4jNrBQM&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, 09 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Why is open source done? The developer gives up all his code and potential for profit from the code.&lt;/p&gt;

&lt;h2&gt;The Reason&lt;/h2&gt;
&lt;p&gt;The main reason for open source is for collaboration and standardization. Without open source, you are reliant on a team of developers you hire and you are responsible for maintenance and all development. Hire less talented people? You have less development with a high cost. You also don&apos;t have the ability to learn past what skills the people on the project has. One man band? You can&apos;t learn much because you have no contributions and are reliant on your abilities.&lt;/p&gt;
&lt;p&gt;On the flip side, you can learn and collaborate with thousands of people around the world WITH open source. What about the loss of money from sales? I remind myself that I&apos;m not John Carmack, which was one of the first commercial open source successes with Quake and making it&apos;s engine open source. He did close source the content of the Game, but is a gifted individual. The game made millions while also being open source at its core. When I open source all my projects, I do so with the intent of learning something. The knowledge I pickup is MORE valuable to me than if I sold the project as a closed source tool.&lt;/p&gt;
&lt;h2&gt;Making Profit&lt;/h2&gt;
&lt;p&gt;Let&apos;s analyse how I make a million dollars off a project:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Closed Source - Project requires a purchase and little longer development time to put in DRM so it can&apos;t be copied or stolen. The software can only be as good as the developer. Even with a gifted developer, the chances of success are slim to even make $1000. However, if the program has a successful launch with massive adoption making a million dollars off a $50 sale price is easy. The main issue is marketing, which can be solved with social media. The downside is the programmer learns just what is needed for project completion if anything at all. The only person that should consider this option is the truly elite or companies that hire teams of people to complete the program.&lt;/li&gt;
&lt;li&gt;Open Source - Project can develop at a rapid pace with issues coming in from users, collaboration happening with pull requests from other programmers that have different knowledge sets than you. The amount of knowledge you gain by doing this is vast. I value the knowledge gained greater than the possibilities of closed source development. Also, since there are more eyeballs on the project the program itself will be more complete and feature rich. Instead of making with profit in mind, you are programming with the end user experience at the forefront.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Open Source Myths&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Crowdfunding - Doesn&apos;t work or rarely works in many instances. If you need a paycheck from a program, you need to go punch a clock somewhere. Every project I follow needs VC or private funding to see it to the finish line when time and money are priorities.&lt;/li&gt;
&lt;li&gt;Everything should be FREE - Quake is a perfect example of a properly monetized project. Engine was open source, but the content was not. Just because something is open source doesn&apos;t mean the compiled project needs to be.&lt;/li&gt;
&lt;li&gt;Less Secure - This is a strange belief that some subscribe to the security by obscurity line of thought. Popular open source projects have its code reviewed almost daily and security holes plugged quicker than closed source that might never even have an independent code review!&lt;/li&gt;
&lt;li&gt;Hard to Maintain - Since more people are pushing requests and issues it becomes harder to maintain as a few have said. Any project that I stopped maintaining or it just became unwieldy was my fault. The person in charge of the open source project has to be willing to deny and refuse MANY pull requests. It is up to the project maintainer to be vigilant, clean the code, and have strict rules for contribution. Anytime I&apos;ve failed to maintain a project, it was because of a poor understanding of a PR or GitHub in general.&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/dhox4jNrBQM&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>Fix Screen Tearing Linux</title><link>https://christitus.com/fix-screen-tearing-linux/</link><guid isPermaLink="true">https://christitus.com/fix-screen-tearing-linux/</guid><description>&lt;p&gt;The guide shows you ALL the methods to remove screen tearing. VSync, Monitor Composition, and Drivers that are problem childs.&lt;/p&gt;

&lt;h2&gt;Why it happens?&lt;/h2&gt;
&lt;p&gt;Screen tearing is the hardware driving more frames than the monitor is capable of displaying or displaying more than 1 frame in a single draw. On Linux the stock configurations are awful and you see it a LOT on nVidia AND Intel. Not so much on AMD, because the display drivers are baked into the kernel and one more reason for using AMD graphics on Linux when you can.&lt;/p&gt;
&lt;h2&gt;Compositors (Problem #1)&lt;/h2&gt;
&lt;p&gt;There are 3 main compositors that Linux distributions generally use.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KWin (KDE)&lt;/li&gt;
&lt;li&gt;Mutter (GNOME)&lt;/li&gt;
&lt;li&gt;picom/compton (Various - picom is the evolution of compton)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In these there is options for VSync. This doesn&apos;t generally fix the issue, but it does help when you have BAD screen tearing when moving windows in you Linux system.&lt;/p&gt;
&lt;p&gt;KWin (KDE) Example:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/fix-screen-tearing-linux/kwin.webp&quot; alt=&quot;Kwin&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Mutter (Gnome) is enabled by default, but has made advancements with Variable Rate Refresh to fix some tearing back in July of 2022. This VRR improvement means you need to update to the latest GNOME and you can see improvements.&lt;/p&gt;
&lt;p&gt;Compton/picom Configuration: (ex. ~/picom.conf)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#################################
#       General Settings        #
#################################
vsync = true;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Intel/AMD X11 Configurations&lt;/h2&gt;
&lt;p&gt;The configuration to enable vsync/freesync support when the graphics are initialized is the primary method to fix tearing. Here are the options for BOTH Intel and AMD.&lt;/p&gt;
&lt;h3&gt;Intel X11 Config&lt;/h3&gt;
&lt;p&gt;File to Edit/Add: &lt;code&gt;/etc/X11/xorg.conf.d/20-intel.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Section &quot;Device&quot;
    Identifier    &quot;Intel Graphics&quot;
    Driver        &quot;intel&quot;
    Option        &quot;TearFree&quot;  &quot;true&quot;
EndSection
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: There are extra options that can help like: &lt;code&gt;Option  &quot;AccelMethod&quot; &quot;uxa&quot;&lt;/code&gt; or &lt;code&gt;Option  &quot;TripleBuffer&quot; &quot;true&quot;&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;ISSUE: After enabling and rebooting if you start to see screen artifacts there is a BAD Driver package that causes this. Remove &lt;code&gt;sudo apt remove xserver-xorg-video-intel&lt;/code&gt;. This is an old intel display driver that is NOT being maintained. The newer the computer, the more problems this package will cause. These drivers aren&apos;t even needed and I don&apos;t know why they are installed by default and not removed altogether!&lt;/p&gt;
&lt;h3&gt;AMD X11 Config&lt;/h3&gt;
&lt;p&gt;File to Edit/Add: &lt;code&gt;/etc/X11/xorg.conf.d/20-amd.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Section &quot;Device&quot;
    Identifier  &quot;AMD Graphics&quot;
    Driver      &quot;amdgpu&quot;
    Option      &quot;TearFree&quot; &quot;true&quot;
EndSection
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;nVidia Configuration - Why is it always nVidia?&lt;/h2&gt;
&lt;p&gt;I hope in 2 years nVidia cards stop sucking as bad in Linux, because it is an AWFUL experience. Yes, you can fix it with drivers and custom settings, but the first impressions from users with nVidia cards is seldom a good one. Let&apos;s start with making sure you have the &lt;code&gt;nvidia-driver&lt;/code&gt; installed with &lt;code&gt;nvidia-settings&lt;/code&gt; package.&lt;/p&gt;
&lt;h3&gt;nvidia-settings&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/fix-screen-tearing-linux/nvidia-settings.webp&quot; alt=&quot;Nvidia Settings&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;X Server Display Configuration &amp;gt; Advanced&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Force Full Composition Pipeline&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Apply and Save to X Configuration File.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CLI Method&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvidia-settings --assign CurrentMetaMode=&quot;nvidia-auto-select +0+0 {ForceFullCompositionPipeline=On}&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reboot!&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/rVBq6d3c1gM&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, 04 Jan 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The guide shows you ALL the methods to remove screen tearing. VSync, Monitor Composition, and Drivers that are problem childs.&lt;/p&gt;

&lt;h2&gt;Why it happens?&lt;/h2&gt;
&lt;p&gt;Screen tearing is the hardware driving more frames than the monitor is capable of displaying or displaying more than 1 frame in a single draw. On Linux the stock configurations are awful and you see it a LOT on nVidia AND Intel. Not so much on AMD, because the display drivers are baked into the kernel and one more reason for using AMD graphics on Linux when you can.&lt;/p&gt;
&lt;h2&gt;Compositors (Problem #1)&lt;/h2&gt;
&lt;p&gt;There are 3 main compositors that Linux distributions generally use.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;KWin (KDE)&lt;/li&gt;
&lt;li&gt;Mutter (GNOME)&lt;/li&gt;
&lt;li&gt;picom/compton (Various - picom is the evolution of compton)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In these there is options for VSync. This doesn&apos;t generally fix the issue, but it does help when you have BAD screen tearing when moving windows in you Linux system.&lt;/p&gt;
&lt;p&gt;KWin (KDE) Example:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/fix-screen-tearing-linux/kwin.webp&quot; alt=&quot;Kwin&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Mutter (Gnome) is enabled by default, but has made advancements with Variable Rate Refresh to fix some tearing back in July of 2022. This VRR improvement means you need to update to the latest GNOME and you can see improvements.&lt;/p&gt;
&lt;p&gt;Compton/picom Configuration: (ex. ~/picom.conf)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#################################
#       General Settings        #
#################################
vsync = true;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Intel/AMD X11 Configurations&lt;/h2&gt;
&lt;p&gt;The configuration to enable vsync/freesync support when the graphics are initialized is the primary method to fix tearing. Here are the options for BOTH Intel and AMD.&lt;/p&gt;
&lt;h3&gt;Intel X11 Config&lt;/h3&gt;
&lt;p&gt;File to Edit/Add: &lt;code&gt;/etc/X11/xorg.conf.d/20-intel.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Section &quot;Device&quot;
    Identifier    &quot;Intel Graphics&quot;
    Driver        &quot;intel&quot;
    Option        &quot;TearFree&quot;  &quot;true&quot;
EndSection
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: There are extra options that can help like: &lt;code&gt;Option  &quot;AccelMethod&quot; &quot;uxa&quot;&lt;/code&gt; or &lt;code&gt;Option  &quot;TripleBuffer&quot; &quot;true&quot;&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;ISSUE: After enabling and rebooting if you start to see screen artifacts there is a BAD Driver package that causes this. Remove &lt;code&gt;sudo apt remove xserver-xorg-video-intel&lt;/code&gt;. This is an old intel display driver that is NOT being maintained. The newer the computer, the more problems this package will cause. These drivers aren&apos;t even needed and I don&apos;t know why they are installed by default and not removed altogether!&lt;/p&gt;
&lt;h3&gt;AMD X11 Config&lt;/h3&gt;
&lt;p&gt;File to Edit/Add: &lt;code&gt;/etc/X11/xorg.conf.d/20-amd.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Section &quot;Device&quot;
    Identifier  &quot;AMD Graphics&quot;
    Driver      &quot;amdgpu&quot;
    Option      &quot;TearFree&quot; &quot;true&quot;
EndSection
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;nVidia Configuration - Why is it always nVidia?&lt;/h2&gt;
&lt;p&gt;I hope in 2 years nVidia cards stop sucking as bad in Linux, because it is an AWFUL experience. Yes, you can fix it with drivers and custom settings, but the first impressions from users with nVidia cards is seldom a good one. Let&apos;s start with making sure you have the &lt;code&gt;nvidia-driver&lt;/code&gt; installed with &lt;code&gt;nvidia-settings&lt;/code&gt; package.&lt;/p&gt;
&lt;h3&gt;nvidia-settings&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2023/fix-screen-tearing-linux/nvidia-settings.webp&quot; alt=&quot;Nvidia Settings&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to &lt;strong&gt;X Server Display Configuration &amp;gt; Advanced&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Force Full Composition Pipeline&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Apply and Save to X Configuration File.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CLI Method&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvidia-settings --assign CurrentMetaMode=&quot;nvidia-auto-select +0+0 {ForceFullCompositionPipeline=On}&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reboot!&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/rVBq6d3c1gM&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>Customizing Steam Games in Linux</title><link>https://christitus.com/customizing-steam-games-in-linux/</link><guid isPermaLink="true">https://christitus.com/customizing-steam-games-in-linux/</guid><description>&lt;p&gt;Installing steam games on Linux is easy but running executables inside those games to add mods, maps, and other Windows programs that enhance the gaming experience is essential. This guide shows you how to do this.&lt;/p&gt;

&lt;h2&gt;Protontricks&lt;/h2&gt;
&lt;p&gt;This package has evolved and a fantastic way of fixing broken games and enhancing existing games. The source repo is @ &lt;a href=&quot;https://github.com/Matoking/protontricks&quot;&gt;https://github.com/Matoking/protontricks&lt;/a&gt; and it has a couple dependencies.&lt;/p&gt;
&lt;p&gt;I caution you from using the built-in packages on Ubuntu 22.04 because it uses an old package. If you are reading this in 2024 this might have changed, but until then I recommend installing it through the official method using &lt;code&gt;pipx&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Installing&lt;/h3&gt;
&lt;p&gt;First install pipx&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install python3-pip python3-setuptools python3-venv pipx winetricks
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then use pipx to install protontricks&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pipx install protontricks
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Using Protontricks&lt;/h2&gt;
&lt;p&gt;List all installed steam games with &lt;code&gt;protontricks -l&lt;/code&gt; &lt;em&gt;Note: Old versions do NOT have this feature&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/customizing-steam-games-in-linux/list-proton.webp&quot; alt=&quot;List Proton&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Adding corefonts to a prefix (this fixes a LOT of black screens or if launchers don&apos;t display fonts/text properly)&lt;/p&gt;
&lt;p&gt;Syntax: &lt;code&gt;protontricks APPID corefonts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example of adding corefonts to Lord of The Rings Online.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/customizing-steam-games-in-linux/corefont-install.webp&quot; alt=&quot;Corefont Install&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Running custom commands (executables inside the game directories)&lt;/p&gt;
&lt;p&gt;Syntax: &lt;code&gt;protontricks-launch --appid APPID COMMANDEXE&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example launching a plugin installer for Lord of the Rings Online&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/customizing-steam-games-in-linux/plugin-launch.webp&quot; alt=&quot;Plugin Launch&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/nRiUdVSeuFU&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, 28 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Installing steam games on Linux is easy but running executables inside those games to add mods, maps, and other Windows programs that enhance the gaming experience is essential. This guide shows you how to do this.&lt;/p&gt;

&lt;h2&gt;Protontricks&lt;/h2&gt;
&lt;p&gt;This package has evolved and a fantastic way of fixing broken games and enhancing existing games. The source repo is @ &lt;a href=&quot;https://github.com/Matoking/protontricks&quot;&gt;https://github.com/Matoking/protontricks&lt;/a&gt; and it has a couple dependencies.&lt;/p&gt;
&lt;p&gt;I caution you from using the built-in packages on Ubuntu 22.04 because it uses an old package. If you are reading this in 2024 this might have changed, but until then I recommend installing it through the official method using &lt;code&gt;pipx&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Installing&lt;/h3&gt;
&lt;p&gt;First install pipx&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install python3-pip python3-setuptools python3-venv pipx winetricks
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then use pipx to install protontricks&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pipx install protontricks
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Using Protontricks&lt;/h2&gt;
&lt;p&gt;List all installed steam games with &lt;code&gt;protontricks -l&lt;/code&gt; &lt;em&gt;Note: Old versions do NOT have this feature&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/customizing-steam-games-in-linux/list-proton.webp&quot; alt=&quot;List Proton&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Adding corefonts to a prefix (this fixes a LOT of black screens or if launchers don&apos;t display fonts/text properly)&lt;/p&gt;
&lt;p&gt;Syntax: &lt;code&gt;protontricks APPID corefonts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example of adding corefonts to Lord of The Rings Online.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/customizing-steam-games-in-linux/corefont-install.webp&quot; alt=&quot;Corefont Install&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Running custom commands (executables inside the game directories)&lt;/p&gt;
&lt;p&gt;Syntax: &lt;code&gt;protontricks-launch --appid APPID COMMANDEXE&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example launching a plugin installer for Lord of the Rings Online&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/customizing-steam-games-in-linux/plugin-launch.webp&quot; alt=&quot;Plugin Launch&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/nRiUdVSeuFU&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>Quickemu</title><link>https://christitus.com/quickemu/</link><guid isPermaLink="true">https://christitus.com/quickemu/</guid><description>&lt;p&gt;This is a GitHub project that installs virtual machines for more than 300+ spins of Linux, Windows, and macOS!&lt;/p&gt;

&lt;h2&gt;The Project&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/quickemu-project/quickemu&quot;&gt;https://github.com/quickemu-project/quickemu&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Dependency requirements:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install qemu bash coreutils ovmf grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-client-gtk swtpm wget xdg-user-dirs zsync unzip
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install for Ubuntu&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-add-repository ppa:flexiondotorg/quickemu
sudo apt update
sudo apt install quickemu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;GUI Install&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:yannick-mauray/quickgui
sudo apt update
sudo apt install quickgui
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Other Distros (Use &lt;a href=&quot;https://christitus.com/nix-package-manager/&quot;&gt;NIX Installer&lt;/a&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nix-env -iA nixpkgs.quickemu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Build from Source for GUI &lt;a href=&quot;https://github.com/quickemu-project/quickgui&quot;&gt;https://github.com/quickemu-project/quickgui&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;CLI Usage&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;quickget ubuntu-mate 22.04
quickemu --vm ubuntu-mate-22.04.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is pretty easy to manage with it&apos;s own dedicated directory. Ex. &lt;code&gt;~/VMs&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Downloading via GUI&lt;/h2&gt;
&lt;p&gt;Select your OS and Press Download (Yes, it&apos;s that easy!)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/quickemu/quickgui.webp&quot; alt=&quot;Quickgui&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/quickemu/kubuntu-download.webp&quot; alt=&quot;Kubuntu Download&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/87MCT3Ekjlo&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, 21 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This is a GitHub project that installs virtual machines for more than 300+ spins of Linux, Windows, and macOS!&lt;/p&gt;

&lt;h2&gt;The Project&lt;/h2&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/quickemu-project/quickemu&quot;&gt;https://github.com/quickemu-project/quickemu&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Dependency requirements:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install qemu bash coreutils ovmf grep jq lsb procps python3 genisoimage usbutils util-linux sed spice-client-gtk swtpm wget xdg-user-dirs zsync unzip
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install for Ubuntu&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-add-repository ppa:flexiondotorg/quickemu
sudo apt update
sudo apt install quickemu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;GUI Install&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:yannick-mauray/quickgui
sudo apt update
sudo apt install quickgui
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Other Distros (Use &lt;a href=&quot;https://christitus.com/nix-package-manager/&quot;&gt;NIX Installer&lt;/a&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nix-env -iA nixpkgs.quickemu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Build from Source for GUI &lt;a href=&quot;https://github.com/quickemu-project/quickgui&quot;&gt;https://github.com/quickemu-project/quickgui&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;CLI Usage&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;quickget ubuntu-mate 22.04
quickemu --vm ubuntu-mate-22.04.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is pretty easy to manage with it&apos;s own dedicated directory. Ex. &lt;code&gt;~/VMs&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Downloading via GUI&lt;/h2&gt;
&lt;p&gt;Select your OS and Press Download (Yes, it&apos;s that easy!)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/quickemu/quickgui.webp&quot; alt=&quot;Quickgui&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/quickemu/kubuntu-download.webp&quot; alt=&quot;Kubuntu Download&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/87MCT3Ekjlo&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>Virtual Machine Formats</title><link>https://christitus.com/virtual-machine-formats/</link><guid isPermaLink="true">https://christitus.com/virtual-machine-formats/</guid><description>&lt;p&gt;This Guide goes over transferring and what each type of virtual machine is used for.&lt;/p&gt;

&lt;h2&gt;The Types&lt;/h2&gt;
&lt;h3&gt;VDI - Virtualbox&lt;/h3&gt;
&lt;p&gt;The only time I&apos;ve seen this format is in Virtualbox instances. They are always converted when moved to other hypervisors. The VDI packaging is open source and considered efficient.&lt;/p&gt;
&lt;h3&gt;VMDK - VMWare&lt;/h3&gt;
&lt;p&gt;This is the market leader and what you will see the most in virtualization environments. Virtualbox and QEMU can run them without conversion.&lt;/p&gt;
&lt;h3&gt;VHD - Microsoft&lt;/h3&gt;
&lt;p&gt;Leave it to Microsoft to make the worst container. VHD only holds a 2 TB capacity and why they created VHDX which improves this to 64 TB. Its not as performant as other containers, but gets the job done. The main benefit to these is they are read natively inside Windows without the need for extra software. You can mount and look at partition layouts with native windows tools like Disk Management.&lt;/p&gt;
&lt;h3&gt;QCOW2 - QEMU&lt;/h3&gt;
&lt;p&gt;QEMU is by far my favorite hypervisor because of the versatility it gives me. QCOW2 is the file format you will use and it fantastic. There is a conversion tool that comes with QEMU that will easily convert any image. I&apos;d recommend first converting the image to OVA as it is the most portable and versatile. Here is a sample script to convert to qcow2.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -xvf original.ova
qemu-img convert -O qcow2 original.vmdk original.qcow2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;OVF and OVA - The Best Way to Share VMs&lt;/h3&gt;
&lt;p&gt;This standard is widely adopted from VMWare, but you will be able to ingest these files into any hypervisor. VMWare, Virtualbox, and XenServer (XCP-ng) do this natively, where QEMU needs a little more conversion, but simple to use. Here is the &lt;a href=&quot;https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-AE61948B-C2EE-436E-BAFB-3C7209088552.html&quot;&gt;official website&lt;/a&gt;  right up on these files.&lt;/p&gt;
&lt;p&gt;The TLDR is use OVA as it grabs all the information from the VMs (VMDK, OVF, and other information) and packages it all into one file for you. This is by far the best way to share a Virtual Machine.&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/EdP1Fc-exwY&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, 19 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This Guide goes over transferring and what each type of virtual machine is used for.&lt;/p&gt;

&lt;h2&gt;The Types&lt;/h2&gt;
&lt;h3&gt;VDI - Virtualbox&lt;/h3&gt;
&lt;p&gt;The only time I&apos;ve seen this format is in Virtualbox instances. They are always converted when moved to other hypervisors. The VDI packaging is open source and considered efficient.&lt;/p&gt;
&lt;h3&gt;VMDK - VMWare&lt;/h3&gt;
&lt;p&gt;This is the market leader and what you will see the most in virtualization environments. Virtualbox and QEMU can run them without conversion.&lt;/p&gt;
&lt;h3&gt;VHD - Microsoft&lt;/h3&gt;
&lt;p&gt;Leave it to Microsoft to make the worst container. VHD only holds a 2 TB capacity and why they created VHDX which improves this to 64 TB. Its not as performant as other containers, but gets the job done. The main benefit to these is they are read natively inside Windows without the need for extra software. You can mount and look at partition layouts with native windows tools like Disk Management.&lt;/p&gt;
&lt;h3&gt;QCOW2 - QEMU&lt;/h3&gt;
&lt;p&gt;QEMU is by far my favorite hypervisor because of the versatility it gives me. QCOW2 is the file format you will use and it fantastic. There is a conversion tool that comes with QEMU that will easily convert any image. I&apos;d recommend first converting the image to OVA as it is the most portable and versatile. Here is a sample script to convert to qcow2.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;tar -xvf original.ova
qemu-img convert -O qcow2 original.vmdk original.qcow2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;OVF and OVA - The Best Way to Share VMs&lt;/h3&gt;
&lt;p&gt;This standard is widely adopted from VMWare, but you will be able to ingest these files into any hypervisor. VMWare, Virtualbox, and XenServer (XCP-ng) do this natively, where QEMU needs a little more conversion, but simple to use. Here is the &lt;a href=&quot;https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-AE61948B-C2EE-436E-BAFB-3C7209088552.html&quot;&gt;official website&lt;/a&gt;  right up on these files.&lt;/p&gt;
&lt;p&gt;The TLDR is use OVA as it grabs all the information from the VMs (VMDK, OVF, and other information) and packages it all into one file for you. This is by far the best way to share a Virtual Machine.&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/EdP1Fc-exwY&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>Acronis Cyber Protect Home Office</title><link>https://christitus.com/acronis-true-image/</link><guid isPermaLink="true">https://christitus.com/acronis-true-image/</guid><description>&lt;p&gt;Acronis True Image has undergone an expansion and rename in the past couple years to Acronis Cyber Protect Home Office. This is a quick breakdown of their new offering.&lt;/p&gt;

&lt;h2&gt;Backup&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/acronis-true-image/backup.webp&quot; alt=&quot;Backup&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Acronis backup is what the company is known for as it offered block level backup over 10 years ago. Their backup services have always been some of the best and this still holds true today. The interface is simplified and intuitive. It can get a complete copy of the entire system while its online and back it up locally or to the cloud.&lt;/p&gt;
&lt;p&gt;Transfer rates to the cloud on my connection maxed out around 95 Mbps and went as low as 50 Mbps. This is average for most cloud backup speeds in the residential realm.&lt;/p&gt;
&lt;h2&gt;Anti-Virus&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/acronis-true-image/av.webp&quot; alt=&quot;Av&quot; /&gt;&lt;/p&gt;
&lt;p&gt;One of the biggest additions is the inclusion of anti-virus. This protection is adequate and it brings the entire protection suite in-house. I&apos;m not a fan of most AV implementations and what matters is a good backup when these inevitably fail. It makes sense that they included this, but to me it makes the software seem bloated and unnecessary.&lt;/p&gt;
&lt;h2&gt;File Sync&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/acronis-true-image/sync.webp&quot; alt=&quot;Sync&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This addition is beneficial for those with space concerns or multiple computers. The archive feature removes the file from the local device once it uploads it to the Acronis online cloud. The sync function is like Dropbox and syncs files across devices.&lt;/p&gt;
&lt;h2&gt;Other Tools&lt;/h2&gt;
&lt;p&gt;Disk Clone - is helpful when replacing hard drives. I used to use this all the time when SDDs hit the market and I was replacing legacy hard drives.&lt;/p&gt;
&lt;p&gt;It uses 84 FOSS programs listed on their website: &lt;a href=&quot;https://kb.acronis.com/content/69667&quot;&gt;https://kb.acronis.com/content/69667&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Cost&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/acronis-true-image/cost.webp&quot; alt=&quot;Cost&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The product has moved to a subscription model. The essential model is local and offers the core backup services with no cloud. The advanced function could work for those that don&apos;t need a full image of their device, but to utilise the software to its fullest capacity it will cost you $124.99 per year for the software with 1 TB of storage. Each additional TB of storage adds $40. No doubt this is on the high end of cost when compared to the competition and why they added they expanded its offerings past backup to help justify the price.&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/VYTCeIHS6Kg&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, 16 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Acronis True Image has undergone an expansion and rename in the past couple years to Acronis Cyber Protect Home Office. This is a quick breakdown of their new offering.&lt;/p&gt;

&lt;h2&gt;Backup&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/acronis-true-image/backup.webp&quot; alt=&quot;Backup&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Acronis backup is what the company is known for as it offered block level backup over 10 years ago. Their backup services have always been some of the best and this still holds true today. The interface is simplified and intuitive. It can get a complete copy of the entire system while its online and back it up locally or to the cloud.&lt;/p&gt;
&lt;p&gt;Transfer rates to the cloud on my connection maxed out around 95 Mbps and went as low as 50 Mbps. This is average for most cloud backup speeds in the residential realm.&lt;/p&gt;
&lt;h2&gt;Anti-Virus&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/acronis-true-image/av.webp&quot; alt=&quot;Av&quot; /&gt;&lt;/p&gt;
&lt;p&gt;One of the biggest additions is the inclusion of anti-virus. This protection is adequate and it brings the entire protection suite in-house. I&apos;m not a fan of most AV implementations and what matters is a good backup when these inevitably fail. It makes sense that they included this, but to me it makes the software seem bloated and unnecessary.&lt;/p&gt;
&lt;h2&gt;File Sync&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/acronis-true-image/sync.webp&quot; alt=&quot;Sync&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This addition is beneficial for those with space concerns or multiple computers. The archive feature removes the file from the local device once it uploads it to the Acronis online cloud. The sync function is like Dropbox and syncs files across devices.&lt;/p&gt;
&lt;h2&gt;Other Tools&lt;/h2&gt;
&lt;p&gt;Disk Clone - is helpful when replacing hard drives. I used to use this all the time when SDDs hit the market and I was replacing legacy hard drives.&lt;/p&gt;
&lt;p&gt;It uses 84 FOSS programs listed on their website: &lt;a href=&quot;https://kb.acronis.com/content/69667&quot;&gt;https://kb.acronis.com/content/69667&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Cost&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/acronis-true-image/cost.webp&quot; alt=&quot;Cost&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The product has moved to a subscription model. The essential model is local and offers the core backup services with no cloud. The advanced function could work for those that don&apos;t need a full image of their device, but to utilise the software to its fullest capacity it will cost you $124.99 per year for the software with 1 TB of storage. Each additional TB of storage adds $40. No doubt this is on the high end of cost when compared to the competition and why they added they expanded its offerings past backup to help justify the price.&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/VYTCeIHS6Kg&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>Cleanup Docker</title><link>https://christitus.com/cleanup-docker/</link><guid isPermaLink="true">https://christitus.com/cleanup-docker/</guid><description>&lt;p&gt;If you are running docker you will accumulate a lot of unused images and volumes as you update running containers. This makes maintenance a necessity.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1603766983274729472&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Do you need this?&lt;/h2&gt;
&lt;p&gt;Check your portainer status page and look for &quot;unused&quot; images and containers. If you are seeing a lot of these, then you are wasting space and I&apos;d recommend running this script to clean them up!&lt;/p&gt;
&lt;h2&gt;The Cleanup Script&lt;/h2&gt;
&lt;p&gt;Run this bash script every week to ensure the cleanup gets performed.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash

docker volume rm $(docker volume ls -f dangling=true -q)
docker rmi $(docker images --quiet --filter &quot;dangling=true&quot;)
&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Fri, 16 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you are running docker you will accumulate a lot of unused images and volumes as you update running containers. This makes maintenance a necessity.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1603766983274729472&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Do you need this?&lt;/h2&gt;
&lt;p&gt;Check your portainer status page and look for &quot;unused&quot; images and containers. If you are seeing a lot of these, then you are wasting space and I&apos;d recommend running this script to clean them up!&lt;/p&gt;
&lt;h2&gt;The Cleanup Script&lt;/h2&gt;
&lt;p&gt;Run this bash script every week to ensure the cleanup gets performed.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash

docker volume rm $(docker volume ls -f dangling=true -q)
docker rmi $(docker images --quiet --filter &quot;dangling=true&quot;)
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>Screensavers</title><link>https://christitus.com/screensavers/</link><guid isPermaLink="true">https://christitus.com/screensavers/</guid><description>&lt;p&gt;Screensavers might be the past, but they are still one of the coolest to do on your PC.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1594450349657821186&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;SCR File Screensavers&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;System47 SCR File - &lt;a href=&quot;https://www.mewho.com/system47/&quot;&gt;https://www.mewho.com/system47/&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/system47.webp&quot; alt=&quot;System47&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/sysinternals/downloads/bluescreen&quot;&gt;Microsoft BSOD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.screensaversplanet.com/screensavers/?free=on&quot;&gt;Screensavers Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Website Screensavers&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.mewho.com/starfield47/&quot;&gt;Starfield meWho&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/starfield.webp&quot; alt=&quot;Starfield&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://gradiyent.netlify.app/&quot;&gt;Gradient Colors&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/gradient.webp&quot; alt=&quot;Gradient&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/rssavers/&quot;&gt;Really Slick Screensavers&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/hyperspace.webp&quot; alt=&quot;Hyperspace&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.ravbug.com/bsod/&quot;&gt;Fake BSODs&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/bsod.webp&quot; alt=&quot;Bsod&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cryptoprank.com/#/&quot;&gt;Crypto Prank&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/crypto-prank.webp&quot; alt=&quot;Crypto Prank&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://fakeupdate.net/&quot;&gt;Fake Updates&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/starfield-screensaver/xp.webp&quot; alt=&quot;Xp&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://screen.vercel.app/&quot;&gt;Fake Screens&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://updatefaker.com/&quot;&gt;Update Faker&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Load Screen Savers&lt;/h2&gt;
&lt;h3&gt;Windows&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Copy the *.scr file to &lt;code&gt;c:\Windows\System32&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Launch the Screensaver Windows Module (Start -&amp;gt; Run -&amp;gt; &lt;code&gt;control desk.cpl,,@screensaver&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Select the screensaver you copied&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Copy/Paste Run command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;control desk.cpl,,@screensaver
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Linux&lt;/h3&gt;
&lt;p&gt;Loading scr files on Linux requires you to use WINE. You can launch this using wine.exe, but here is my article on setting it up as a systemd service: &lt;a href=&quot;https://christitus.com/lcars-screensaver/&quot;&gt;https://christitus.com/lcars-screensaver/&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/V7aKCCfmJww&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, 12 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Screensavers might be the past, but they are still one of the coolest to do on your PC.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1594450349657821186&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;SCR File Screensavers&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;System47 SCR File - &lt;a href=&quot;https://www.mewho.com/system47/&quot;&gt;https://www.mewho.com/system47/&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/system47.webp&quot; alt=&quot;System47&quot; /&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/sysinternals/downloads/bluescreen&quot;&gt;Microsoft BSOD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.screensaversplanet.com/screensavers/?free=on&quot;&gt;Screensavers Website&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Website Screensavers&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.mewho.com/starfield47/&quot;&gt;Starfield meWho&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/starfield.webp&quot; alt=&quot;Starfield&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://gradiyent.netlify.app/&quot;&gt;Gradient Colors&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/gradient.webp&quot; alt=&quot;Gradient&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/rssavers/&quot;&gt;Really Slick Screensavers&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/hyperspace.webp&quot; alt=&quot;Hyperspace&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.ravbug.com/bsod/&quot;&gt;Fake BSODs&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/bsod.webp&quot; alt=&quot;Bsod&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cryptoprank.com/#/&quot;&gt;Crypto Prank&lt;/a&gt;
&lt;img src=&quot;/images/2022/starfield-screensaver/crypto-prank.webp&quot; alt=&quot;Crypto Prank&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://fakeupdate.net/&quot;&gt;Fake Updates&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/starfield-screensaver/xp.webp&quot; alt=&quot;Xp&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://screen.vercel.app/&quot;&gt;Fake Screens&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://updatefaker.com/&quot;&gt;Update Faker&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Load Screen Savers&lt;/h2&gt;
&lt;h3&gt;Windows&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Copy the *.scr file to &lt;code&gt;c:\Windows\System32&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Launch the Screensaver Windows Module (Start -&amp;gt; Run -&amp;gt; &lt;code&gt;control desk.cpl,,@screensaver&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Select the screensaver you copied&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Copy/Paste Run command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;control desk.cpl,,@screensaver
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Linux&lt;/h3&gt;
&lt;p&gt;Loading scr files on Linux requires you to use WINE. You can launch this using wine.exe, but here is my article on setting it up as a systemd service: &lt;a href=&quot;https://christitus.com/lcars-screensaver/&quot;&gt;https://christitus.com/lcars-screensaver/&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/V7aKCCfmJww&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 Guide</title><link>https://christitus.com/docker-guide/</link><guid isPermaLink="true">https://christitus.com/docker-guide/</guid><description>&lt;p&gt;This is a full walk-through and guide for Docker.&lt;/p&gt;

&lt;h2&gt;Install and Getting Started&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Official Docker: &lt;a href=&quot;https://docs.docker.com/get-docker/&quot;&gt;https://docs.docker.com/get-docker/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Official Portainer: &lt;a href=&quot;https://docs.portainer.io/start/install/server/docker&quot;&gt;https://docs.portainer.io/start/install/server/docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Quick Commands&lt;/h2&gt;
&lt;h3&gt;Run a new container&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;New Image - &lt;code&gt;docker run IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Name Container and Launch Image - &lt;code&gt;docker run --name CONTAINER IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Map Container Ports and Launch Image -&lt;code&gt;docker run -p HOSTPORT:CONTAINERPORT IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Map ALL Ports and Launch Image - &lt;code&gt;docker run -P IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Launch Image as Background Service - &lt;code&gt;docker run -d IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Map Local Directory and Launch - &lt;code&gt;docker run -v HOSTDIR:TARGETDIR IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Manage Containers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;List RUNNING Containers - &lt;code&gt;docker ps&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;List ALL containers - &lt;code&gt;docker ps -a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Delete container - &lt;code&gt;docker rm CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Delete a Running Container - &lt;code&gt;docker rm -f CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Stop Container - &lt;code&gt;docker stop CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start Container - &lt;code&gt;docker start CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Copy File FROM container - &lt;code&gt;docker cp CONTAINER:SOURCE TARGET&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Copy File TO container - &lt;code&gt;docker cp TARGET CONTAINER:SOURCE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start Shell inside container - &lt;code&gt;docker exec -it CONTAINER bash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rename container - &lt;code&gt;docker rename OLD NEW&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create new Image from Container - &lt;code&gt;docker commit CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Manage Images&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Download Image - &lt;code&gt;docker pull IMAGE[:TAG]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Upload Image to repository - &lt;code&gt;docker push IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Delete Image - &lt;code&gt;docker rmi IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;List Images - &lt;code&gt;docker images&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Build Image from Docker file - &lt;code&gt;docker build DIRECTORY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Tag Image IMAGE - &lt;code&gt;docker tag IMAGE NEWIMAGE:TAG&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Troubleshooting and Information&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Show logs - &lt;code&gt;docker logs CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Show stats - &lt;code&gt;docker stats&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Show processes - &lt;code&gt;docker top CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Show modified files - &lt;code&gt;docker diff CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Show mapped ports - &lt;code&gt;docker port CONTAINER&lt;/code&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/94VQvRpjfO8&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, 09 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This is a full walk-through and guide for Docker.&lt;/p&gt;

&lt;h2&gt;Install and Getting Started&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Official Docker: &lt;a href=&quot;https://docs.docker.com/get-docker/&quot;&gt;https://docs.docker.com/get-docker/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Official Portainer: &lt;a href=&quot;https://docs.portainer.io/start/install/server/docker&quot;&gt;https://docs.portainer.io/start/install/server/docker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Quick Commands&lt;/h2&gt;
&lt;h3&gt;Run a new container&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;New Image - &lt;code&gt;docker run IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Name Container and Launch Image - &lt;code&gt;docker run --name CONTAINER IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Map Container Ports and Launch Image -&lt;code&gt;docker run -p HOSTPORT:CONTAINERPORT IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Map ALL Ports and Launch Image - &lt;code&gt;docker run -P IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Launch Image as Background Service - &lt;code&gt;docker run -d IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Map Local Directory and Launch - &lt;code&gt;docker run -v HOSTDIR:TARGETDIR IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Manage Containers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;List RUNNING Containers - &lt;code&gt;docker ps&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;List ALL containers - &lt;code&gt;docker ps -a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Delete container - &lt;code&gt;docker rm CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Delete a Running Container - &lt;code&gt;docker rm -f CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Stop Container - &lt;code&gt;docker stop CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start Container - &lt;code&gt;docker start CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Copy File FROM container - &lt;code&gt;docker cp CONTAINER:SOURCE TARGET&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Copy File TO container - &lt;code&gt;docker cp TARGET CONTAINER:SOURCE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start Shell inside container - &lt;code&gt;docker exec -it CONTAINER bash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Rename container - &lt;code&gt;docker rename OLD NEW&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create new Image from Container - &lt;code&gt;docker commit CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Manage Images&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Download Image - &lt;code&gt;docker pull IMAGE[:TAG]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Upload Image to repository - &lt;code&gt;docker push IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Delete Image - &lt;code&gt;docker rmi IMAGE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;List Images - &lt;code&gt;docker images&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Build Image from Docker file - &lt;code&gt;docker build DIRECTORY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Tag Image IMAGE - &lt;code&gt;docker tag IMAGE NEWIMAGE:TAG&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Troubleshooting and Information&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Show logs - &lt;code&gt;docker logs CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Show stats - &lt;code&gt;docker stats&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Show processes - &lt;code&gt;docker top CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Show modified files - &lt;code&gt;docker diff CONTAINER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Show mapped ports - &lt;code&gt;docker port CONTAINER&lt;/code&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/94VQvRpjfO8&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>Bypass Paywalls</title><link>https://christitus.com/bypass-paywalls/</link><guid isPermaLink="true">https://christitus.com/bypass-paywalls/</guid><description>&lt;p&gt;Tired of ads, paywalls, and other garbage in your web browsing experience? These add-ons will improve your experience!&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/nerdz0ne/status/1596178362271207425&quot;&gt;View post by @nerdz0ne on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;The Extensions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;YouTube Enhancer&lt;/strong&gt; - &lt;a href=&quot;https://chrome.google.com/webstore/detail/enhancer-for-youtube/ponfpcnoihfmfllpaingbgckeeldkhle&quot;&gt;https://chrome.google.com/webstore/detail/enhancer-for-youtube/ponfpcnoihfmfllpaingbgckeeldkhle&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adds screenshots, studio, auto-settings, and much more!
&lt;img src=&quot;/images/2022/bypass-paywalls/youtube-enhancer.webp&quot; alt=&quot;Youtube Enhancer&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Self-Destructing Cookies&lt;/strong&gt; - &lt;a href=&quot;https://chrome.google.com/webstore/detail/self-destructing-cookies/igdpjhaninpfanncfifdoogibpdidddf&quot;&gt;https://chrome.google.com/webstore/detail/self-destructing-cookies/igdpjhaninpfanncfifdoogibpdidddf&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;This is a privacy add-on that deletes cookies when the browser or tab is closed. Note: This will cause some sites to log you out if a sign-in is required.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cookie Remover&lt;/strong&gt; - &lt;a href=&quot;https://chrome.google.com/webstore/detail/cookie-remover/kcgpggonjhmeaejebeoeomdlohicfhce/related&quot;&gt;https://chrome.google.com/webstore/detail/cookie-remover/kcgpggonjhmeaejebeoeomdlohicfhce/related&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;This will remove the current cookies for the site you are on by clicking the cookie icon in the top right&lt;/em&gt;
&lt;img src=&quot;/images/2022/bypass-paywalls/cookie-remover.webp&quot; alt=&quot;Cookie Remover&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bypass Paywall&lt;/strong&gt; - &lt;a href=&quot;https://github.com/iamadamdev?tab=repositories&quot;&gt;https://github.com/iamadamdev?tab=repositories&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Load with dev mode in chrome.
&lt;img src=&quot;/images/2022/bypass-paywalls/dev-mode-load.webp&quot; alt=&quot;Dev Mode Load&quot; /&gt;
&lt;img src=&quot;/images/2022/bypass-paywalls/bypass-paywalls.webp&quot; alt=&quot;Bypass Paywalls&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clickbait Removal&lt;/strong&gt; - &lt;a href=&quot;https://chrome.google.com/webstore/detail/clickbait-remover-for-you/omoinegiohhgbikclijaniebjpkeopip&quot;&gt;https://chrome.google.com/webstore/detail/clickbait-remover-for-you/omoinegiohhgbikclijaniebjpkeopip&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remove all thumbnails and put parts of video in. Also removes CAPS from the titles
&lt;img src=&quot;/images/2022/bypass-paywalls/clickbait-remover.webp&quot; alt=&quot;Clickbait Remover&quot; /&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/_fG32rdWdes&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, 05 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Tired of ads, paywalls, and other garbage in your web browsing experience? These add-ons will improve your experience!&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/nerdz0ne/status/1596178362271207425&quot;&gt;View post by @nerdz0ne on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;The Extensions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;YouTube Enhancer&lt;/strong&gt; - &lt;a href=&quot;https://chrome.google.com/webstore/detail/enhancer-for-youtube/ponfpcnoihfmfllpaingbgckeeldkhle&quot;&gt;https://chrome.google.com/webstore/detail/enhancer-for-youtube/ponfpcnoihfmfllpaingbgckeeldkhle&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adds screenshots, studio, auto-settings, and much more!
&lt;img src=&quot;/images/2022/bypass-paywalls/youtube-enhancer.webp&quot; alt=&quot;Youtube Enhancer&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Self-Destructing Cookies&lt;/strong&gt; - &lt;a href=&quot;https://chrome.google.com/webstore/detail/self-destructing-cookies/igdpjhaninpfanncfifdoogibpdidddf&quot;&gt;https://chrome.google.com/webstore/detail/self-destructing-cookies/igdpjhaninpfanncfifdoogibpdidddf&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;This is a privacy add-on that deletes cookies when the browser or tab is closed. Note: This will cause some sites to log you out if a sign-in is required.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cookie Remover&lt;/strong&gt; - &lt;a href=&quot;https://chrome.google.com/webstore/detail/cookie-remover/kcgpggonjhmeaejebeoeomdlohicfhce/related&quot;&gt;https://chrome.google.com/webstore/detail/cookie-remover/kcgpggonjhmeaejebeoeomdlohicfhce/related&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;This will remove the current cookies for the site you are on by clicking the cookie icon in the top right&lt;/em&gt;
&lt;img src=&quot;/images/2022/bypass-paywalls/cookie-remover.webp&quot; alt=&quot;Cookie Remover&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bypass Paywall&lt;/strong&gt; - &lt;a href=&quot;https://github.com/iamadamdev?tab=repositories&quot;&gt;https://github.com/iamadamdev?tab=repositories&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Load with dev mode in chrome.
&lt;img src=&quot;/images/2022/bypass-paywalls/dev-mode-load.webp&quot; alt=&quot;Dev Mode Load&quot; /&gt;
&lt;img src=&quot;/images/2022/bypass-paywalls/bypass-paywalls.webp&quot; alt=&quot;Bypass Paywalls&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clickbait Removal&lt;/strong&gt; - &lt;a href=&quot;https://chrome.google.com/webstore/detail/clickbait-remover-for-you/omoinegiohhgbikclijaniebjpkeopip&quot;&gt;https://chrome.google.com/webstore/detail/clickbait-remover-for-you/omoinegiohhgbikclijaniebjpkeopip&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remove all thumbnails and put parts of video in. Also removes CAPS from the titles
&lt;img src=&quot;/images/2022/bypass-paywalls/clickbait-remover.webp&quot; alt=&quot;Clickbait Remover&quot; /&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/_fG32rdWdes&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>Twitter Archive Offline</title><link>https://christitus.com/twitter-archive/</link><guid isPermaLink="true">https://christitus.com/twitter-archive/</guid><description>&lt;p&gt;Leaving Twitter? Why not download all your tweets from archive and store it yourself before deleting your account!&lt;/p&gt;

&lt;h2&gt;Projects&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/timhutton/twitter-archive-parser&quot;&gt;Twitter Archive Parser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nornagon/twitter-bookmark-archiver&quot;&gt;Twitter Bookmark Tool - Download All Links&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/caarlos0/twitter-cleaner&quot;&gt;Twitter Cleaner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/walaura/Twitter-photo-downloader&quot;&gt;Twitter Photo Downloader&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Process of Offline Twitter&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download Twitter Archive
&lt;img src=&quot;/images/2022/twitter-archive/twitter-archive.webp&quot; alt=&quot;Twitter Archive&quot; /&gt;
&lt;em&gt;Note: This can take up to 72 hours to produce a downloadable zip&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unzip Archive to it&apos;s OWN folder&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download the Archive parser&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://raw.githubusercontent.com/timhutton/twitter-archive-parser/main/parser.py
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;python3 parser.py&lt;/code&gt;
&lt;em&gt;I recommend selecting Yes to download all messages&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open &lt;code&gt;Your archive.html&lt;/code&gt; in your browser
&lt;img src=&quot;/images/2022/twitter-archive/offline-twitter.webp&quot; alt=&quot;Offline Twitter&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Limitations&lt;/h2&gt;
&lt;p&gt;I put the other projects above to get around the limitations of using the Archive Parser.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bookmark Tool will change the &lt;a href=&quot;http://t.co&quot;&gt;t.co&lt;/a&gt; links to their proper links so it doesn&apos;t use Twitter servers.&lt;/li&gt;
&lt;li&gt;Cleaner will cleanup the archive&lt;/li&gt;
&lt;li&gt;Photo Downloader will download the full photos in your tweets. By default it downloads the thumbnail and references twitter for the full image.&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/vwxxNCQpcTA&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, 02 Dec 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Leaving Twitter? Why not download all your tweets from archive and store it yourself before deleting your account!&lt;/p&gt;

&lt;h2&gt;Projects&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/timhutton/twitter-archive-parser&quot;&gt;Twitter Archive Parser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/nornagon/twitter-bookmark-archiver&quot;&gt;Twitter Bookmark Tool - Download All Links&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/caarlos0/twitter-cleaner&quot;&gt;Twitter Cleaner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/walaura/Twitter-photo-downloader&quot;&gt;Twitter Photo Downloader&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Process of Offline Twitter&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download Twitter Archive
&lt;img src=&quot;/images/2022/twitter-archive/twitter-archive.webp&quot; alt=&quot;Twitter Archive&quot; /&gt;
&lt;em&gt;Note: This can take up to 72 hours to produce a downloadable zip&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unzip Archive to it&apos;s OWN folder&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download the Archive parser&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://raw.githubusercontent.com/timhutton/twitter-archive-parser/main/parser.py
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Run &lt;code&gt;python3 parser.py&lt;/code&gt;
&lt;em&gt;I recommend selecting Yes to download all messages&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open &lt;code&gt;Your archive.html&lt;/code&gt; in your browser
&lt;img src=&quot;/images/2022/twitter-archive/offline-twitter.webp&quot; alt=&quot;Offline Twitter&quot; /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Limitations&lt;/h2&gt;
&lt;p&gt;I put the other projects above to get around the limitations of using the Archive Parser.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bookmark Tool will change the &lt;a href=&quot;http://t.co&quot;&gt;t.co&lt;/a&gt; links to their proper links so it doesn&apos;t use Twitter servers.&lt;/li&gt;
&lt;li&gt;Cleaner will cleanup the archive&lt;/li&gt;
&lt;li&gt;Photo Downloader will download the full photos in your tweets. By default it downloads the thumbnail and references twitter for the full image.&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/vwxxNCQpcTA&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>Switching to Ubuntu</title><link>https://christitus.com/switching-to-ubuntu/</link><guid isPermaLink="true">https://christitus.com/switching-to-ubuntu/</guid><description>&lt;p&gt;Yes, the title is correct, I&apos;m switching to Ubuntu. Don&apos;t you hate snaps and GNOME? Yes, but I always say change your Linux install to what you want. Don&apos;t like something? Change IT!&lt;/p&gt;

&lt;p&gt;But Why? ... Ubuntu does something right!?&lt;/p&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1591540430226628608&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Starting with Server&lt;/h2&gt;
&lt;p&gt;I start with Ubuntu server download &lt;a href=&quot;https://ubuntu.com/download/server&quot;&gt;https://ubuntu.com/download/server&lt;/a&gt; and then strip out SNAPD before adding any desktop environment. This makes it so I can avoid all the things I don&apos;t like about Ubuntu, while getting the benefits of their Kernel optimizations and packaging.&lt;/p&gt;
&lt;p&gt;Will Ubuntu always be better than Debian for kernel and packaging? No, in fact, Debian is adding non-free firmware packages into their base installer and will no longer be second class citizen on new installs and you won&apos;t need to go hunting for a non-free ISO any longer.&lt;/p&gt;
&lt;h3&gt;Removing Snapcraft or Snaps&lt;/h3&gt;
&lt;p&gt;Run the following commands to remove snapd and also hold the package to prevent it from reinstalling.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt purge snapd
sudo apt-mark hold snapd
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Avoiding certain packages&lt;/h3&gt;
&lt;p&gt;The downside to the following approach is Ubuntu has packages, such as: Firefox and others that will try to install the snap version.&lt;/p&gt;
&lt;p&gt;I highly recommend installing NIX OS env to get around this limitation, as this is what I do with every install on every distribution anyways.&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;For a reference guide check out my Nix Package Manager article: &lt;a href=&quot;https://christitus.com/nix-package-manager/&quot;&gt;https://christitus.com/nix-package-manager/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Installing Your Desktop&lt;/h2&gt;
&lt;p&gt;The easiest method for installing your desktop is using &lt;code&gt;tasksel&lt;/code&gt; from the terminal.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install tasksel -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Run it with &lt;code&gt;sudo tasksel&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/switching-to-ubuntu/tasksel.webp&quot; alt=&quot;Tasksel&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Select the Debian Desktop Environment at top and the desktop environment that you want to use.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: While this method is easy, it will install some bloat that you may wish to remove.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Advanced Option&lt;/h3&gt;
&lt;p&gt;My old &lt;code&gt;ubuntu-titus&lt;/code&gt; window manager setup has been retired. My maintained
desktop configuration now lives in
&lt;a href=&quot;https://github.com/ChrisTitusTech/dwm-titus&quot;&gt;https://github.com/ChrisTitusTech/dwm-titus&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Final Result:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/switching-to-ubuntu/ubuntu-titus.webp&quot; alt=&quot;Ubuntu Titus&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/UvSLMzkog1g&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, 28 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Yes, the title is correct, I&apos;m switching to Ubuntu. Don&apos;t you hate snaps and GNOME? Yes, but I always say change your Linux install to what you want. Don&apos;t like something? Change IT!&lt;/p&gt;

&lt;p&gt;But Why? ... Ubuntu does something right!?&lt;/p&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1591540430226628608&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Starting with Server&lt;/h2&gt;
&lt;p&gt;I start with Ubuntu server download &lt;a href=&quot;https://ubuntu.com/download/server&quot;&gt;https://ubuntu.com/download/server&lt;/a&gt; and then strip out SNAPD before adding any desktop environment. This makes it so I can avoid all the things I don&apos;t like about Ubuntu, while getting the benefits of their Kernel optimizations and packaging.&lt;/p&gt;
&lt;p&gt;Will Ubuntu always be better than Debian for kernel and packaging? No, in fact, Debian is adding non-free firmware packages into their base installer and will no longer be second class citizen on new installs and you won&apos;t need to go hunting for a non-free ISO any longer.&lt;/p&gt;
&lt;h3&gt;Removing Snapcraft or Snaps&lt;/h3&gt;
&lt;p&gt;Run the following commands to remove snapd and also hold the package to prevent it from reinstalling.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt purge snapd
sudo apt-mark hold snapd
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Avoiding certain packages&lt;/h3&gt;
&lt;p&gt;The downside to the following approach is Ubuntu has packages, such as: Firefox and others that will try to install the snap version.&lt;/p&gt;
&lt;p&gt;I highly recommend installing NIX OS env to get around this limitation, as this is what I do with every install on every distribution anyways.&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;For a reference guide check out my Nix Package Manager article: &lt;a href=&quot;https://christitus.com/nix-package-manager/&quot;&gt;https://christitus.com/nix-package-manager/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Installing Your Desktop&lt;/h2&gt;
&lt;p&gt;The easiest method for installing your desktop is using &lt;code&gt;tasksel&lt;/code&gt; from the terminal.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install tasksel -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Run it with &lt;code&gt;sudo tasksel&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/switching-to-ubuntu/tasksel.webp&quot; alt=&quot;Tasksel&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Select the Debian Desktop Environment at top and the desktop environment that you want to use.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: While this method is easy, it will install some bloat that you may wish to remove.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Advanced Option&lt;/h3&gt;
&lt;p&gt;My old &lt;code&gt;ubuntu-titus&lt;/code&gt; window manager setup has been retired. My maintained
desktop configuration now lives in
&lt;a href=&quot;https://github.com/ChrisTitusTech/dwm-titus&quot;&gt;https://github.com/ChrisTitusTech/dwm-titus&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Final Result:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/switching-to-ubuntu/ubuntu-titus.webp&quot; alt=&quot;Ubuntu Titus&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/UvSLMzkog1g&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 Browser Extensions</title><link>https://christitus.com/best-browser-extensions/</link><guid isPermaLink="true">https://christitus.com/best-browser-extensions/</guid><description>&lt;p&gt;These extensions make life easier when using a browser.&lt;/p&gt;

&lt;h2&gt;The List&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/authenticator/bhghoamapcdpbohphigoooaddinpkbai&quot;&gt;Authenticator&lt;/a&gt; - 2 Factor for websites&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/checker-plus-for-google-c/hkhggnncdpfibdhinjiegagmopldibha&quot;&gt;Checker Plus&lt;/a&gt; - Google Calendar with 1-click&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/clickclean/ghgabhipcejejjmhhchfonmamedcbeod&quot;&gt;Click and Clean&lt;/a&gt; - History and Cache cleaning&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/get-rss-feed-url/kfghpdldaipanmkhfpdcjglncmilendn&quot;&gt;Get RSS Feed URL&lt;/a&gt; - Easily grab the RSS feed for a website&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/gofullpage-full-page-scre/fdpohaocaechififmbbbbbknoalclacl&quot;&gt;GoFullPage&lt;/a&gt; - Full Page Screen Capture&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/midnight-lizard/pbnndmlekkboofhnbonilimejonapojg&quot;&gt;Midnight Lizard&lt;/a&gt; - Dark mode everywhere&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/momentum/laookkfknpbbblfpciffpaejjkokdgca&quot;&gt;Momentum&lt;/a&gt; - Focused Start Screen (Great for Brave users)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/notifier-for-github/lmjdlojahmbbcodnpecnjnmlddbkjhnn&quot;&gt;Notifier for GitHub&lt;/a&gt; - Notification Panel for GitHub&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anrdoezrs.net/click-9109049-14329390&quot;&gt;Roboform Password Management&lt;/a&gt; (Bitwarden is a good alternative)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/web-highlights-pdf-web-hi/hldjnlbobkdkghfidgoecgmklcemanhm&quot;&gt;Web Highlights&lt;/a&gt; - Highlight parts of a webpage&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Security&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/auth.webp&quot; alt=&quot;Auth&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Authenticator&lt;/strong&gt; is great for simple two factor, but I wouldn&apos;t use this for a bank account. These 2FA codes are synced to the cloud for convenience.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/clickandclean.webp&quot; alt=&quot;Clickandclean&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Click and Clean&lt;/strong&gt; will clean our history, cache, and much more. The built in browser cleaning and history management isn&apos;t good. This makes it a complete solution for security, privacy, and maintenance.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/roboform.webp&quot; alt=&quot;Roboform&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Password Manager&lt;/strong&gt; is something everyone should use. I&apos;ve used &lt;a href=&quot;https://www.anrdoezrs.net/click-9109049-14329390&quot;&gt;RoboForm&lt;/a&gt; for over 10 years and my personal recommendation for automation. Bitwarden is a bit newer and some features like FIDO keys which make also makes it a strong choice. Both password manager offer easy export and import of ALL passwords, which is a vital feature when you use these services to avoid getting &quot;locked in&quot;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: Roboform is currently running a 50% off sale via the link above for Cyber Monday/Black Friday and generally provide a 30% off link after.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The one thing I caution you against is using All-In-One password managers, like McAfee, Nord, and others. The bundles you get will lock you in to their password managers that can hold you hostage if they have breaches and you want to move on.&lt;/p&gt;
&lt;h3&gt;Convenience&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/checker-plus.webp&quot; alt=&quot;Checker Plus&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Checker Plus&lt;/strong&gt; perfect heads up calendar display with easy add for incoming events.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/rss-feeds.webp&quot; alt=&quot;Rss Feeds&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get RSS Feed URL&lt;/strong&gt; will get those hidden RSS feeds for any website.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/fullscreen.webp&quot; alt=&quot;Fullscreen&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GoFullPage&lt;/strong&gt; captures the ENTIRE webpage and can output it to a PDF or PNG for later use.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/midnight-lizard.webp&quot; alt=&quot;Midnight Lizard&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Midnight Lizard&lt;/strong&gt; Dark mode and other color customizations.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/momentum.webp&quot; alt=&quot;Momentum&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Momentum&lt;/strong&gt; is an essential extension for any brave browser user. Brave has one of the worst start screens with crypto ads and other BS that no one likes. This extension fixes that.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/github-notifications.webp&quot; alt=&quot;Github Notifications&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notifier for GitHub&lt;/strong&gt; shows GitHub notifications.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/highlights.webp&quot; alt=&quot;Highlights&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web Highlights&lt;/strong&gt; is a great way to highlight a page as you read, which helps your mind retain what you are reading, but also saves it into the logged in account which can be referred to 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/j-eK_T-FWIo&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, 23 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;These extensions make life easier when using a browser.&lt;/p&gt;

&lt;h2&gt;The List&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/authenticator/bhghoamapcdpbohphigoooaddinpkbai&quot;&gt;Authenticator&lt;/a&gt; - 2 Factor for websites&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/checker-plus-for-google-c/hkhggnncdpfibdhinjiegagmopldibha&quot;&gt;Checker Plus&lt;/a&gt; - Google Calendar with 1-click&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/clickclean/ghgabhipcejejjmhhchfonmamedcbeod&quot;&gt;Click and Clean&lt;/a&gt; - History and Cache cleaning&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/get-rss-feed-url/kfghpdldaipanmkhfpdcjglncmilendn&quot;&gt;Get RSS Feed URL&lt;/a&gt; - Easily grab the RSS feed for a website&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/gofullpage-full-page-scre/fdpohaocaechififmbbbbbknoalclacl&quot;&gt;GoFullPage&lt;/a&gt; - Full Page Screen Capture&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/midnight-lizard/pbnndmlekkboofhnbonilimejonapojg&quot;&gt;Midnight Lizard&lt;/a&gt; - Dark mode everywhere&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/momentum/laookkfknpbbblfpciffpaejjkokdgca&quot;&gt;Momentum&lt;/a&gt; - Focused Start Screen (Great for Brave users)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/notifier-for-github/lmjdlojahmbbcodnpecnjnmlddbkjhnn&quot;&gt;Notifier for GitHub&lt;/a&gt; - Notification Panel for GitHub&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.anrdoezrs.net/click-9109049-14329390&quot;&gt;Roboform Password Management&lt;/a&gt; (Bitwarden is a good alternative)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/web-highlights-pdf-web-hi/hldjnlbobkdkghfidgoecgmklcemanhm&quot;&gt;Web Highlights&lt;/a&gt; - Highlight parts of a webpage&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Security&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/auth.webp&quot; alt=&quot;Auth&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Authenticator&lt;/strong&gt; is great for simple two factor, but I wouldn&apos;t use this for a bank account. These 2FA codes are synced to the cloud for convenience.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/clickandclean.webp&quot; alt=&quot;Clickandclean&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Click and Clean&lt;/strong&gt; will clean our history, cache, and much more. The built in browser cleaning and history management isn&apos;t good. This makes it a complete solution for security, privacy, and maintenance.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/roboform.webp&quot; alt=&quot;Roboform&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Password Manager&lt;/strong&gt; is something everyone should use. I&apos;ve used &lt;a href=&quot;https://www.anrdoezrs.net/click-9109049-14329390&quot;&gt;RoboForm&lt;/a&gt; for over 10 years and my personal recommendation for automation. Bitwarden is a bit newer and some features like FIDO keys which make also makes it a strong choice. Both password manager offer easy export and import of ALL passwords, which is a vital feature when you use these services to avoid getting &quot;locked in&quot;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: Roboform is currently running a 50% off sale via the link above for Cyber Monday/Black Friday and generally provide a 30% off link after.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The one thing I caution you against is using All-In-One password managers, like McAfee, Nord, and others. The bundles you get will lock you in to their password managers that can hold you hostage if they have breaches and you want to move on.&lt;/p&gt;
&lt;h3&gt;Convenience&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/checker-plus.webp&quot; alt=&quot;Checker Plus&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Checker Plus&lt;/strong&gt; perfect heads up calendar display with easy add for incoming events.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/rss-feeds.webp&quot; alt=&quot;Rss Feeds&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Get RSS Feed URL&lt;/strong&gt; will get those hidden RSS feeds for any website.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/fullscreen.webp&quot; alt=&quot;Fullscreen&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GoFullPage&lt;/strong&gt; captures the ENTIRE webpage and can output it to a PDF or PNG for later use.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/midnight-lizard.webp&quot; alt=&quot;Midnight Lizard&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Midnight Lizard&lt;/strong&gt; Dark mode and other color customizations.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/momentum.webp&quot; alt=&quot;Momentum&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Momentum&lt;/strong&gt; is an essential extension for any brave browser user. Brave has one of the worst start screens with crypto ads and other BS that no one likes. This extension fixes that.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/github-notifications.webp&quot; alt=&quot;Github Notifications&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notifier for GitHub&lt;/strong&gt; shows GitHub notifications.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/best-browser-extensions/highlights.webp&quot; alt=&quot;Highlights&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Web Highlights&lt;/strong&gt; is a great way to highlight a page as you read, which helps your mind retain what you are reading, but also saves it into the logged in account which can be referred to 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/j-eK_T-FWIo&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 We Don&apos;t Browse the Internet Anymore</title><link>https://christitus.com/why-we-dont-browse-the-internet-anymore/</link><guid isPermaLink="true">https://christitus.com/why-we-dont-browse-the-internet-anymore/</guid><description>&lt;p&gt;The problem with the modern internet is ads, sponsored posts, and pay walls. Enter RSS feeds as a solution.&lt;/p&gt;

&lt;p&gt;Subscribe to the sites and information you want to see and not have an algorithm decide what influences you. This requires &quot;fixing&quot; RSS and downloading articles, but the payout is amazing. How many people use RSS? Here is poll I ran on Twitter.&lt;/p&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1589727064957284352&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;How we used to browse the Internet&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/why-we-dont-browse-the-internet-anymore/altavista.webp&quot; alt=&quot;Altavista&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The era of altavista, dogpile, askjeeves, yahoo, excite, lycos, and others was an era of innovation and competition. There was a heated rivalry between Internet Exploader and Netscape, which Microsoft inevitably won with dirty business practices. That era was a time of discovery and businesses were figuring out how to make money on the internet.&lt;/p&gt;
&lt;p&gt;Information was scattered everywhere and the web was decentralized among hundreds of companies. When we &quot;logged on&quot; you made decisions on what to do. Sometimes you wanted to play a game, or stumble upon a new website, or browse a news group. Almost nothing curated and uniform. This is often referred to as Web 1.0.&lt;/p&gt;
&lt;h2&gt;How we use the Internet today&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/why-we-dont-browse-the-internet-anymore/google.webp&quot; alt=&quot;Google&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We google anything we want, use our chromium browsers, and social media for everything else. Between Google, Facebook (I&apos;m not calling it Meta), and Amazon we have everything. Facebook is dying off and for old people raging about some political garbage, Amazon we order anything want to appear on our doorstep, and Google is what powers almost every search we do.&lt;/p&gt;
&lt;p&gt;When we find the site we are looking for, it ends up with tons of ads or paywalled. Even worse, some reputable sites sell &quot;sponsored posts&quot; where the advertising gets posted directly in the feed. Imagine watching a television show and then in the third episode its nothing but a giant Subway ad. This is our modern internet.&lt;/p&gt;
&lt;h2&gt;How to fix it with RSS&lt;/h2&gt;
&lt;p&gt;Really Simple Syndication or RSS for short, is used to get updates from websites whenever something is posted. You have a listing of the entire website and you can pick the article you want to read. Even better you can subscribe to YouTube Channels and other social feeds to RSS as well.&lt;/p&gt;
&lt;p&gt;The problem? Ads, Brief Summaries, and redirects. We fix this by using a feed aggregator and never leave our RSS reader.&lt;/p&gt;
&lt;p&gt;The other problem with RSS Readers online are expensive using feedly($8), inoreader($10), and newsblur($3) per month. This used all be free with Google Reader, but in typical Google fashion they killed Reader.&lt;/p&gt;
&lt;h3&gt;Feed Aggregation&lt;/h3&gt;
&lt;p&gt;I use docker self-hosted aggregator &lt;a href=&quot;https://github.com/heussd/fivefilters-full-text-rss-docker&quot;&gt;https://github.com/heussd/fivefilters-full-text-rss-docker&lt;/a&gt; or if you want to pay money you can use &lt;a href=&quot;http://ftr.fivefilters.org/&quot;&gt;five filters aggregator&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here is my docker command to install and configure it on my docker server using port 50000&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -d \
--name=full-test-rss \
-p 50000:80 \
--restart always \
heussd/fivefilters-full-text-rss:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Feed Reader&lt;/h3&gt;
&lt;p&gt;There are a couple different ways to pull in these RSS feeds. For browsers there is Vivaldi, external programs like Obsidian, and for self-hosted I recommend &lt;a href=&quot;https://freshrss.org/&quot;&gt;FreshRSS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I use my docker server again to host this on port 49999&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -d \
  --name=freshrss \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/London \
  -p 49999:80 \
  -v /path/to/data:/config \
  --restart unless-stopped \
  lscr.io/linuxserver/freshrss:latest
&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/nxV0CPNeFxY&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, 21 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The problem with the modern internet is ads, sponsored posts, and pay walls. Enter RSS feeds as a solution.&lt;/p&gt;

&lt;p&gt;Subscribe to the sites and information you want to see and not have an algorithm decide what influences you. This requires &quot;fixing&quot; RSS and downloading articles, but the payout is amazing. How many people use RSS? Here is poll I ran on Twitter.&lt;/p&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1589727064957284352&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;How we used to browse the Internet&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/why-we-dont-browse-the-internet-anymore/altavista.webp&quot; alt=&quot;Altavista&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The era of altavista, dogpile, askjeeves, yahoo, excite, lycos, and others was an era of innovation and competition. There was a heated rivalry between Internet Exploader and Netscape, which Microsoft inevitably won with dirty business practices. That era was a time of discovery and businesses were figuring out how to make money on the internet.&lt;/p&gt;
&lt;p&gt;Information was scattered everywhere and the web was decentralized among hundreds of companies. When we &quot;logged on&quot; you made decisions on what to do. Sometimes you wanted to play a game, or stumble upon a new website, or browse a news group. Almost nothing curated and uniform. This is often referred to as Web 1.0.&lt;/p&gt;
&lt;h2&gt;How we use the Internet today&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/why-we-dont-browse-the-internet-anymore/google.webp&quot; alt=&quot;Google&quot; /&gt;&lt;/p&gt;
&lt;p&gt;We google anything we want, use our chromium browsers, and social media for everything else. Between Google, Facebook (I&apos;m not calling it Meta), and Amazon we have everything. Facebook is dying off and for old people raging about some political garbage, Amazon we order anything want to appear on our doorstep, and Google is what powers almost every search we do.&lt;/p&gt;
&lt;p&gt;When we find the site we are looking for, it ends up with tons of ads or paywalled. Even worse, some reputable sites sell &quot;sponsored posts&quot; where the advertising gets posted directly in the feed. Imagine watching a television show and then in the third episode its nothing but a giant Subway ad. This is our modern internet.&lt;/p&gt;
&lt;h2&gt;How to fix it with RSS&lt;/h2&gt;
&lt;p&gt;Really Simple Syndication or RSS for short, is used to get updates from websites whenever something is posted. You have a listing of the entire website and you can pick the article you want to read. Even better you can subscribe to YouTube Channels and other social feeds to RSS as well.&lt;/p&gt;
&lt;p&gt;The problem? Ads, Brief Summaries, and redirects. We fix this by using a feed aggregator and never leave our RSS reader.&lt;/p&gt;
&lt;p&gt;The other problem with RSS Readers online are expensive using feedly($8), inoreader($10), and newsblur($3) per month. This used all be free with Google Reader, but in typical Google fashion they killed Reader.&lt;/p&gt;
&lt;h3&gt;Feed Aggregation&lt;/h3&gt;
&lt;p&gt;I use docker self-hosted aggregator &lt;a href=&quot;https://github.com/heussd/fivefilters-full-text-rss-docker&quot;&gt;https://github.com/heussd/fivefilters-full-text-rss-docker&lt;/a&gt; or if you want to pay money you can use &lt;a href=&quot;http://ftr.fivefilters.org/&quot;&gt;five filters aggregator&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here is my docker command to install and configure it on my docker server using port 50000&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -d \
--name=full-test-rss \
-p 50000:80 \
--restart always \
heussd/fivefilters-full-text-rss:latest
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Feed Reader&lt;/h3&gt;
&lt;p&gt;There are a couple different ways to pull in these RSS feeds. For browsers there is Vivaldi, external programs like Obsidian, and for self-hosted I recommend &lt;a href=&quot;https://freshrss.org/&quot;&gt;FreshRSS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I use my docker server again to host this on port 49999&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -d \
  --name=freshrss \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/London \
  -p 49999:80 \
  -v /path/to/data:/config \
  --restart unless-stopped \
  lscr.io/linuxserver/freshrss:latest
&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/nxV0CPNeFxY&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>5 Essential Terminal Utilities</title><link>https://christitus.com/5-terminal-commands/</link><guid isPermaLink="true">https://christitus.com/5-terminal-commands/</guid><description>
&lt;h2&gt;TLDR&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/tldr.webp&quot; alt=&quot;Tldr&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Too long didn&apos;t read? The perfect solution for long man pages that we just want some quick examples and basic syntax for a command. TLDR is a vital tool to save you time when learning the terminal.&lt;/p&gt;
&lt;h2&gt;CMatrix&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/cmatrix.webp&quot; alt=&quot;Cmatrix&quot; /&gt;&lt;/p&gt;
&lt;p&gt;How can you use Linux without using CMatrix... It&apos;s hard to be cool without it.&lt;/p&gt;
&lt;h2&gt;Trash-CLI&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/trash-cli.webp&quot; alt=&quot;Trash Cli&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is a life saver after you delete a directory or files in terminal and need to get them back. I highly recommend making the following alias in your &lt;code&gt;~/.bashrc&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias rm=&apos;trash -v&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Delete a file and send it to the trash:
&lt;code&gt;trash path/to/file&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;List all files in the trash:
&lt;code&gt;trash-list&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Interactively restore a file from the trash:
&lt;code&gt;trash-restore&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Empty the trash:
&lt;code&gt;trash-empty&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Permanently delete all files in the trash which are older than 10 days:
&lt;code&gt;trash-empty 10&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove all files in the trash, which match a specific blob pattern:
&lt;code&gt;trash-rm &quot;*.o&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove all files with a specific original location:
&lt;code&gt;trash-rm /path/to/file_or_directory&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Autojump&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/autojump.webp&quot; alt=&quot;Autojump&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is my most used terminal utility that saves me the most amount of time. The catch to this program is you must have navigated to the directory at least once in terminal first.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jump to a directory that contains the given pattern:
&lt;code&gt;j pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jump to a sub-directory (child) of the current directory that contains the given pattern:
&lt;code&gt;jc pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open a directory that contains the given pattern in the operating system file manager:
&lt;code&gt;jo pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove non-existing directories from the autojump database:
&lt;code&gt;j --purge&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Show the entries in the autojump database:
&lt;code&gt;j -s&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Progress&lt;/h2&gt;
&lt;p&gt;Tired of wondering how much longer the cp, mv, dd, tar, cat, and other Linux coreutil functions take? Progress will tell you!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Show the progress of running coreutils:
&lt;code&gt;progress&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Launch and monitor a single long-running command:
&lt;code&gt;command &amp;amp; progress --monitor --pid $!&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Include an estimate of time remaining for completion:
&lt;code&gt;progress --wait --command rsync&lt;/code&gt;&lt;/p&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/HKB8RUWZIQA&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, 18 Nov 2022 00:00:00 GMT</pubDate><content:encoded>
&lt;h2&gt;TLDR&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/tldr.webp&quot; alt=&quot;Tldr&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Too long didn&apos;t read? The perfect solution for long man pages that we just want some quick examples and basic syntax for a command. TLDR is a vital tool to save you time when learning the terminal.&lt;/p&gt;
&lt;h2&gt;CMatrix&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/cmatrix.webp&quot; alt=&quot;Cmatrix&quot; /&gt;&lt;/p&gt;
&lt;p&gt;How can you use Linux without using CMatrix... It&apos;s hard to be cool without it.&lt;/p&gt;
&lt;h2&gt;Trash-CLI&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/trash-cli.webp&quot; alt=&quot;Trash Cli&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is a life saver after you delete a directory or files in terminal and need to get them back. I highly recommend making the following alias in your &lt;code&gt;~/.bashrc&lt;/code&gt; file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;alias rm=&apos;trash -v&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Delete a file and send it to the trash:
&lt;code&gt;trash path/to/file&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;List all files in the trash:
&lt;code&gt;trash-list&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Interactively restore a file from the trash:
&lt;code&gt;trash-restore&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Empty the trash:
&lt;code&gt;trash-empty&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Permanently delete all files in the trash which are older than 10 days:
&lt;code&gt;trash-empty 10&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove all files in the trash, which match a specific blob pattern:
&lt;code&gt;trash-rm &quot;*.o&quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove all files with a specific original location:
&lt;code&gt;trash-rm /path/to/file_or_directory&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Autojump&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/5-terminal-commands/autojump.webp&quot; alt=&quot;Autojump&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is my most used terminal utility that saves me the most amount of time. The catch to this program is you must have navigated to the directory at least once in terminal first.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jump to a directory that contains the given pattern:
&lt;code&gt;j pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jump to a sub-directory (child) of the current directory that contains the given pattern:
&lt;code&gt;jc pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open a directory that contains the given pattern in the operating system file manager:
&lt;code&gt;jo pattern&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Remove non-existing directories from the autojump database:
&lt;code&gt;j --purge&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Show the entries in the autojump database:
&lt;code&gt;j -s&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Progress&lt;/h2&gt;
&lt;p&gt;Tired of wondering how much longer the cp, mv, dd, tar, cat, and other Linux coreutil functions take? Progress will tell you!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Show the progress of running coreutils:
&lt;code&gt;progress&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Launch and monitor a single long-running command:
&lt;code&gt;command &amp;amp; progress --monitor --pid $!&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Include an estimate of time remaining for completion:
&lt;code&gt;progress --wait --command rsync&lt;/code&gt;&lt;/p&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/HKB8RUWZIQA&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>Ubuntus ARM Is Good</title><link>https://christitus.com/ubuntus-arm-is-good/</link><guid isPermaLink="true">https://christitus.com/ubuntus-arm-is-good/</guid><description>&lt;p&gt;ARM Computing has gone mainstream with Raspberry Pi and Mac M1/M2 chips. Harnessing this in a Linux desktop can be interesting. This is where I started using Ubuntu again.&lt;/p&gt;

&lt;p&gt;Ubuntu&apos;s ARM spin is fantastic at a server level. The main issue I&apos;ve had with Ubuntu desktops in the past are it reliance on GNOME&apos;s desktop environment and SNAP packages. Both these issues get alleviated when we get in to the server realm. My new PC that I&apos;m building on arm using the OrangePi 800 hardware is fantastic with the right software installed on it. That is where Ubuntu ARM enters...&lt;/p&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1587141986942861315&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;The Setup&lt;/h2&gt;
&lt;p&gt;Download the latest ARM package from &lt;a href=&quot;https://ubuntu.com/download/server/arm&quot;&gt;https://ubuntu.com/download/server/arm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After the setup process I did the following tweaks to fix Ubuntu&apos;s base to my liking:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disable Snaps&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;snap list
sudo snap remove programs
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Purge snap daemon and prevent reinstall&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;sudo apt purge snapd
sudo apt-mark hold snapd
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Verify the Uninstall&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;apt list --install | grep snap
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Desktop Environment&lt;/h3&gt;
&lt;p&gt;The easiest way to set up the system for desktop usage is to use &lt;code&gt;tasksel&lt;/code&gt; and then pick the desktop environment that you like the best.&lt;/p&gt;
&lt;p&gt;My recommendations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows Users - KDE&lt;/li&gt;
&lt;li&gt;MacOS users - GNOME&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This will give you the base install for your ARM system.&lt;/p&gt;
&lt;h2&gt;Why Ubuntu?&lt;/h2&gt;
&lt;p&gt;I haven&apos;t talked well about Ubuntu in the past because of their position on Snaps and switching to GNOME as their desktop environment. The reason I am choosing Ubuntu ARM is because it fit best for my use case. I needed up-to-date packages and reliability in the ARM space. I&apos;d use Debian testing or sid for this task, but their ARM spins were not reliable on these branches from my testing. There were display issues and compatibility from missing firmware and non-free. To fix this, I download the non-free firmware ISO, but for ARM these are hard to find. Even after upgrading Debian stable to testing or sid, the ARM servers had experimental packages that didn&apos;t work with the hardware I was using. I had none of these issues from Ubuntu&apos;s ARM distribution.&lt;/p&gt;
&lt;p&gt;For the bleeding edge, there is no better distribution than Arch and there ARM branch is one of the best out there. Arch Linux is unstable at it&apos;s core and not suitable for a device that I might only use once a week or month. This could be remedied by making it immutable, but having to mess with images is not fun or practical as a single maintainer.&lt;/p&gt;
&lt;p&gt;That left me with raspbian or armbian, but both these distributions are downstream from Ubuntu and Debian. This means the packages are stable, but old and I need new packages if I want to use it as a desktop replacement. That left me with one logical choice... Ubuntu.&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/mxRVwF2YG3Q&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, 11 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;ARM Computing has gone mainstream with Raspberry Pi and Mac M1/M2 chips. Harnessing this in a Linux desktop can be interesting. This is where I started using Ubuntu again.&lt;/p&gt;

&lt;p&gt;Ubuntu&apos;s ARM spin is fantastic at a server level. The main issue I&apos;ve had with Ubuntu desktops in the past are it reliance on GNOME&apos;s desktop environment and SNAP packages. Both these issues get alleviated when we get in to the server realm. My new PC that I&apos;m building on arm using the OrangePi 800 hardware is fantastic with the right software installed on it. That is where Ubuntu ARM enters...&lt;/p&gt;
&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1587141986942861315&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;The Setup&lt;/h2&gt;
&lt;p&gt;Download the latest ARM package from &lt;a href=&quot;https://ubuntu.com/download/server/arm&quot;&gt;https://ubuntu.com/download/server/arm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After the setup process I did the following tweaks to fix Ubuntu&apos;s base to my liking:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disable Snaps&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;snap list
sudo snap remove programs
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Purge snap daemon and prevent reinstall&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;sudo apt purge snapd
sudo apt-mark hold snapd
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Verify the Uninstall&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code&gt;apt list --install | grep snap
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Desktop Environment&lt;/h3&gt;
&lt;p&gt;The easiest way to set up the system for desktop usage is to use &lt;code&gt;tasksel&lt;/code&gt; and then pick the desktop environment that you like the best.&lt;/p&gt;
&lt;p&gt;My recommendations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows Users - KDE&lt;/li&gt;
&lt;li&gt;MacOS users - GNOME&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This will give you the base install for your ARM system.&lt;/p&gt;
&lt;h2&gt;Why Ubuntu?&lt;/h2&gt;
&lt;p&gt;I haven&apos;t talked well about Ubuntu in the past because of their position on Snaps and switching to GNOME as their desktop environment. The reason I am choosing Ubuntu ARM is because it fit best for my use case. I needed up-to-date packages and reliability in the ARM space. I&apos;d use Debian testing or sid for this task, but their ARM spins were not reliable on these branches from my testing. There were display issues and compatibility from missing firmware and non-free. To fix this, I download the non-free firmware ISO, but for ARM these are hard to find. Even after upgrading Debian stable to testing or sid, the ARM servers had experimental packages that didn&apos;t work with the hardware I was using. I had none of these issues from Ubuntu&apos;s ARM distribution.&lt;/p&gt;
&lt;p&gt;For the bleeding edge, there is no better distribution than Arch and there ARM branch is one of the best out there. Arch Linux is unstable at it&apos;s core and not suitable for a device that I might only use once a week or month. This could be remedied by making it immutable, but having to mess with images is not fun or practical as a single maintainer.&lt;/p&gt;
&lt;p&gt;That left me with raspbian or armbian, but both these distributions are downstream from Ubuntu and Debian. This means the packages are stable, but old and I need new packages if I want to use it as a desktop replacement. That left me with one logical choice... Ubuntu.&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/mxRVwF2YG3Q&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>Urbackup</title><link>https://christitus.com/urbackup/</link><guid isPermaLink="true">https://christitus.com/urbackup/</guid><description>&lt;p&gt;Want a Universal Backup that works on EVERY operating system and is free + open source? Urbackup is the software you are looking for!&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1584567052404412416&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Why UrBackup&lt;/h2&gt;
&lt;p&gt;This program is absolutely amazing and free! All it&apos;s source code is on the internet which made it able to adapt to ALL operating systems. Windows, Mac, Linux... hell it even has ARM support!&lt;/p&gt;
&lt;h2&gt;Universal Backup Servers&lt;/h2&gt;
&lt;p&gt;There is a ton of different supported servers and even some that are unsupported that still work. Here is the official download page: &lt;a href=&quot;http://www.urbackup.org/download.html&quot;&gt;http://www.urbackup.org/download.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One notable non-official project is for Synology NAS devices. I use a 64-bit Synology on DSM 7+, so pay attention to your current version if you want to use the project below.&lt;/p&gt;
&lt;p&gt;Synology Project: &lt;a href=&quot;https://github.com/josef109/spksrc&quot;&gt;https://github.com/josef109/spksrc&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Server Dashboard&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/urbackup/dash.webp&quot; alt=&quot;Dash&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Automated Terminal Install and Linux Setup&lt;/h3&gt;
&lt;p&gt;Linux installs are a complete DREAM! Just paste the command listed under terminal when you use &quot;Add New Client&quot; Button. Here is an example install:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/urbackup/linux-term.webp&quot; alt=&quot;Linux Term&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Enable Restore from Web&lt;/h3&gt;
&lt;p&gt;You need to enable restoration in client configuration to completely control everything from server web interface. Here is a sample client configuration &lt;code&gt;/etc/default/urbackupclientbackend&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/urbackup/enable-web.webp&quot; alt=&quot;Enable Web&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Windows Client Setup&lt;/h2&gt;
&lt;p&gt;Windows uses a executable that is made with the &quot;Add New Client&quot; button. By default, windows clients will have full image backup on and no file based backups. I&apos;d recommend changing this by adding your home directory or any other important folders, such as: &lt;code&gt;My Documents&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Linux Client Setup&lt;/h2&gt;
&lt;p&gt;Linux clients can be installed via terminal and what I recommend.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: The Linux GUI isn&apos;t good and terminal use of &lt;code&gt;urbackupclientctl&lt;/code&gt; is used&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Image Backups&lt;/h3&gt;
&lt;p&gt;Since urbackup only supports EXT4 and XFS we need LVM setup on these volumes BEFORE installing the distribution. LVM is tricky to setup correctly and will be hard as a beginner. The good thing about Linux is we don&apos;t have to worry about full image backups. All our configuration settings are in &lt;code&gt;~/.config&lt;/code&gt; and global settings in &lt;code&gt;/etc/&lt;/code&gt;. On my installs I mainly backup the &lt;code&gt;.config&lt;/code&gt; folder and any other folder where I might put important information that would be isolated to that computer.&lt;/p&gt;
&lt;h3&gt;Setting the backup directories&lt;/h3&gt;
&lt;p&gt;Here is a sample backup command to add my &lt;code&gt;~/.config&lt;/code&gt; directory&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo urbackupclientctl add-backupdir -d $HOME/.config/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, check the status using the server web interface.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/urbackup/linux-file.webp&quot; alt=&quot;Linux File&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Uninstall&lt;/h3&gt;
&lt;p&gt;Uninstallation is a bit weird and needs to be done with this command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo uninstall_urbackupclient
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/urbackup/linux-uninstall.webp&quot; alt=&quot;Linux Uninstall&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Alternatives&lt;/h2&gt;
&lt;p&gt;There are a lot of free and open source backup solutions for backup. I picked urbackup because it is the most basic and probably the easiest to setup. However, if you need more features there are more backup solutions that I&apos;d consider better for large environments or businesses.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BorgBackup &lt;a href=&quot;https://www.borgbackup.org/&quot;&gt;https://www.borgbackup.org/&lt;/a&gt; for cloud paid offering, BorgBase &lt;a href=&quot;https://www.borgbase.com/&quot;&gt;https://www.borgbase.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bacula &lt;a href=&quot;https://www.bacula.org/&quot;&gt;https://www.bacula.org/&lt;/a&gt; Enterprise solutions and fantastic dashboard&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/tXGVzMUsuE4&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, 04 Nov 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Want a Universal Backup that works on EVERY operating system and is free + open source? Urbackup is the software you are looking for!&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1584567052404412416&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;Why UrBackup&lt;/h2&gt;
&lt;p&gt;This program is absolutely amazing and free! All it&apos;s source code is on the internet which made it able to adapt to ALL operating systems. Windows, Mac, Linux... hell it even has ARM support!&lt;/p&gt;
&lt;h2&gt;Universal Backup Servers&lt;/h2&gt;
&lt;p&gt;There is a ton of different supported servers and even some that are unsupported that still work. Here is the official download page: &lt;a href=&quot;http://www.urbackup.org/download.html&quot;&gt;http://www.urbackup.org/download.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One notable non-official project is for Synology NAS devices. I use a 64-bit Synology on DSM 7+, so pay attention to your current version if you want to use the project below.&lt;/p&gt;
&lt;p&gt;Synology Project: &lt;a href=&quot;https://github.com/josef109/spksrc&quot;&gt;https://github.com/josef109/spksrc&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Server Dashboard&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/urbackup/dash.webp&quot; alt=&quot;Dash&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Automated Terminal Install and Linux Setup&lt;/h3&gt;
&lt;p&gt;Linux installs are a complete DREAM! Just paste the command listed under terminal when you use &quot;Add New Client&quot; Button. Here is an example install:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/urbackup/linux-term.webp&quot; alt=&quot;Linux Term&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Enable Restore from Web&lt;/h3&gt;
&lt;p&gt;You need to enable restoration in client configuration to completely control everything from server web interface. Here is a sample client configuration &lt;code&gt;/etc/default/urbackupclientbackend&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/urbackup/enable-web.webp&quot; alt=&quot;Enable Web&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Windows Client Setup&lt;/h2&gt;
&lt;p&gt;Windows uses a executable that is made with the &quot;Add New Client&quot; button. By default, windows clients will have full image backup on and no file based backups. I&apos;d recommend changing this by adding your home directory or any other important folders, such as: &lt;code&gt;My Documents&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Linux Client Setup&lt;/h2&gt;
&lt;p&gt;Linux clients can be installed via terminal and what I recommend.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: The Linux GUI isn&apos;t good and terminal use of &lt;code&gt;urbackupclientctl&lt;/code&gt; is used&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Image Backups&lt;/h3&gt;
&lt;p&gt;Since urbackup only supports EXT4 and XFS we need LVM setup on these volumes BEFORE installing the distribution. LVM is tricky to setup correctly and will be hard as a beginner. The good thing about Linux is we don&apos;t have to worry about full image backups. All our configuration settings are in &lt;code&gt;~/.config&lt;/code&gt; and global settings in &lt;code&gt;/etc/&lt;/code&gt;. On my installs I mainly backup the &lt;code&gt;.config&lt;/code&gt; folder and any other folder where I might put important information that would be isolated to that computer.&lt;/p&gt;
&lt;h3&gt;Setting the backup directories&lt;/h3&gt;
&lt;p&gt;Here is a sample backup command to add my &lt;code&gt;~/.config&lt;/code&gt; directory&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo urbackupclientctl add-backupdir -d $HOME/.config/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, check the status using the server web interface.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/urbackup/linux-file.webp&quot; alt=&quot;Linux File&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Uninstall&lt;/h3&gt;
&lt;p&gt;Uninstallation is a bit weird and needs to be done with this command:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo uninstall_urbackupclient
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/urbackup/linux-uninstall.webp&quot; alt=&quot;Linux Uninstall&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Alternatives&lt;/h2&gt;
&lt;p&gt;There are a lot of free and open source backup solutions for backup. I picked urbackup because it is the most basic and probably the easiest to setup. However, if you need more features there are more backup solutions that I&apos;d consider better for large environments or businesses.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BorgBackup &lt;a href=&quot;https://www.borgbackup.org/&quot;&gt;https://www.borgbackup.org/&lt;/a&gt; for cloud paid offering, BorgBase &lt;a href=&quot;https://www.borgbase.com/&quot;&gt;https://www.borgbase.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bacula &lt;a href=&quot;https://www.bacula.org/&quot;&gt;https://www.bacula.org/&lt;/a&gt; Enterprise solutions and fantastic dashboard&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/tXGVzMUsuE4&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 I Hate Most Linux Distributions</title><link>https://christitus.com/hate-linux-distributions/</link><guid isPermaLink="true">https://christitus.com/hate-linux-distributions/</guid><description>&lt;p&gt;I love Linux, but the distributions for desktop systems isn&apos;t fun to navigate. It&apos;s the reason why I haven&apos;t done a Distro review in a year or more.&lt;/p&gt;

&lt;h2&gt;Before I begin&lt;/h2&gt;
&lt;p&gt;Linux itself and GNU tools are some of the best I&apos;ve ever used, I actually like systemd, and its display renders are adequate.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/hate.gif&quot; alt=&quot;hate&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;So what is to hate?&lt;/h2&gt;
&lt;p&gt;Distributions are often cobbled together and not well optimized with some exceptions, but I&apos;m often disappointed from the lack of polish. This isn&apos;t a knock against the developers of these distributions, they don&apos;t have the resources to succeed. They don&apos;t have the massive budgets like the big tech operating system equivelents and why they are so... strange.&lt;/p&gt;
&lt;p&gt;Besides there being 100+ distributions and most of them cannibalizing off each other, they don&apos;t have a cohesive system a lot of time. They try to emulate Windows or Mac and always fall short. In the end, they typically all have the same options, but each choose a bit differently.&lt;/p&gt;
&lt;p&gt;Choice isn&apos;t bad... Right?&lt;/p&gt;
&lt;p&gt;The biggest pitfall is that they all take different design decisions and often fall short in areas. This couldn&apos;t be more evident than the success of the Steam Deck and Chrome OS.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/tux-suit.webp&quot; alt=&quot;linux-suit&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;The Year of the CORPORATE Linux Desktop&lt;/h2&gt;
&lt;p&gt;With steamdeck selling over a million units this year, and Chrome OS being a staple in every classroom across America... a Linux distribution can be far reaching. Chrome OS is Gentoo Linux at it&apos;s core and Steam Deck is an immutable version of Arch, so these ARE Linux distributions.&lt;/p&gt;
&lt;p&gt;What do they do so well?&lt;/p&gt;
&lt;p&gt;You can ask any Linux neckbeard... they will say they have money, marketing, and influence. This is true, but it isn&apos;t the complete picture. I&apos;d say the one thing these two distributions do better than ANYONE else is a cohesive vision and quality control. The interfaces don&apos;t change and they keep getting better as they age and get updated. No other Linux distribution does this that has such bleeding edge packages.&lt;/p&gt;
&lt;p&gt;Both Chrome OS and Steam Deck get update at least once a month and sometimes more often. This is where most Linux distributions fail because they don&apos;t have the man power to develop at such a rapid pace or the money to quality test it like these corporate system can.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/debian.webp&quot; alt=&quot;debian&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;The Distribution I use&lt;/h2&gt;
&lt;p&gt;Debian and Fedora. They are MASSIVE and give all the options in the world that you could want. My system will be as good or bad as I can make it, but I decide. If something happens on my system, I screwed up.&lt;/p&gt;
&lt;p&gt;This is where the disconnect happens with normal users. They hear Linux is this stable system that never breaks. While this is true in the server realm, Linux desktop is not a consistent experience because of the distributions it has. With too much choice, too many underfunded projects, and little quality control... there will be problems. Users won&apos;t understand this foriegn system, instructions will be out of date or non-existent, and support will be spotty at best.&lt;/p&gt;
&lt;p&gt;Last month, Arch Linux had a bad update that BROKE GRUB and users couldn&apos;t boot their system for example.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/hate-linux-distributions/doom.webp&quot; alt=&quot;Doom&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Is Linux Desktop Doomed?&lt;/h2&gt;
&lt;p&gt;Not by a long shot! I&apos;ll continue using mine as a main staple for a long time yet. I just don&apos;t see the community run Linux distributions ever hitting mainstream. That&apos;s ok!&lt;/p&gt;
&lt;p&gt;What WILL Happen is big companies like Steam, Google, and others, will take Linux and refine their own VISION of the perfect computer using it. All these companies will make better and better verisons of Linux and we won&apos;t be talking about Linux distrubtions anymore.&lt;/p&gt;
&lt;p&gt;What about FOSS and the neckbeards that Linux IS founded on!?! Well... there is always BSD.&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/KT0m9DM8moc&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, 28 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I love Linux, but the distributions for desktop systems isn&apos;t fun to navigate. It&apos;s the reason why I haven&apos;t done a Distro review in a year or more.&lt;/p&gt;

&lt;h2&gt;Before I begin&lt;/h2&gt;
&lt;p&gt;Linux itself and GNU tools are some of the best I&apos;ve ever used, I actually like systemd, and its display renders are adequate.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/hate.gif&quot; alt=&quot;hate&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;So what is to hate?&lt;/h2&gt;
&lt;p&gt;Distributions are often cobbled together and not well optimized with some exceptions, but I&apos;m often disappointed from the lack of polish. This isn&apos;t a knock against the developers of these distributions, they don&apos;t have the resources to succeed. They don&apos;t have the massive budgets like the big tech operating system equivelents and why they are so... strange.&lt;/p&gt;
&lt;p&gt;Besides there being 100+ distributions and most of them cannibalizing off each other, they don&apos;t have a cohesive system a lot of time. They try to emulate Windows or Mac and always fall short. In the end, they typically all have the same options, but each choose a bit differently.&lt;/p&gt;
&lt;p&gt;Choice isn&apos;t bad... Right?&lt;/p&gt;
&lt;p&gt;The biggest pitfall is that they all take different design decisions and often fall short in areas. This couldn&apos;t be more evident than the success of the Steam Deck and Chrome OS.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/tux-suit.webp&quot; alt=&quot;linux-suit&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;The Year of the CORPORATE Linux Desktop&lt;/h2&gt;
&lt;p&gt;With steamdeck selling over a million units this year, and Chrome OS being a staple in every classroom across America... a Linux distribution can be far reaching. Chrome OS is Gentoo Linux at it&apos;s core and Steam Deck is an immutable version of Arch, so these ARE Linux distributions.&lt;/p&gt;
&lt;p&gt;What do they do so well?&lt;/p&gt;
&lt;p&gt;You can ask any Linux neckbeard... they will say they have money, marketing, and influence. This is true, but it isn&apos;t the complete picture. I&apos;d say the one thing these two distributions do better than ANYONE else is a cohesive vision and quality control. The interfaces don&apos;t change and they keep getting better as they age and get updated. No other Linux distribution does this that has such bleeding edge packages.&lt;/p&gt;
&lt;p&gt;Both Chrome OS and Steam Deck get update at least once a month and sometimes more often. This is where most Linux distributions fail because they don&apos;t have the man power to develop at such a rapid pace or the money to quality test it like these corporate system can.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/debian.webp&quot; alt=&quot;debian&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;The Distribution I use&lt;/h2&gt;
&lt;p&gt;Debian and Fedora. They are MASSIVE and give all the options in the world that you could want. My system will be as good or bad as I can make it, but I decide. If something happens on my system, I screwed up.&lt;/p&gt;
&lt;p&gt;This is where the disconnect happens with normal users. They hear Linux is this stable system that never breaks. While this is true in the server realm, Linux desktop is not a consistent experience because of the distributions it has. With too much choice, too many underfunded projects, and little quality control... there will be problems. Users won&apos;t understand this foriegn system, instructions will be out of date or non-existent, and support will be spotty at best.&lt;/p&gt;
&lt;p&gt;Last month, Arch Linux had a bad update that BROKE GRUB and users couldn&apos;t boot their system for example.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/hate-linux-distributions/doom.webp&quot; alt=&quot;Doom&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Is Linux Desktop Doomed?&lt;/h2&gt;
&lt;p&gt;Not by a long shot! I&apos;ll continue using mine as a main staple for a long time yet. I just don&apos;t see the community run Linux distributions ever hitting mainstream. That&apos;s ok!&lt;/p&gt;
&lt;p&gt;What WILL Happen is big companies like Steam, Google, and others, will take Linux and refine their own VISION of the perfect computer using it. All these companies will make better and better verisons of Linux and we won&apos;t be talking about Linux distrubtions anymore.&lt;/p&gt;
&lt;p&gt;What about FOSS and the neckbeards that Linux IS founded on!?! Well... there is always BSD.&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/KT0m9DM8moc&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>Beautiful Bash</title><link>https://christitus.com/beautiful-bash/</link><guid isPermaLink="true">https://christitus.com/beautiful-bash/</guid><description>&lt;p&gt;Tired of an Ugly prompt with no features? Fix it with this guide!&lt;/p&gt;

&lt;h2&gt;The Look&lt;/h2&gt;
&lt;p&gt;The following is what the end result of the bash prompt will look like:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/beautiful-bash/prompt.webp&quot; alt=&quot;Prompt&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;p&gt;With all my guides I like to create bash scripts that will auto install and configure everything. You may have heard of the starship prompt, which this uses, but is heavily themed. I also have my included bashrc with a ton of useful aliases.&lt;/p&gt;
&lt;p&gt;The setup file will also install autojump which helps you navigate between directories.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/beautiful-bash/alias.webp&quot; alt=&quot;Alias&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Pick a directory to house all the bash files. I have a dedicated Github directory for all the projects I use @ &lt;code&gt;~/GitHub/&lt;/code&gt;, but you can pick any directory including your home and then clone mybash repository for install.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/christitustech/mybash
cd mybash
./setup.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: By default this will symlink your ~/.bashrc and wipe out any customizations you have made!&lt;/em&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/b3W7Ky_aaaY&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, 24 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Tired of an Ugly prompt with no features? Fix it with this guide!&lt;/p&gt;

&lt;h2&gt;The Look&lt;/h2&gt;
&lt;p&gt;The following is what the end result of the bash prompt will look like:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/beautiful-bash/prompt.webp&quot; alt=&quot;Prompt&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;p&gt;With all my guides I like to create bash scripts that will auto install and configure everything. You may have heard of the starship prompt, which this uses, but is heavily themed. I also have my included bashrc with a ton of useful aliases.&lt;/p&gt;
&lt;p&gt;The setup file will also install autojump which helps you navigate between directories.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/beautiful-bash/alias.webp&quot; alt=&quot;Alias&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Pick a directory to house all the bash files. I have a dedicated Github directory for all the projects I use @ &lt;code&gt;~/GitHub/&lt;/code&gt;, but you can pick any directory including your home and then clone mybash repository for install.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/christitustech/mybash
cd mybash
./setup.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: By default this will symlink your ~/.bashrc and wipe out any customizations you have made!&lt;/em&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/b3W7Ky_aaaY&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>Buying Cheap Ebay Graphics Cards</title><link>https://christitus.com/buying-cheap-ebay-graphics-card/</link><guid isPermaLink="true">https://christitus.com/buying-cheap-ebay-graphics-card/</guid><description>&lt;p&gt;With GPU Market prices plummeting and about to go even further down... I picked up a used GPU from eBay.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1573043990018113539&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;The Deal&lt;/h2&gt;
&lt;p&gt;You can monitor these cards and get some amazing deals. The AMD 5700 XT I picked up for $170 and this was selling for OVER $1000 dollars in 2021. This card is special because its predecessor is the 6700 XT and has only 3% better performance in 1080p format. Amazing right? Well... it is not quite that simple.&lt;/p&gt;
&lt;h2&gt;Buying through eBay&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/buying-cheap-ebay-graphics-card/ebay-itemview.webp&quot; alt=&quot;Ebay Itemview&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This particular post intrigued me because it the pictures that came with it and the extremely high feedback with high volumes.&lt;/p&gt;
&lt;p&gt;The picture I paid the most attention to was the backplate. Notice over the screws the warranty symbol sticker. This is still there, even through they post says they upgraded the thermal pads. This tells me either the picture isn&apos;t of the card or the person took extreme care when doing this upgrade. The other thing that stood out was the card itself looked to be in very good condition.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/buying-cheap-ebay-graphics-card/backplate-5700x.webp&quot; alt=&quot;Backplate 5700x&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Red Flags&lt;/h2&gt;
&lt;p&gt;There are couple things I look at when scanning the pictures.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stock photos - HUGE Flag and do not buy anything with a stock photo&lt;/li&gt;
&lt;li&gt;Excessive &quot;grease stains&quot; - On the card zoom in and if you can see smears or what looks like the plastic is wet, then the card was run extremely hot and a lot of the thermal compound leaked and was smeared on the card itself. Most of these used mining cards will have a little bit of that, but pay close attention to it.&lt;/li&gt;
&lt;li&gt;No Retail Packaging - This isn&apos;t a huge flag, but typically this just means they didn&apos;t put much care into keeping the packaging. What else didn&apos;t that pay attention to?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Pricing&lt;/h2&gt;
&lt;p&gt;Even though I bought this card at $170 and that is below the retail and eBay historical pricing for the past couple years, I could have waited a bit longer. Once the new generation cards come out, these cards will drop even LOWER! That is the perfect time to scoop up a deal. For 1080p gaming, you&apos;d have to hate yourself to buy a new generation card. These older gen cards give more performance than you could ever want at that resolution.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/buying-cheap-ebay-graphics-card/ebay.webp&quot; alt=&quot;Ebay&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/buying-cheap-ebay-graphics-card/retail.webp&quot; alt=&quot;Retail&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Issues once you bought the card&lt;/h2&gt;
&lt;p&gt;The biggest issue you will run into is bad roms. Most these mining farms flash the vbios with undervolted presets. This can cause blue screens and host of other issues.&lt;/p&gt;
&lt;p&gt;This can be fixed with downloading a new bios from &lt;a href=&quot;https://www.techpowerup.com/vgabios/&quot;&gt;https://www.techpowerup.com/vgabios/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just be very careful and backup the existing bios with a program like GPUZ &lt;a href=&quot;https://www.techpowerup.com/download/techpowerup-gpu-z/&quot;&gt;https://www.techpowerup.com/download/techpowerup-gpu-z/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&apos;d recommend using GPUz for the BIOS backup and also create a backup using the flashing program as well. I bricked my card momentarily when I tried to flash in Windows. This was fixed by booting in Linux and force flashing the vbios from command line.&lt;/p&gt;
&lt;p&gt;The other issue is the cards were not taken care of and were run at too high of temperatures. This can cause multiple errors and generally the card is bad. HOWEVER, I have yet to run into this being the case for me. Most times just re-flashing with a factory bios fixes most the issues I&apos;ve encountered.&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/X44gW2BoSpc&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, 21 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;With GPU Market prices plummeting and about to go even further down... I picked up a used GPU from eBay.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1573043990018113539&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;The Deal&lt;/h2&gt;
&lt;p&gt;You can monitor these cards and get some amazing deals. The AMD 5700 XT I picked up for $170 and this was selling for OVER $1000 dollars in 2021. This card is special because its predecessor is the 6700 XT and has only 3% better performance in 1080p format. Amazing right? Well... it is not quite that simple.&lt;/p&gt;
&lt;h2&gt;Buying through eBay&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/buying-cheap-ebay-graphics-card/ebay-itemview.webp&quot; alt=&quot;Ebay Itemview&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This particular post intrigued me because it the pictures that came with it and the extremely high feedback with high volumes.&lt;/p&gt;
&lt;p&gt;The picture I paid the most attention to was the backplate. Notice over the screws the warranty symbol sticker. This is still there, even through they post says they upgraded the thermal pads. This tells me either the picture isn&apos;t of the card or the person took extreme care when doing this upgrade. The other thing that stood out was the card itself looked to be in very good condition.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/buying-cheap-ebay-graphics-card/backplate-5700x.webp&quot; alt=&quot;Backplate 5700x&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Red Flags&lt;/h2&gt;
&lt;p&gt;There are couple things I look at when scanning the pictures.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stock photos - HUGE Flag and do not buy anything with a stock photo&lt;/li&gt;
&lt;li&gt;Excessive &quot;grease stains&quot; - On the card zoom in and if you can see smears or what looks like the plastic is wet, then the card was run extremely hot and a lot of the thermal compound leaked and was smeared on the card itself. Most of these used mining cards will have a little bit of that, but pay close attention to it.&lt;/li&gt;
&lt;li&gt;No Retail Packaging - This isn&apos;t a huge flag, but typically this just means they didn&apos;t put much care into keeping the packaging. What else didn&apos;t that pay attention to?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Pricing&lt;/h2&gt;
&lt;p&gt;Even though I bought this card at $170 and that is below the retail and eBay historical pricing for the past couple years, I could have waited a bit longer. Once the new generation cards come out, these cards will drop even LOWER! That is the perfect time to scoop up a deal. For 1080p gaming, you&apos;d have to hate yourself to buy a new generation card. These older gen cards give more performance than you could ever want at that resolution.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/buying-cheap-ebay-graphics-card/ebay.webp&quot; alt=&quot;Ebay&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/buying-cheap-ebay-graphics-card/retail.webp&quot; alt=&quot;Retail&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Issues once you bought the card&lt;/h2&gt;
&lt;p&gt;The biggest issue you will run into is bad roms. Most these mining farms flash the vbios with undervolted presets. This can cause blue screens and host of other issues.&lt;/p&gt;
&lt;p&gt;This can be fixed with downloading a new bios from &lt;a href=&quot;https://www.techpowerup.com/vgabios/&quot;&gt;https://www.techpowerup.com/vgabios/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just be very careful and backup the existing bios with a program like GPUZ &lt;a href=&quot;https://www.techpowerup.com/download/techpowerup-gpu-z/&quot;&gt;https://www.techpowerup.com/download/techpowerup-gpu-z/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&apos;d recommend using GPUz for the BIOS backup and also create a backup using the flashing program as well. I bricked my card momentarily when I tried to flash in Windows. This was fixed by booting in Linux and force flashing the vbios from command line.&lt;/p&gt;
&lt;p&gt;The other issue is the cards were not taken care of and were run at too high of temperatures. This can cause multiple errors and generally the card is bad. HOWEVER, I have yet to run into this being the case for me. Most times just re-flashing with a factory bios fixes most the issues I&apos;ve encountered.&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/X44gW2BoSpc&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>Pros Use Bleachbit</title><link>https://christitus.com/pros-use-bleachbit/</link><guid isPermaLink="true">https://christitus.com/pros-use-bleachbit/</guid><description>&lt;p&gt;I still see far too many comments with people that still use CCLeaner. Bleachbit is a FAR superior product and it&apos;s also free and open source. It won&apos;t try to upsell you a bunch of garbage and has a great track record, unlike CCleaner which was hacked and literally installed malware on thousands of PCs.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1577379725869256734&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;CCleaner History&lt;/h2&gt;
&lt;p&gt;I made a whole article on the CCleaner malware issue, but the main issue today is the program adds to much bloat. From the monitoring service, to the &quot;Optimization Service&quot; that adds multiple processes to your system. If you want to know more about this here is my past on CCleaner.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/tSm1GcuygM0&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;BleachBit Overview&lt;/h2&gt;
&lt;p&gt;As a free and open source tool you simply run Bleachbit when you want to. No extra process run when you aren&apos;t using it and it does a fantastic job on ANY system.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/bleachbit.webp&quot; alt=&quot;bleachbit&quot; /&gt;&lt;/p&gt;
&lt;p&gt;There is a TON of features and it deletes not only system temporary files, but also program specific temporary files like those stored from Discord or your web browser.&lt;/p&gt;
&lt;p&gt;Is a program missing that you want cleaned? Chances are the community made a special XML file to clean it @ &lt;a href=&quot;https://github.com/bleachbit/cleanerml&quot;&gt;https://github.com/bleachbit/cleanerml&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/2oT4qrHmDMY&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, 12 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I still see far too many comments with people that still use CCLeaner. Bleachbit is a FAR superior product and it&apos;s also free and open source. It won&apos;t try to upsell you a bunch of garbage and has a great track record, unlike CCleaner which was hacked and literally installed malware on thousands of PCs.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1577379725869256734&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;h2&gt;CCleaner History&lt;/h2&gt;
&lt;p&gt;I made a whole article on the CCleaner malware issue, but the main issue today is the program adds to much bloat. From the monitoring service, to the &quot;Optimization Service&quot; that adds multiple processes to your system. If you want to know more about this here is my past on CCleaner.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/tSm1GcuygM0&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;BleachBit Overview&lt;/h2&gt;
&lt;p&gt;As a free and open source tool you simply run Bleachbit when you want to. No extra process run when you aren&apos;t using it and it does a fantastic job on ANY system.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/bleachbit.webp&quot; alt=&quot;bleachbit&quot; /&gt;&lt;/p&gt;
&lt;p&gt;There is a TON of features and it deletes not only system temporary files, but also program specific temporary files like those stored from Discord or your web browser.&lt;/p&gt;
&lt;p&gt;Is a program missing that you want cleaned? Chances are the community made a special XML file to clean it @ &lt;a href=&quot;https://github.com/bleachbit/cleanerml&quot;&gt;https://github.com/bleachbit/cleanerml&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/2oT4qrHmDMY&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>How I Setup My Website</title><link>https://christitus.com/how-i-setup-my-website/</link><guid isPermaLink="true">https://christitus.com/how-i-setup-my-website/</guid><description>&lt;p&gt;This shows you have I automate my workflows and setup my website for maximum productivity and search&lt;/p&gt;
&lt;p&gt;The best part is this is FREE and will produce a website faster than anything on the web. Netlify, my host, didn&apos;t charge anything until I was breaking 100GB of bandwidth and 100,000 active users PER MONTH! Now with double those numbers I pay only $19 a month and have 1 TB (Terabyte) of data per month.&lt;/p&gt;
&lt;h2&gt;The Workflow and Overview&lt;/h2&gt;
&lt;p&gt;Typically before I start recording any video, I write an outline and publish it on my website. It&apos;s almost like a video script, but also a copy paste guide for either a viewer or just someone searching google.&lt;/p&gt;
&lt;p&gt;This is done by using a static site generator. There are bunch on the market, but the one that suited my needs the best is &lt;a href=&quot;https://gohugo.io&quot;&gt;Hugo&lt;/a&gt;. It has a bunch of themes ready to use out of the box @ &lt;a href=&quot;https://themes.gohugo.io/&quot;&gt;https://themes.gohugo.io/&lt;/a&gt; and is extremely modular.&lt;/p&gt;
&lt;p&gt;Then there are the annoyances of other website platforms like WordPress. You need to go on the web and use some terrible web based editor that just is slow and takes a long time. Hugo fixes this by using both GitHub and Netlify for deployment. Netlify will &quot;host, build, and distribute&quot; the content automatically and GitHub will be where you publish when it&apos;s ready for the publish stage that Netlify controls.&lt;/p&gt;
&lt;p&gt;What this looks like in practice is I issue a &lt;code&gt;hugo new posts/new-post.md&lt;/code&gt;, edit it with &lt;code&gt;vim posts/new-post.md&lt;/code&gt;, and post it with git commit and push. This allows me to create a page in seconds if I wanted.&lt;/p&gt;
&lt;h2&gt;The Setup&lt;/h2&gt;
&lt;p&gt;Install Hugo (I recommend &lt;a href=&quot;/nix-package-manager&quot;&gt;NIX Package Manager&lt;/a&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nix-env -iA nixpkgs.hugo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do a quick setup that creates the &lt;code&gt;website&lt;/code&gt; folder and the needed HUGO framework files with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hugo new site website
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then we will initialize it with a HUGO theme like so:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd website
git init
git submodule add https://github.com/zzossig/hugo-theme-zzo.git themes/zzo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I absolutely love the ZZO theme as a beginner. It has some of the best instructions and documentation you will find! &lt;a href=&quot;https://zzo-docs.vercel.app/zzo/gettingstarted/installation/&quot;&gt;https://zzo-docs.vercel.app/zzo/gettingstarted/installation/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Usage and First Steps&lt;/h2&gt;
&lt;p&gt;The first thing you want to do is look over the sample post in &lt;code&gt;/themes&lt;/code&gt; under &lt;code&gt;/themes/examplesite&lt;/code&gt;. Under here you will see the structure that HUGO uses and how most of the content ends up in the &lt;code&gt;content&lt;/code&gt; directory off of root.&lt;/p&gt;
&lt;p&gt;The second thing to note is the &lt;code&gt;/content/posts/&lt;/code&gt; and seeing the examples here. This will show you the sample markdown file and how it&apos;s laid out. Change these and make your first post. Once you figure out a good structure for your posts, you can then edit the default template.&lt;/p&gt;
&lt;p&gt;For previewing the changes you can open up a new terminal and just type &lt;code&gt;hugo server&lt;/code&gt; from the root &lt;code&gt;website&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Now I have three different windows that I&apos;m using for the bulk of my workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Chrome Window with &lt;a href=&quot;https://localhost:1313&quot;&gt;https://localhost:1313&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IDE for editing my markdown files (vs code, vim, etc.)&lt;/li&gt;
&lt;li&gt;Extra terminal window running &lt;code&gt;hugo server&lt;/code&gt; for real time updates for the chrome window&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Note: You can use terminal inside vs code and with the auto save feature you can see the code get updated on the webpage for every change you make!&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Your First Modifications&lt;/h2&gt;
&lt;p&gt;Remember the big thing with HUGO is everything is modular and everything can be changed, because at the end it is simply outputting a static html file.&lt;/p&gt;
&lt;p&gt;Once you figure out how you want your posts structured, change the &lt;code&gt;/archtypes/default.md&lt;/code&gt;. This template is what each new post will use. This is where you really increase your efficiency as we often find ourselves writing the same few things on each new post we make.&lt;/p&gt;
&lt;p&gt;The next modification will probably comes from adding widgets or sidebar components. Instead of directly modifying the &lt;code&gt;/theme/zzo&lt;/code&gt; files you can actually look through the partials directory and create your own &lt;code&gt;/layouts/partials&lt;/code&gt; in your root that will take precedence over the ones in the theme directory. More in-depth explanation from the official site &lt;a href=&quot;https://gohugo.io/functions/partials/include/&quot;&gt;https://gohugo.io/functions/partials/include/&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Complex Theme Modifications&lt;/h2&gt;
&lt;p&gt;In my past Hugo Guide I went into some pretty big theme modifications (adding search, tags, etc.) Read more about that @ &lt;a href=&quot;https://christitus.com/hugo-guide/&quot;&gt;https://christitus.com/hugo-guide/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also if you see something you want to copy from my website, everything is on my public GitHub @ &lt;a href=&quot;https://github.com/christitustech/website&quot;&gt;https://github.com/christitustech/website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adding comments can be done in a multitude of ways, but my absolute favorite instead of using Disqus or &lt;a href=&quot;http://commento.io&quot;&gt;commento.io&lt;/a&gt; is simply using GitHub to host the comments directly on your website repository! There is an amazing &quot;plugin&quot; that you can add called &lt;a href=&quot;https://github.com/utterance/utterances&quot;&gt;https://github.com/utterance/utterances&lt;/a&gt; which does all the spam filtering and integrates comments BETTER!&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/xMv10E561WQ&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, 07 Oct 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This shows you have I automate my workflows and setup my website for maximum productivity and search&lt;/p&gt;
&lt;p&gt;The best part is this is FREE and will produce a website faster than anything on the web. Netlify, my host, didn&apos;t charge anything until I was breaking 100GB of bandwidth and 100,000 active users PER MONTH! Now with double those numbers I pay only $19 a month and have 1 TB (Terabyte) of data per month.&lt;/p&gt;
&lt;h2&gt;The Workflow and Overview&lt;/h2&gt;
&lt;p&gt;Typically before I start recording any video, I write an outline and publish it on my website. It&apos;s almost like a video script, but also a copy paste guide for either a viewer or just someone searching google.&lt;/p&gt;
&lt;p&gt;This is done by using a static site generator. There are bunch on the market, but the one that suited my needs the best is &lt;a href=&quot;https://gohugo.io&quot;&gt;Hugo&lt;/a&gt;. It has a bunch of themes ready to use out of the box @ &lt;a href=&quot;https://themes.gohugo.io/&quot;&gt;https://themes.gohugo.io/&lt;/a&gt; and is extremely modular.&lt;/p&gt;
&lt;p&gt;Then there are the annoyances of other website platforms like WordPress. You need to go on the web and use some terrible web based editor that just is slow and takes a long time. Hugo fixes this by using both GitHub and Netlify for deployment. Netlify will &quot;host, build, and distribute&quot; the content automatically and GitHub will be where you publish when it&apos;s ready for the publish stage that Netlify controls.&lt;/p&gt;
&lt;p&gt;What this looks like in practice is I issue a &lt;code&gt;hugo new posts/new-post.md&lt;/code&gt;, edit it with &lt;code&gt;vim posts/new-post.md&lt;/code&gt;, and post it with git commit and push. This allows me to create a page in seconds if I wanted.&lt;/p&gt;
&lt;h2&gt;The Setup&lt;/h2&gt;
&lt;p&gt;Install Hugo (I recommend &lt;a href=&quot;/nix-package-manager&quot;&gt;NIX Package Manager&lt;/a&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nix-env -iA nixpkgs.hugo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Do a quick setup that creates the &lt;code&gt;website&lt;/code&gt; folder and the needed HUGO framework files with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hugo new site website
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then we will initialize it with a HUGO theme like so:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd website
git init
git submodule add https://github.com/zzossig/hugo-theme-zzo.git themes/zzo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I absolutely love the ZZO theme as a beginner. It has some of the best instructions and documentation you will find! &lt;a href=&quot;https://zzo-docs.vercel.app/zzo/gettingstarted/installation/&quot;&gt;https://zzo-docs.vercel.app/zzo/gettingstarted/installation/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Usage and First Steps&lt;/h2&gt;
&lt;p&gt;The first thing you want to do is look over the sample post in &lt;code&gt;/themes&lt;/code&gt; under &lt;code&gt;/themes/examplesite&lt;/code&gt;. Under here you will see the structure that HUGO uses and how most of the content ends up in the &lt;code&gt;content&lt;/code&gt; directory off of root.&lt;/p&gt;
&lt;p&gt;The second thing to note is the &lt;code&gt;/content/posts/&lt;/code&gt; and seeing the examples here. This will show you the sample markdown file and how it&apos;s laid out. Change these and make your first post. Once you figure out a good structure for your posts, you can then edit the default template.&lt;/p&gt;
&lt;p&gt;For previewing the changes you can open up a new terminal and just type &lt;code&gt;hugo server&lt;/code&gt; from the root &lt;code&gt;website&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Now I have three different windows that I&apos;m using for the bulk of my workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Chrome Window with &lt;a href=&quot;https://localhost:1313&quot;&gt;https://localhost:1313&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;IDE for editing my markdown files (vs code, vim, etc.)&lt;/li&gt;
&lt;li&gt;Extra terminal window running &lt;code&gt;hugo server&lt;/code&gt; for real time updates for the chrome window&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Note: You can use terminal inside vs code and with the auto save feature you can see the code get updated on the webpage for every change you make!&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Your First Modifications&lt;/h2&gt;
&lt;p&gt;Remember the big thing with HUGO is everything is modular and everything can be changed, because at the end it is simply outputting a static html file.&lt;/p&gt;
&lt;p&gt;Once you figure out how you want your posts structured, change the &lt;code&gt;/archtypes/default.md&lt;/code&gt;. This template is what each new post will use. This is where you really increase your efficiency as we often find ourselves writing the same few things on each new post we make.&lt;/p&gt;
&lt;p&gt;The next modification will probably comes from adding widgets or sidebar components. Instead of directly modifying the &lt;code&gt;/theme/zzo&lt;/code&gt; files you can actually look through the partials directory and create your own &lt;code&gt;/layouts/partials&lt;/code&gt; in your root that will take precedence over the ones in the theme directory. More in-depth explanation from the official site &lt;a href=&quot;https://gohugo.io/functions/partials/include/&quot;&gt;https://gohugo.io/functions/partials/include/&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Complex Theme Modifications&lt;/h2&gt;
&lt;p&gt;In my past Hugo Guide I went into some pretty big theme modifications (adding search, tags, etc.) Read more about that @ &lt;a href=&quot;https://christitus.com/hugo-guide/&quot;&gt;https://christitus.com/hugo-guide/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also if you see something you want to copy from my website, everything is on my public GitHub @ &lt;a href=&quot;https://github.com/christitustech/website&quot;&gt;https://github.com/christitustech/website&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adding comments can be done in a multitude of ways, but my absolute favorite instead of using Disqus or &lt;a href=&quot;http://commento.io&quot;&gt;commento.io&lt;/a&gt; is simply using GitHub to host the comments directly on your website repository! There is an amazing &quot;plugin&quot; that you can add called &lt;a href=&quot;https://github.com/utterance/utterances&quot;&gt;https://github.com/utterance/utterances&lt;/a&gt; which does all the spam filtering and integrates comments BETTER!&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/xMv10E561WQ&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>Setting up Windows inside Linux</title><link>https://christitus.com/windows-inside-linux/</link><guid isPermaLink="true">https://christitus.com/windows-inside-linux/</guid><description>&lt;p&gt;Running Windows inside of Linux is essential for those that are trying to convert to Linux. There will always be a transition period and need to fallback to Windows. It is also nice to have for many Windows only programs that you may need while inside Linux.&lt;/p&gt;

&lt;p&gt;If you haven&apos;t ever installed QEMU before, here is an article to get that setup @ &lt;a href=&quot;https://christitus.com/vm-setup-in-linux/&quot;&gt;https://christitus.com/vm-setup-in-linux/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Optimizing Windows VM&lt;/h2&gt;
&lt;p&gt;First you need to install the VirtIO tools, which can be difficult to track down. My favorite way is to run the exe file from &lt;a href=&quot;https://github.com/virtio-win/virtio-win-pkg-scripts&quot;&gt;https://github.com/virtio-win/virtio-win-pkg-scripts&lt;/a&gt; but many guides use the iso file also provided at this link.&lt;/p&gt;
&lt;p&gt;Another good resource for obtaining VirtIO drivers is from the proxmox wiki &lt;a href=&quot;https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers&quot;&gt;https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Enable QEMU Guest Agent&lt;/h3&gt;
&lt;p&gt;Now you need to modify the VM to make use of the guest agent drivers. We need to add the qemu agent channel. Add Hardware -&amp;gt; Channel and copy these settings&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/qemu/guest-agent.webp&quot; alt=&quot;guest-agent&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Passing Devices Through&lt;/h2&gt;
&lt;p&gt;There are two main devices that you may want to pass through to a Windows VM. Hard Drives and Graphics Cards. Passing through a hard drive will give a good uplift in processing power and general VM response. The graphics card is very technical and frankly not recommended, but can be doable on some systems.&lt;/p&gt;
&lt;h3&gt;Dedicated Hard Drive&lt;/h3&gt;
&lt;p&gt;Simply select Add Hardware -&amp;gt; Storage and copy these settings&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;h3&gt;Dedicated Graphics Card&lt;/h3&gt;
&lt;p&gt;This is referred to as PCI Passthrough and can be dicey on some systems. I&apos;ve had some motherboards that can&apos;t do this and others that can. The best guide and scripts I&apos;ve found are from HikariKnight and his GitHub @ &lt;a href=&quot;https://github.com/HikariKnight/quickpassthrough&quot;&gt;https://github.com/HikariKnight/quickpassthrough&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/6KqqNsnkDlQ&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, 26 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Running Windows inside of Linux is essential for those that are trying to convert to Linux. There will always be a transition period and need to fallback to Windows. It is also nice to have for many Windows only programs that you may need while inside Linux.&lt;/p&gt;

&lt;p&gt;If you haven&apos;t ever installed QEMU before, here is an article to get that setup @ &lt;a href=&quot;https://christitus.com/vm-setup-in-linux/&quot;&gt;https://christitus.com/vm-setup-in-linux/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Optimizing Windows VM&lt;/h2&gt;
&lt;p&gt;First you need to install the VirtIO tools, which can be difficult to track down. My favorite way is to run the exe file from &lt;a href=&quot;https://github.com/virtio-win/virtio-win-pkg-scripts&quot;&gt;https://github.com/virtio-win/virtio-win-pkg-scripts&lt;/a&gt; but many guides use the iso file also provided at this link.&lt;/p&gt;
&lt;p&gt;Another good resource for obtaining VirtIO drivers is from the proxmox wiki &lt;a href=&quot;https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers&quot;&gt;https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Enable QEMU Guest Agent&lt;/h3&gt;
&lt;p&gt;Now you need to modify the VM to make use of the guest agent drivers. We need to add the qemu agent channel. Add Hardware -&amp;gt; Channel and copy these settings&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/qemu/guest-agent.webp&quot; alt=&quot;guest-agent&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Passing Devices Through&lt;/h2&gt;
&lt;p&gt;There are two main devices that you may want to pass through to a Windows VM. Hard Drives and Graphics Cards. Passing through a hard drive will give a good uplift in processing power and general VM response. The graphics card is very technical and frankly not recommended, but can be doable on some systems.&lt;/p&gt;
&lt;h3&gt;Dedicated Hard Drive&lt;/h3&gt;
&lt;p&gt;Simply select Add Hardware -&amp;gt; Storage and copy these settings&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;h3&gt;Dedicated Graphics Card&lt;/h3&gt;
&lt;p&gt;This is referred to as PCI Passthrough and can be dicey on some systems. I&apos;ve had some motherboards that can&apos;t do this and others that can. The best guide and scripts I&apos;ve found are from HikariKnight and his GitHub @ &lt;a href=&quot;https://github.com/HikariKnight/quickpassthrough&quot;&gt;https://github.com/HikariKnight/quickpassthrough&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/6KqqNsnkDlQ&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>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>Auto Mount with SystemD</title><link>https://christitus.com/auto-mount-systemd/</link><guid isPermaLink="true">https://christitus.com/auto-mount-systemd/</guid><description>&lt;p&gt;This shows how to automount remote network drives using systemd and fstab&lt;/p&gt;

&lt;h2&gt;Automount using systemd&lt;/h2&gt;
&lt;p&gt;Sometimes partitions can fail to mount on startup and some options are needed to fix this. I&apos;ve had two instances where it was needed. One was on a slow 6 TB drive that timed out on occation during boot and I had to &lt;code&gt;sudo mount -a&lt;/code&gt; to get it to mount&lt;/p&gt;
&lt;p&gt;For this a simple option addition in fstab on a local disk looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x-systemd.after=network-online.target,x-systemd.automount
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, I had problems with NFS shares not mounting and I had to expand these option to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x-systemd.after=network-online.target,x-systemd.automount,x-systemd.mount-timeout=30,_netdev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This makes the &lt;code&gt;/etc/fstab&lt;/code&gt; entry look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.0.10:/volume2/Images  /media/images nfs x-systemd.after=network-online.target,x-systemd.automount,x-systemd.mount-timeout=30,_netdev 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href=&quot;https://wiki.archlinux.org/title/Fstab#Automount_with_systemd&quot;&gt;https://wiki.archlinux.org/title/Fstab#Automount_with_systemd&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description><pubDate>Thu, 22 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This shows how to automount remote network drives using systemd and fstab&lt;/p&gt;

&lt;h2&gt;Automount using systemd&lt;/h2&gt;
&lt;p&gt;Sometimes partitions can fail to mount on startup and some options are needed to fix this. I&apos;ve had two instances where it was needed. One was on a slow 6 TB drive that timed out on occation during boot and I had to &lt;code&gt;sudo mount -a&lt;/code&gt; to get it to mount&lt;/p&gt;
&lt;p&gt;For this a simple option addition in fstab on a local disk looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x-systemd.after=network-online.target,x-systemd.automount
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, I had problems with NFS shares not mounting and I had to expand these option to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x-systemd.after=network-online.target,x-systemd.automount,x-systemd.mount-timeout=30,_netdev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This makes the &lt;code&gt;/etc/fstab&lt;/code&gt; entry look like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;10.0.0.10:/volume2/Images  /media/images nfs x-systemd.after=network-online.target,x-systemd.automount,x-systemd.mount-timeout=30,_netdev 0 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Source: &lt;a href=&quot;https://wiki.archlinux.org/title/Fstab#Automount_with_systemd&quot;&gt;https://wiki.archlinux.org/title/Fstab#Automount_with_systemd&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Linux for Beginners</title><link>https://christitus.com/linux-for-beginners/</link><guid isPermaLink="true">https://christitus.com/linux-for-beginners/</guid><description>&lt;p&gt;So you want to use Linux? It is truly an amazing operating system and probably my favorite one to use. However, it is not for everyone and you&apos;ll need to learn a few things before you can understand it.&lt;/p&gt;
&lt;h2&gt;Where to Start&lt;/h2&gt;
&lt;p&gt;Starting off in Linux is not an easy task and has the most extreme learning curve of ANY operating system because it has so many options. Most will say install X Distro. However, this just doesn&apos;t tell you the full story.&lt;/p&gt;
&lt;p&gt;The Linux desktop community is a strange, social awkward bunch that typically likes to troll people. It also has a tendency of over promising and under delivering. I say this to temper your expectations and realize Linux is a different animal from ANY other operating system. It has its own set of amazing software and when it comes to hardware it has some incompatibilities when coming from Windows.&lt;/p&gt;
&lt;p&gt;The start to your journey will begin with a distribution or a collection of all the tools that make a somewhat complete experience. Just know that every single thing has alternatives. Make notes of what you LIKE and DO NOT LIKE. Then change what you do not like to your needs.&lt;/p&gt;
&lt;p&gt;For a beginner, I highly recommend Linux Mint. It has a very friendly starting point and I want to walk through its install and components as while it&apos;s a great starting point, there are many things I do change to make it a good experience for me. Once you understand what you can change, this opens up many doors...&lt;/p&gt;
&lt;h2&gt;The Install&lt;/h2&gt;
&lt;p&gt;Lets get start with Downloading the ISO @ &lt;a href=&quot;https://www.linuxmint.com/download.php&quot;&gt;https://www.linuxmint.com/download.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Burn this to a USB Stick with Etcher @ &lt;a href=&quot;https://www.balena.io/etcher/&quot;&gt;https://www.balena.io/etcher/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then boot to the USB stick in the PC you are installing Linux on. If this is your first time, I HIGHLY recommend to just boot into the Live environment to get your feet wet first and see if this is something you want to do. Otherwise, follow the prompts and erase your computer to move to Linux.&lt;/p&gt;
&lt;h2&gt;What to Change&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;File Managers&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Dolphin&lt;/li&gt;
&lt;li&gt;Thunar&lt;/li&gt;
&lt;li&gt;Nautilus&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Themes&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;lxappearance&lt;/li&gt;
&lt;li&gt;DE Settings&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Desktop Environments&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Cinnamon&lt;/li&gt;
&lt;li&gt;XFCE&lt;/li&gt;
&lt;li&gt;KDE&lt;/li&gt;
&lt;li&gt;GNOME&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Remote Access&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;TightVNC&lt;/li&gt;
&lt;li&gt;Remmina&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Terminals&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Kitty&lt;/li&gt;
&lt;li&gt;Terminator&lt;/li&gt;
&lt;li&gt;gnome-terminal&lt;/li&gt;
&lt;li&gt;konsole&lt;/li&gt;
&lt;li&gt;yakuake&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Windows App Alternatives&lt;/h2&gt;
&lt;p&gt;People will tell you these programs can work or &quot;kinda&quot; work, but it is an awful experience and if you need them, then you need Windows.&lt;/p&gt;
&lt;h3&gt;Adobe&lt;/h3&gt;
&lt;p&gt;PDF is one of those things that make the business world go round. Adobe has an iron grip in this realm, but for basic editing and simple viewing we can use these programs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;xpdf&lt;/li&gt;
&lt;li&gt;LibreOffice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then there is the creative suite for video and photo. Photoshop, Premiere, etc... and there really isn&apos;t an equal in this area. Just basic alternatives that will work for beginners. So if you aren&apos;t a professional and just need to edit a little photo and video, here are your alternatives.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Photo&lt;/strong&gt; - GIMP&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Video&lt;/strong&gt; - Kdenlive&lt;/p&gt;
&lt;p&gt;I have used these programs exclusively for my first 500 videos on YouTube. They are good and I still use GIMP every day. However, the video editing on Linux is a bit of a joke. Yes, there are alternatives, but they just aren&apos;t very good. Kdenlive is great for beginners, but once you get into color correcting or complex transitions it will fall short. Openshot is another basic alternative, but I personally think Kdenlive is a bit better.&lt;/p&gt;
&lt;p&gt;The other software Linux evangelists recommend are frankly just for the extreme users. DaVinci Resolve is a good piece of software, but its installation and usage on Linux is dicey at best. Lightworks is better to install, but overall a worse piece of software than DaVinci Resolve. If you are a professional in the video industry you can set up a dedicated Linux workstation for DaVinci resolve to their specifications, but for the general user... it is just an awful experience.&lt;/p&gt;
&lt;h3&gt;Microsoft Office&lt;/h3&gt;
&lt;p&gt;This used to have a choke hold on business, but these days it really isn&apos;t needed. Frankly, I think G-Suite does a better job in a lot of ways, but Microsoft themselves offer a fantastic web experience. However, if you have to have a non-web based application, these programs are pretty darn amazing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LibreOffice&lt;/li&gt;
&lt;li&gt;FreeOffice&lt;/li&gt;
&lt;li&gt;OnlyOffice&lt;/li&gt;
&lt;li&gt;OpenOffice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these applications are pretty darn good. The easiest to transition from Microsoft Office is FreeOffice. It&apos;s so alike that I&apos;m suprised they haven&apos;t been sued by Microsoft. However, the other alternatives are just as powerful and fantastic options.&lt;/p&gt;
&lt;h3&gt;Gaming&lt;/h3&gt;
&lt;p&gt;This one has made the most progress in the past couple years and is quite impressive. Linux has easily become the second best operating system for gaming. It has Steam support baked in and many alternatives for non-steam games. While steam games often install and play without any intervention, many non-steam games require a bit of tinkering to get functioning perfectly.&lt;/p&gt;
&lt;p&gt;The one massive drawback for gaming on Linux is the lack of support for many competitive shooter titles. It isn&apos;t that Linux can&apos;t play them, but the publishers refuse to enable Linux support in Easy Anti-Cheat, BattleEye, or Denuvo. There are a few exceptions with APEX Legends recently adding Linux support, but many refuse to like Destiny 2, Call of Duty, Battlefield, and more.&lt;/p&gt;
&lt;h4&gt;Compatibility&lt;/h4&gt;
&lt;p&gt;About 70% of windows games work on Linux. However you need to check &lt;a href=&quot;https://protondb.com&quot;&gt;https://protondb.com&lt;/a&gt; and &lt;a href=&quot;https://lutris.net&quot;&gt;https://lutris.net&lt;/a&gt; to make sure you game is working before you switch!&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is merely a starting point to help you understand and take your first steps in to Linux. There is so much more to explore and even after using Linux daily for almost 5 years as my desktop, I am still discovering new things every day. It is an absolutely amazing Operating System with unlimited potential... It just relies on you the end-user to discover 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/10f4899srvc&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;h3&gt;File System Video&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/roES8iAaJEM&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;h3&gt;YouTube Playlists to Watch&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Learning Linux Terminal (8 Videos) - &lt;a href=&quot;https://www.youtube.com/watch?v=XK81cfvrElg&amp;amp;list=PLc7fktTRMBozYfi4zlDeH0IdLdGImeOnO&quot;&gt;https://www.youtube.com/watch?v=XK81cfvrElg&amp;amp;list=PLc7fktTRMBozYfi4zlDeH0IdLdGImeOnO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Windows to Linux Mint (7 Videos) - &lt;a href=&quot;https://www.youtube.com/watch?v=1hwWAOBOsJs&amp;amp;list=PLc7fktTRMBoxoDWkt0EzILkG4sCrEOT3e&quot;&gt;https://www.youtube.com/watch?v=1hwWAOBOsJs&amp;amp;list=PLc7fktTRMBoxoDWkt0EzILkG4sCrEOT3e&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Mon, 19 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;So you want to use Linux? It is truly an amazing operating system and probably my favorite one to use. However, it is not for everyone and you&apos;ll need to learn a few things before you can understand it.&lt;/p&gt;
&lt;h2&gt;Where to Start&lt;/h2&gt;
&lt;p&gt;Starting off in Linux is not an easy task and has the most extreme learning curve of ANY operating system because it has so many options. Most will say install X Distro. However, this just doesn&apos;t tell you the full story.&lt;/p&gt;
&lt;p&gt;The Linux desktop community is a strange, social awkward bunch that typically likes to troll people. It also has a tendency of over promising and under delivering. I say this to temper your expectations and realize Linux is a different animal from ANY other operating system. It has its own set of amazing software and when it comes to hardware it has some incompatibilities when coming from Windows.&lt;/p&gt;
&lt;p&gt;The start to your journey will begin with a distribution or a collection of all the tools that make a somewhat complete experience. Just know that every single thing has alternatives. Make notes of what you LIKE and DO NOT LIKE. Then change what you do not like to your needs.&lt;/p&gt;
&lt;p&gt;For a beginner, I highly recommend Linux Mint. It has a very friendly starting point and I want to walk through its install and components as while it&apos;s a great starting point, there are many things I do change to make it a good experience for me. Once you understand what you can change, this opens up many doors...&lt;/p&gt;
&lt;h2&gt;The Install&lt;/h2&gt;
&lt;p&gt;Lets get start with Downloading the ISO @ &lt;a href=&quot;https://www.linuxmint.com/download.php&quot;&gt;https://www.linuxmint.com/download.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Burn this to a USB Stick with Etcher @ &lt;a href=&quot;https://www.balena.io/etcher/&quot;&gt;https://www.balena.io/etcher/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then boot to the USB stick in the PC you are installing Linux on. If this is your first time, I HIGHLY recommend to just boot into the Live environment to get your feet wet first and see if this is something you want to do. Otherwise, follow the prompts and erase your computer to move to Linux.&lt;/p&gt;
&lt;h2&gt;What to Change&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;File Managers&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Dolphin&lt;/li&gt;
&lt;li&gt;Thunar&lt;/li&gt;
&lt;li&gt;Nautilus&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Themes&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;lxappearance&lt;/li&gt;
&lt;li&gt;DE Settings&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Desktop Environments&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Cinnamon&lt;/li&gt;
&lt;li&gt;XFCE&lt;/li&gt;
&lt;li&gt;KDE&lt;/li&gt;
&lt;li&gt;GNOME&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Remote Access&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;TightVNC&lt;/li&gt;
&lt;li&gt;Remmina&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Terminals&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Kitty&lt;/li&gt;
&lt;li&gt;Terminator&lt;/li&gt;
&lt;li&gt;gnome-terminal&lt;/li&gt;
&lt;li&gt;konsole&lt;/li&gt;
&lt;li&gt;yakuake&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Windows App Alternatives&lt;/h2&gt;
&lt;p&gt;People will tell you these programs can work or &quot;kinda&quot; work, but it is an awful experience and if you need them, then you need Windows.&lt;/p&gt;
&lt;h3&gt;Adobe&lt;/h3&gt;
&lt;p&gt;PDF is one of those things that make the business world go round. Adobe has an iron grip in this realm, but for basic editing and simple viewing we can use these programs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;xpdf&lt;/li&gt;
&lt;li&gt;LibreOffice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then there is the creative suite for video and photo. Photoshop, Premiere, etc... and there really isn&apos;t an equal in this area. Just basic alternatives that will work for beginners. So if you aren&apos;t a professional and just need to edit a little photo and video, here are your alternatives.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Photo&lt;/strong&gt; - GIMP&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Video&lt;/strong&gt; - Kdenlive&lt;/p&gt;
&lt;p&gt;I have used these programs exclusively for my first 500 videos on YouTube. They are good and I still use GIMP every day. However, the video editing on Linux is a bit of a joke. Yes, there are alternatives, but they just aren&apos;t very good. Kdenlive is great for beginners, but once you get into color correcting or complex transitions it will fall short. Openshot is another basic alternative, but I personally think Kdenlive is a bit better.&lt;/p&gt;
&lt;p&gt;The other software Linux evangelists recommend are frankly just for the extreme users. DaVinci Resolve is a good piece of software, but its installation and usage on Linux is dicey at best. Lightworks is better to install, but overall a worse piece of software than DaVinci Resolve. If you are a professional in the video industry you can set up a dedicated Linux workstation for DaVinci resolve to their specifications, but for the general user... it is just an awful experience.&lt;/p&gt;
&lt;h3&gt;Microsoft Office&lt;/h3&gt;
&lt;p&gt;This used to have a choke hold on business, but these days it really isn&apos;t needed. Frankly, I think G-Suite does a better job in a lot of ways, but Microsoft themselves offer a fantastic web experience. However, if you have to have a non-web based application, these programs are pretty darn amazing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LibreOffice&lt;/li&gt;
&lt;li&gt;FreeOffice&lt;/li&gt;
&lt;li&gt;OnlyOffice&lt;/li&gt;
&lt;li&gt;OpenOffice&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these applications are pretty darn good. The easiest to transition from Microsoft Office is FreeOffice. It&apos;s so alike that I&apos;m suprised they haven&apos;t been sued by Microsoft. However, the other alternatives are just as powerful and fantastic options.&lt;/p&gt;
&lt;h3&gt;Gaming&lt;/h3&gt;
&lt;p&gt;This one has made the most progress in the past couple years and is quite impressive. Linux has easily become the second best operating system for gaming. It has Steam support baked in and many alternatives for non-steam games. While steam games often install and play without any intervention, many non-steam games require a bit of tinkering to get functioning perfectly.&lt;/p&gt;
&lt;p&gt;The one massive drawback for gaming on Linux is the lack of support for many competitive shooter titles. It isn&apos;t that Linux can&apos;t play them, but the publishers refuse to enable Linux support in Easy Anti-Cheat, BattleEye, or Denuvo. There are a few exceptions with APEX Legends recently adding Linux support, but many refuse to like Destiny 2, Call of Duty, Battlefield, and more.&lt;/p&gt;
&lt;h4&gt;Compatibility&lt;/h4&gt;
&lt;p&gt;About 70% of windows games work on Linux. However you need to check &lt;a href=&quot;https://protondb.com&quot;&gt;https://protondb.com&lt;/a&gt; and &lt;a href=&quot;https://lutris.net&quot;&gt;https://lutris.net&lt;/a&gt; to make sure you game is working before you switch!&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is merely a starting point to help you understand and take your first steps in to Linux. There is so much more to explore and even after using Linux daily for almost 5 years as my desktop, I am still discovering new things every day. It is an absolutely amazing Operating System with unlimited potential... It just relies on you the end-user to discover 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/10f4899srvc&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;h3&gt;File System Video&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/roES8iAaJEM&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;h3&gt;YouTube Playlists to Watch&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Learning Linux Terminal (8 Videos) - &lt;a href=&quot;https://www.youtube.com/watch?v=XK81cfvrElg&amp;amp;list=PLc7fktTRMBozYfi4zlDeH0IdLdGImeOnO&quot;&gt;https://www.youtube.com/watch?v=XK81cfvrElg&amp;amp;list=PLc7fktTRMBozYfi4zlDeH0IdLdGImeOnO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Windows to Linux Mint (7 Videos) - &lt;a href=&quot;https://www.youtube.com/watch?v=1hwWAOBOsJs&amp;amp;list=PLc7fktTRMBoxoDWkt0EzILkG4sCrEOT3e&quot;&gt;https://www.youtube.com/watch?v=1hwWAOBOsJs&amp;amp;list=PLc7fktTRMBoxoDWkt0EzILkG4sCrEOT3e&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Fix LibGL Errors</title><link>https://christitus.com/fix-libGL-errors/</link><guid isPermaLink="true">https://christitus.com/fix-libGL-errors/</guid><description>&lt;p&gt;I recently had a debian install where Steam would not launch. Here is how I fixed it when it.&lt;/p&gt;
 _Note: This is for nVidia based GPU systems_
&lt;h2&gt;Error Screen&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/fix-libGL-error.webp&quot; alt=&quot;libGL-error&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;You are missing the following 32-bit libraries, and Steam may not run: libGL.so.1&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Packages Required&lt;/h2&gt;
&lt;p&gt;These packages are missing and will fix the above error.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt install libgl1-mesa-dri:i386 libgl1:i386
sudo apt-get upgrade steam -f
sudo apt install nvidia-driver-libs:i386
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Launch Steam&lt;/h2&gt;
&lt;p&gt;You now can launch steam and have it launch properly.&lt;/p&gt;
</description><pubDate>Thu, 08 Sep 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently had a debian install where Steam would not launch. Here is how I fixed it when it.&lt;/p&gt;
 _Note: This is for nVidia based GPU systems_
&lt;h2&gt;Error Screen&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/fix-libGL-error.webp&quot; alt=&quot;libGL-error&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;You are missing the following 32-bit libraries, and Steam may not run: libGL.so.1&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Packages Required&lt;/h2&gt;
&lt;p&gt;These packages are missing and will fix the above error.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt install libgl1-mesa-dri:i386 libgl1:i386
sudo apt-get upgrade steam -f
sudo apt install nvidia-driver-libs:i386
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Launch Steam&lt;/h2&gt;
&lt;p&gt;You now can launch steam and have it launch properly.&lt;/p&gt;
</content:encoded></item><item><title>Laptop Power Management</title><link>https://christitus.com/laptop-power-management/</link><guid isPermaLink="true">https://christitus.com/laptop-power-management/</guid><description>&lt;p&gt;Power management is a critical thing to understand in laptops. It&apos;s possible to buy an expensive laptop and end up not using it because of bad power management practices.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1560314657142964224&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Also, not taking care of the thermals on a laptop will lead to less laptop life, shorter battery, and unpleasant heat generation.&lt;/p&gt;
&lt;h2&gt;Cooling Pad&lt;/h2&gt;
&lt;p&gt;Get any cheap amazon cooling pad from amazon. Here is a decent $30 one with lots of reviews. &lt;a href=&quot;https://amzn.to/3SV0Y0l&quot;&gt;https://amzn.to/3SV0Y0l&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Redo Thermal Paste&lt;/h2&gt;
&lt;p&gt;By default, almost any and every laptop has excessive thermal compound which leads to higher temperatures. Simply removing the excess compound and apply just a drop of &quot;good&quot; thermal paste will drop temps by about 10 Celsius.&lt;/p&gt;
&lt;p&gt;Here is an example of excess factory thermal compound application:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/laptop-power/thermal.webp&quot; alt=&quot;termal&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Adjust Max CPU Frequency&lt;/h2&gt;
&lt;p&gt;Set your CPU governor to the maximum power it can use. I NEVER use a 100% of the CPU and in most instances rarely break above 50% of its total power. Typically, around 2 GHz is perfect for my day-to-day work. When working on battery, I put this down to 25% on a beefy laptop to conserve most of its power. On weaker laptops, you&apos;d probably double these numbers. 100% on AC Power and 50% on Battery.&lt;/p&gt;
&lt;h3&gt;Linux - cpupower&lt;/h3&gt;
&lt;h4&gt;Required Dependencies&lt;/h4&gt;
&lt;p&gt;Install the following packages&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cpupower&lt;/li&gt;
&lt;li&gt;acpi-support&lt;/li&gt;
&lt;li&gt;acpid&lt;/li&gt;
&lt;li&gt;acpi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example Install:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt-get install acpi-support acpid acpi linux-cpupower cpufrequtils
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Setting Min/Max Power Example&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;cpupower frequency-set -g powersave -d 0.8G -u 1.2G
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Check Frequency&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;cpufreq-info
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Disable Turbo&lt;/h3&gt;
&lt;p&gt;Turbo will draw more power and reduce battery life while increasing CPU temperature.&lt;/p&gt;
&lt;p&gt;Run the following from a root user:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo 1 &amp;gt; /sys/devices/system/cpu/intel_pstate/no_turbo
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Turn off CPU Cores&lt;/h3&gt;
&lt;p&gt;The more CPU cores that your laptop uses, the power it will draw. On higher end laptops you can see as big as a 75% savings and extend the battery life x3.&lt;/p&gt;
&lt;p&gt;Taking a CPU core offline (&lt;em&gt;Note: you can&apos;t offline cpu0&lt;/em&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo 0 &amp;gt; /sys/devices/system/cpu/cpu#/online
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To disable cores above 4 threads, run the following in a bash script:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for ((i=4;i&amp;lt;$(nproc);i++)); do echo 0 &amp;gt; /sys/devices/system/cpu/cpu$i/online; done
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Use CPULIMIT to Constrain Apps&lt;/h3&gt;
&lt;h4&gt;Install&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install cpulimit
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adjust EXEC commands in .desktop&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;cpulimit --limit 70 /usr/bin/google-chrome-bin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: This would limit CPU usage for Google Chrome to 70%&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Linux - adjust GPU power&lt;/h3&gt;
&lt;p&gt;There are two methods for adjusting the power usage your GPU uses. I personally use both depending on the laptop, but eGPU&apos;s will eat up a battery laptop in no time.&lt;/p&gt;
&lt;h4&gt;Manually adjust MHz of GPU&lt;/h4&gt;
&lt;p&gt;Set the following variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/sys/class/drm/card0/gt_max_freq_mhz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/sys/class/drm/card0/gt_boost_freq_mhz&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using cat to display current MHz and then simply echo the new lower value to these variables.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;1000&quot; &amp;gt; /sys/class/drm/card0/gt_max_freq_mhz
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Turning off GPU with Prime-select&lt;/h4&gt;
&lt;p&gt;While there are technically 3 options, I recommend only using NVIDIA and intel, as on-demand doesn&apos;t work very well.&lt;/p&gt;
&lt;h4&gt;Turning off GPU with Envycontrol&lt;/h4&gt;
&lt;p&gt;Cool python project that rebuilds the init system to exclude nvidia.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/geminis3/EnvyControl&quot;&gt;https://github.com/geminis3/EnvyControl&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Windows - GUI Power Management&lt;/h3&gt;
&lt;p&gt;Launch the GUI power panel with Start ⇾ Run &lt;code&gt;powercfg.cpl&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/laptop-power/win-power.webp&quot; alt=&quot;win-power&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Then change the Min / Max CPU Power. I typically set these to 5% Min and 50% Max, but on weaker laptops you can set these higher.&lt;/p&gt;
&lt;h3&gt;Windows - AutoHotkey Script&lt;/h3&gt;
&lt;p&gt;This script sets the max CPU state when plugged in to the wall (AC Power) and when it runs on battery (DC Power).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PowerWriteProcessorStateValueIndex(50, &quot;AC&quot;)
PowerWriteProcessorStateValueIndex(25, &quot;DC&quot;)
ExitApp

;---------------------
PowerWriteProcessorStateValueIndex(Max := &quot;&quot;, Mode := &quot;&quot;) {
 l:=PowerEnumeratePlans(ActivePlan), VarSetCapacity(GUID_ACTIVE_POWER_SAVING, 16, 0), VarSetCapacity(GUID_PROCESSOR_SETTINGS_SUBGROUP, 16, 0)
 , DllCall(&quot;Ole32.dll\CLSIDFromString&quot;, &quot;WStr&quot;, &quot;{&quot; ActivePlan.GUID &quot;}&quot;, &quot;Ptr&quot;, &amp;amp;GUID_ACTIVE_POWER_SAVING), VarSetCapacity(GUID_PROCESSOR_THROTTLE_MAXIMUM, 16, 0)
 , DllCall(&quot;Ole32.dll\CLSIDFromString&quot;, &quot;WStr&quot;, &quot;{54533251-82be-4824-96c1-47b60b740d00}&quot;, &quot;Ptr&quot;, &amp;amp;GUID_PROCESSOR_SETTINGS_SUBGROUP)
 , DllCall(&quot;Ole32.dll\CLSIDFromString&quot;, &quot;WStr&quot;, &quot;{BC5038F7-23E0-4960-96DA-33ABAF5935EC}&quot;, &quot;Ptr&quot;, &amp;amp;GUID_PROCESSOR_THROTTLE_MAXIMUM)
 , DllCall(&quot;PowrProf.dll\PowerWrite&quot; Mode &quot;ValueIndex&quot;, &quot;Ptr&quot;, 0, &quot;Ptr&quot;, &amp;amp;GUID_ACTIVE_POWER_SAVING
 , &quot;Ptr&quot;, &amp;amp;GUID_PROCESSOR_SETTINGS_SUBGROUP, &quot;Ptr&quot;, &amp;amp;GUID_PROCESSOR_THROTTLE_MAXIMUM, &quot;UInt&quot;, Max, &quot;UInt&quot;)
 for k, v in l
  if !(v.Default) {
   RunWait, % ComSpec &quot; /c powercfg /s &quot; v.GUID,, Hide
   break
  } RunWait, % ComSpec &quot; /c powercfg /s &quot; ActivePlan.GUID,, Hide
}

;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

;enumerates all power plans
;for k, v in PowerEnumeratePlans()
; MsgBox % &quot;#&quot; k &quot;`nGUID: &quot; v.GUID &quot;`Name: &quot; v.Name &quot;`nDefault?: &quot; v.Default
PowerEnumeratePlans(ByRef ActivePlan := &quot;&quot;) {
 List := {}
 for k, v in StrSplit(CMD(&quot;powercfg /l&quot;), &quot;:&quot;, A_Space A_Tab)
  if (A_Index&amp;gt;1) {
   Info := {}, Info.GUID := SubStr(Trim(v), 1, 36), Info.Default := !!InStr(v, &quot;*&quot;)
   , Info.Name := Trim(StrSplit(SubStr(v, InStr(v, &quot;(&quot;)+1), &quot;)&quot;)[1]), List.Push(Info)
   if (Info.Default)
    ActivePlan := Info
  } return List
}

;executes cmd command and return the result
CMD(CMD := &quot;&quot;, Encoding := &quot;UTF-8&quot;, ByRef ExitCode := &quot;&quot;) {
 DllCall(&quot;Kernel32.dll\CreatePipe&quot;, &quot;PtrP&quot;, hReadPipe, &quot;PtrP&quot;, hWritePipe, &quot;Ptr&quot;, 0, &quot;UInt&quot;, 0)
 , DllCall(&quot;Kernel32.dll\SetHandleInformation&quot;, &quot;Ptr&quot;, hWritePipe, &quot;UInt&quot;, 1, &quot;UInt&quot;, 1)
 , Size := VarSetCapacity(STARTUPINFO, A_PtrSize=4?68:104, 0), NumPut(Size, STARTUPINFO, 0, &quot;UInt&quot;)
    , NumPut(0x100, STARTUPINFO, A_PtrSize=4?44:60, &quot;UInt&quot;), NumPut(hStdInRd, STARTUPINFO, A_PtrSize=4?56:80, &quot;Ptr&quot;)
    , NumPut(hWritePipe, STARTUPINFO, A_PtrSize=4?60:88, &quot;Ptr&quot;), NumPut(hWritePipe, STARTUPINFO, A_PtrSize=4?64:96, &quot;Ptr&quot;)
 , pi := CreateProcess(, ComSpec &quot; /c &quot; CMD,,,, 0x08000000,,, &amp;amp;STARTUPINFO)
 , DllCall(&quot;Kernel32.dll\CloseHandle&quot;, &quot;Ptr&quot;, hWritePipe), Size := VarSetCapacity(Buff, 4095)
 while DllCall(&quot;Kernel32.dll\ReadFile&quot;, &quot;Ptr&quot;, hReadPipe, &quot;Ptr&quot;, &amp;amp;Buff, &quot;UInt&quot;, Size, &quot;PtrP&quot;, Bytes, &quot;Ptr&quot;, 0)
        OutputVar .= StrGet(&amp;amp;Buff, Bytes, Encoding)
 DllCall(&quot;Kernel32.dll\CloseHandle&quot;, &quot;Ptr&quot;, pi.handle), DllCall(&quot;Kernel32.dll\CloseHandle&quot;, &quot;Ptr&quot;, hReadPipe)
 return OutputVar, DllCall(&quot;Kernel32.dll\GetExitCodeProcess&quot;, &quot;Ptr&quot;, pi.handle, &quot;UIntP&quot;, ExitCode)
} CreateProcess(ApplicationName := &quot;&quot;, ByRef CommandLine := &quot;&quot;, ProcessAttributes := 0, ThreadAttributes := 0, InheritHandles := true, CreationFlags := 0x08000000, Environment := 0, CurrentDirectory := &quot;&quot;, StartupInfo := 0) {
 VarSetCapacity(PROCESS_INFORMATION, A_PtrSize=4?16:24, 0)
 , r := DllCall(&quot;Kernel32.dll\CreateProcess&quot;, &quot;Ptr&quot;, ApplicationName=&quot;&quot;?0:&amp;amp;ApplicationName, &quot;Ptr&quot;, CommandLine=&quot;&quot;?0:&amp;amp;CommandLine
 , &quot;Ptr&quot;, ProcessAttributes, &quot;Ptr&quot;, ThreadAttributes, &quot;Int&quot;, !!InheritHandles, &quot;UInt&quot;, CreationFlags, &quot;Ptr&quot;, Environment, &quot;Ptr&quot;, CurrentDirectory=&quot;&quot;?0:&amp;amp;CurrentDirectory
 , &quot;Ptr&quot;, StartupInfo, &quot;Ptr&quot;, &amp;amp;PROCESS_INFORMATION)
 return r?{HANDLE: NumGet(PROCESS_INFORMATION, 0, &quot;Ptr&quot;), hThread: NumGet(PROCESS_INFORMATION, A_PtrSize, &quot;Ptr&quot;)
 , ID: NumGet(PROCESS_INFORMATION, A_PtrSize=4?8:16, &quot;Ptr&quot;), ThreadID: NumGet(PROCESS_INFORMATION, A_PtrSize=4?12:24, &quot;Ptr&quot;)}:0, ErrorLevel := !r
}
&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/B1iRxoyT4EA&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, 26 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Power management is a critical thing to understand in laptops. It&apos;s possible to buy an expensive laptop and end up not using it because of bad power management practices.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1560314657142964224&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;Also, not taking care of the thermals on a laptop will lead to less laptop life, shorter battery, and unpleasant heat generation.&lt;/p&gt;
&lt;h2&gt;Cooling Pad&lt;/h2&gt;
&lt;p&gt;Get any cheap amazon cooling pad from amazon. Here is a decent $30 one with lots of reviews. &lt;a href=&quot;https://amzn.to/3SV0Y0l&quot;&gt;https://amzn.to/3SV0Y0l&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Redo Thermal Paste&lt;/h2&gt;
&lt;p&gt;By default, almost any and every laptop has excessive thermal compound which leads to higher temperatures. Simply removing the excess compound and apply just a drop of &quot;good&quot; thermal paste will drop temps by about 10 Celsius.&lt;/p&gt;
&lt;p&gt;Here is an example of excess factory thermal compound application:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/laptop-power/thermal.webp&quot; alt=&quot;termal&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Adjust Max CPU Frequency&lt;/h2&gt;
&lt;p&gt;Set your CPU governor to the maximum power it can use. I NEVER use a 100% of the CPU and in most instances rarely break above 50% of its total power. Typically, around 2 GHz is perfect for my day-to-day work. When working on battery, I put this down to 25% on a beefy laptop to conserve most of its power. On weaker laptops, you&apos;d probably double these numbers. 100% on AC Power and 50% on Battery.&lt;/p&gt;
&lt;h3&gt;Linux - cpupower&lt;/h3&gt;
&lt;h4&gt;Required Dependencies&lt;/h4&gt;
&lt;p&gt;Install the following packages&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cpupower&lt;/li&gt;
&lt;li&gt;acpi-support&lt;/li&gt;
&lt;li&gt;acpid&lt;/li&gt;
&lt;li&gt;acpi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example Install:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt-get install acpi-support acpid acpi linux-cpupower cpufrequtils
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Setting Min/Max Power Example&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;cpupower frequency-set -g powersave -d 0.8G -u 1.2G
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Check Frequency&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;cpufreq-info
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Disable Turbo&lt;/h3&gt;
&lt;p&gt;Turbo will draw more power and reduce battery life while increasing CPU temperature.&lt;/p&gt;
&lt;p&gt;Run the following from a root user:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo 1 &amp;gt; /sys/devices/system/cpu/intel_pstate/no_turbo
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Turn off CPU Cores&lt;/h3&gt;
&lt;p&gt;The more CPU cores that your laptop uses, the power it will draw. On higher end laptops you can see as big as a 75% savings and extend the battery life x3.&lt;/p&gt;
&lt;p&gt;Taking a CPU core offline (&lt;em&gt;Note: you can&apos;t offline cpu0&lt;/em&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo 0 &amp;gt; /sys/devices/system/cpu/cpu#/online
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To disable cores above 4 threads, run the following in a bash script:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;for ((i=4;i&amp;lt;$(nproc);i++)); do echo 0 &amp;gt; /sys/devices/system/cpu/cpu$i/online; done
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Use CPULIMIT to Constrain Apps&lt;/h3&gt;
&lt;h4&gt;Install&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install cpulimit
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adjust EXEC commands in .desktop&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;cpulimit --limit 70 /usr/bin/google-chrome-bin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: This would limit CPU usage for Google Chrome to 70%&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Linux - adjust GPU power&lt;/h3&gt;
&lt;p&gt;There are two methods for adjusting the power usage your GPU uses. I personally use both depending on the laptop, but eGPU&apos;s will eat up a battery laptop in no time.&lt;/p&gt;
&lt;h4&gt;Manually adjust MHz of GPU&lt;/h4&gt;
&lt;p&gt;Set the following variables:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/sys/class/drm/card0/gt_max_freq_mhz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/sys/class/drm/card0/gt_boost_freq_mhz&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using cat to display current MHz and then simply echo the new lower value to these variables.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;1000&quot; &amp;gt; /sys/class/drm/card0/gt_max_freq_mhz
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Turning off GPU with Prime-select&lt;/h4&gt;
&lt;p&gt;While there are technically 3 options, I recommend only using NVIDIA and intel, as on-demand doesn&apos;t work very well.&lt;/p&gt;
&lt;h4&gt;Turning off GPU with Envycontrol&lt;/h4&gt;
&lt;p&gt;Cool python project that rebuilds the init system to exclude nvidia.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/geminis3/EnvyControl&quot;&gt;https://github.com/geminis3/EnvyControl&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Windows - GUI Power Management&lt;/h3&gt;
&lt;p&gt;Launch the GUI power panel with Start ⇾ Run &lt;code&gt;powercfg.cpl&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/laptop-power/win-power.webp&quot; alt=&quot;win-power&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Then change the Min / Max CPU Power. I typically set these to 5% Min and 50% Max, but on weaker laptops you can set these higher.&lt;/p&gt;
&lt;h3&gt;Windows - AutoHotkey Script&lt;/h3&gt;
&lt;p&gt;This script sets the max CPU state when plugged in to the wall (AC Power) and when it runs on battery (DC Power).&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PowerWriteProcessorStateValueIndex(50, &quot;AC&quot;)
PowerWriteProcessorStateValueIndex(25, &quot;DC&quot;)
ExitApp

;---------------------
PowerWriteProcessorStateValueIndex(Max := &quot;&quot;, Mode := &quot;&quot;) {
 l:=PowerEnumeratePlans(ActivePlan), VarSetCapacity(GUID_ACTIVE_POWER_SAVING, 16, 0), VarSetCapacity(GUID_PROCESSOR_SETTINGS_SUBGROUP, 16, 0)
 , DllCall(&quot;Ole32.dll\CLSIDFromString&quot;, &quot;WStr&quot;, &quot;{&quot; ActivePlan.GUID &quot;}&quot;, &quot;Ptr&quot;, &amp;amp;GUID_ACTIVE_POWER_SAVING), VarSetCapacity(GUID_PROCESSOR_THROTTLE_MAXIMUM, 16, 0)
 , DllCall(&quot;Ole32.dll\CLSIDFromString&quot;, &quot;WStr&quot;, &quot;{54533251-82be-4824-96c1-47b60b740d00}&quot;, &quot;Ptr&quot;, &amp;amp;GUID_PROCESSOR_SETTINGS_SUBGROUP)
 , DllCall(&quot;Ole32.dll\CLSIDFromString&quot;, &quot;WStr&quot;, &quot;{BC5038F7-23E0-4960-96DA-33ABAF5935EC}&quot;, &quot;Ptr&quot;, &amp;amp;GUID_PROCESSOR_THROTTLE_MAXIMUM)
 , DllCall(&quot;PowrProf.dll\PowerWrite&quot; Mode &quot;ValueIndex&quot;, &quot;Ptr&quot;, 0, &quot;Ptr&quot;, &amp;amp;GUID_ACTIVE_POWER_SAVING
 , &quot;Ptr&quot;, &amp;amp;GUID_PROCESSOR_SETTINGS_SUBGROUP, &quot;Ptr&quot;, &amp;amp;GUID_PROCESSOR_THROTTLE_MAXIMUM, &quot;UInt&quot;, Max, &quot;UInt&quot;)
 for k, v in l
  if !(v.Default) {
   RunWait, % ComSpec &quot; /c powercfg /s &quot; v.GUID,, Hide
   break
  } RunWait, % ComSpec &quot; /c powercfg /s &quot; ActivePlan.GUID,, Hide
}

;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

;enumerates all power plans
;for k, v in PowerEnumeratePlans()
; MsgBox % &quot;#&quot; k &quot;`nGUID: &quot; v.GUID &quot;`Name: &quot; v.Name &quot;`nDefault?: &quot; v.Default
PowerEnumeratePlans(ByRef ActivePlan := &quot;&quot;) {
 List := {}
 for k, v in StrSplit(CMD(&quot;powercfg /l&quot;), &quot;:&quot;, A_Space A_Tab)
  if (A_Index&amp;gt;1) {
   Info := {}, Info.GUID := SubStr(Trim(v), 1, 36), Info.Default := !!InStr(v, &quot;*&quot;)
   , Info.Name := Trim(StrSplit(SubStr(v, InStr(v, &quot;(&quot;)+1), &quot;)&quot;)[1]), List.Push(Info)
   if (Info.Default)
    ActivePlan := Info
  } return List
}

;executes cmd command and return the result
CMD(CMD := &quot;&quot;, Encoding := &quot;UTF-8&quot;, ByRef ExitCode := &quot;&quot;) {
 DllCall(&quot;Kernel32.dll\CreatePipe&quot;, &quot;PtrP&quot;, hReadPipe, &quot;PtrP&quot;, hWritePipe, &quot;Ptr&quot;, 0, &quot;UInt&quot;, 0)
 , DllCall(&quot;Kernel32.dll\SetHandleInformation&quot;, &quot;Ptr&quot;, hWritePipe, &quot;UInt&quot;, 1, &quot;UInt&quot;, 1)
 , Size := VarSetCapacity(STARTUPINFO, A_PtrSize=4?68:104, 0), NumPut(Size, STARTUPINFO, 0, &quot;UInt&quot;)
    , NumPut(0x100, STARTUPINFO, A_PtrSize=4?44:60, &quot;UInt&quot;), NumPut(hStdInRd, STARTUPINFO, A_PtrSize=4?56:80, &quot;Ptr&quot;)
    , NumPut(hWritePipe, STARTUPINFO, A_PtrSize=4?60:88, &quot;Ptr&quot;), NumPut(hWritePipe, STARTUPINFO, A_PtrSize=4?64:96, &quot;Ptr&quot;)
 , pi := CreateProcess(, ComSpec &quot; /c &quot; CMD,,,, 0x08000000,,, &amp;amp;STARTUPINFO)
 , DllCall(&quot;Kernel32.dll\CloseHandle&quot;, &quot;Ptr&quot;, hWritePipe), Size := VarSetCapacity(Buff, 4095)
 while DllCall(&quot;Kernel32.dll\ReadFile&quot;, &quot;Ptr&quot;, hReadPipe, &quot;Ptr&quot;, &amp;amp;Buff, &quot;UInt&quot;, Size, &quot;PtrP&quot;, Bytes, &quot;Ptr&quot;, 0)
        OutputVar .= StrGet(&amp;amp;Buff, Bytes, Encoding)
 DllCall(&quot;Kernel32.dll\CloseHandle&quot;, &quot;Ptr&quot;, pi.handle), DllCall(&quot;Kernel32.dll\CloseHandle&quot;, &quot;Ptr&quot;, hReadPipe)
 return OutputVar, DllCall(&quot;Kernel32.dll\GetExitCodeProcess&quot;, &quot;Ptr&quot;, pi.handle, &quot;UIntP&quot;, ExitCode)
} CreateProcess(ApplicationName := &quot;&quot;, ByRef CommandLine := &quot;&quot;, ProcessAttributes := 0, ThreadAttributes := 0, InheritHandles := true, CreationFlags := 0x08000000, Environment := 0, CurrentDirectory := &quot;&quot;, StartupInfo := 0) {
 VarSetCapacity(PROCESS_INFORMATION, A_PtrSize=4?16:24, 0)
 , r := DllCall(&quot;Kernel32.dll\CreateProcess&quot;, &quot;Ptr&quot;, ApplicationName=&quot;&quot;?0:&amp;amp;ApplicationName, &quot;Ptr&quot;, CommandLine=&quot;&quot;?0:&amp;amp;CommandLine
 , &quot;Ptr&quot;, ProcessAttributes, &quot;Ptr&quot;, ThreadAttributes, &quot;Int&quot;, !!InheritHandles, &quot;UInt&quot;, CreationFlags, &quot;Ptr&quot;, Environment, &quot;Ptr&quot;, CurrentDirectory=&quot;&quot;?0:&amp;amp;CurrentDirectory
 , &quot;Ptr&quot;, StartupInfo, &quot;Ptr&quot;, &amp;amp;PROCESS_INFORMATION)
 return r?{HANDLE: NumGet(PROCESS_INFORMATION, 0, &quot;Ptr&quot;), hThread: NumGet(PROCESS_INFORMATION, A_PtrSize, &quot;Ptr&quot;)
 , ID: NumGet(PROCESS_INFORMATION, A_PtrSize=4?8:16, &quot;Ptr&quot;), ThreadID: NumGet(PROCESS_INFORMATION, A_PtrSize=4?12:24, &quot;Ptr&quot;)}:0, ErrorLevel := !r
}
&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/B1iRxoyT4EA&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>Save HOURS of work with Regex</title><link>https://christitus.com/regex/</link><guid isPermaLink="true">https://christitus.com/regex/</guid><description>&lt;p&gt;RegEx is a formidable tool that many just don&apos;t understand, but can save literally thousands of hours of work.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1553598175314845697&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;However, for many years I just couldn&apos;t be bothered to learn anything beside the basics &lt;code&gt;.*&lt;/code&gt; or &lt;code&gt;[a-z]&lt;/code&gt;. I just had a project pop up where I&apos;d have to spend hours finding and replacing a complex markdown line I was using to pull images and a video link. The solution was painfully obvious... either I get better with RegEx or spend hours finding and replacing text in hundreds of posts.&lt;/p&gt;
&lt;h2&gt;Understanding RegEx&lt;/h2&gt;
&lt;p&gt;Learning all the syntax for RegEx is not happening for me and probably many others. There is a solution for this and you don&apos;t need to... &lt;a href=&quot;https://regexr.com/&quot;&gt;https://regexr.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/regex/text-example.webp&quot; alt=&quot;text-example&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Now that you have an explainer of all the syntax and cheat sheet. We just need to know a few basic features of RegEx, so you can perfect the pattern that you need. Also, the need to understand groups and variables will make the find and replace much more powerful.&lt;/p&gt;
&lt;h2&gt;Making the Perfect Pattern&lt;/h2&gt;
&lt;p&gt;With our test example on &lt;a href=&quot;http://regexr.com&quot;&gt;regexr.com&lt;/a&gt; we can test our pattern to make sure we match exactly what we need. Now normally a guide would start talking about &lt;code&gt;.*&lt;/code&gt; and other match characters, but frankly any site like regexr or &lt;a href=&quot;http://regex101.com&quot;&gt;regex101.com&lt;/a&gt;, will have those laid out for you.&lt;/p&gt;
&lt;p&gt;Instead, let&apos;s talk about escaping characters and how to match weird expressions that have syntax like &lt;code&gt;[,(,+,?&lt;/code&gt; and more. All these can really mess up matching your pattern. So you need to &lt;em&gt;escape&lt;/em&gt; the with a &lt;code&gt;\&lt;/code&gt; before the symbol, so it would look something like this &lt;code&gt;\[blah\]&lt;/code&gt; this is regex speak for &lt;code&gt;[blah]&lt;/code&gt; the escaping character makes it actually register the bracket or parenthesis. Without it, it will probably just give you some syntax error.&lt;/p&gt;
&lt;p&gt;The websites I gave above are perfect for pointing out flaws in your pattern or maybe you missed escaping that + sign or question mark. It&apos;s why having these syntax sites available is vital.&lt;/p&gt;
&lt;h2&gt;Selection Groups&lt;/h2&gt;
&lt;p&gt;Now that you understand how to match things with RegEx you can wipe out things with ease, but what about saving that bit of the match you need?&lt;/p&gt;
&lt;p&gt;Example (I want to save youtube video id):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;img.youtube.com/vi/0q3rGKIMZg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Using this Regex will clean it up and save the id using the selection group.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.*vi\/(.*)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will match and SELECT everything after &lt;code&gt;vi/&lt;/code&gt;  with &lt;code&gt;(.*)&lt;/code&gt; in the string, where &lt;code&gt;.*vi\/&lt;/code&gt; matches &lt;code&gt;img.youtube.com/vi/&lt;/code&gt;. The value &lt;code&gt;0q3rGKIMZg&lt;/code&gt; will be stored in &lt;code&gt;$1&lt;/code&gt; which is the first selection group. If you do multiple &lt;code&gt;()&lt;/code&gt; selections the second one would be &lt;code&gt;$2&lt;/code&gt; and so on.&lt;/p&gt;
&lt;p&gt;Example new format from old &lt;code&gt;{{ youtube 0q3rGKIMZg }}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The replace field would simply be &lt;code&gt;{{ youtube $1 }}&lt;/code&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/uwtPH6owqZA&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, 05 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;RegEx is a formidable tool that many just don&apos;t understand, but can save literally thousands of hours of work.&lt;/p&gt;

&lt;blockquote class=&quot;x-embed&quot;&gt;&lt;a href=&quot;https://x.com/christitustech/status/1553598175314845697&quot;&gt;View post by @christitustech on X&lt;/a&gt;&lt;/blockquote&gt;
&lt;p&gt;However, for many years I just couldn&apos;t be bothered to learn anything beside the basics &lt;code&gt;.*&lt;/code&gt; or &lt;code&gt;[a-z]&lt;/code&gt;. I just had a project pop up where I&apos;d have to spend hours finding and replacing a complex markdown line I was using to pull images and a video link. The solution was painfully obvious... either I get better with RegEx or spend hours finding and replacing text in hundreds of posts.&lt;/p&gt;
&lt;h2&gt;Understanding RegEx&lt;/h2&gt;
&lt;p&gt;Learning all the syntax for RegEx is not happening for me and probably many others. There is a solution for this and you don&apos;t need to... &lt;a href=&quot;https://regexr.com/&quot;&gt;https://regexr.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/regex/text-example.webp&quot; alt=&quot;text-example&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Now that you have an explainer of all the syntax and cheat sheet. We just need to know a few basic features of RegEx, so you can perfect the pattern that you need. Also, the need to understand groups and variables will make the find and replace much more powerful.&lt;/p&gt;
&lt;h2&gt;Making the Perfect Pattern&lt;/h2&gt;
&lt;p&gt;With our test example on &lt;a href=&quot;http://regexr.com&quot;&gt;regexr.com&lt;/a&gt; we can test our pattern to make sure we match exactly what we need. Now normally a guide would start talking about &lt;code&gt;.*&lt;/code&gt; and other match characters, but frankly any site like regexr or &lt;a href=&quot;http://regex101.com&quot;&gt;regex101.com&lt;/a&gt;, will have those laid out for you.&lt;/p&gt;
&lt;p&gt;Instead, let&apos;s talk about escaping characters and how to match weird expressions that have syntax like &lt;code&gt;[,(,+,?&lt;/code&gt; and more. All these can really mess up matching your pattern. So you need to &lt;em&gt;escape&lt;/em&gt; the with a &lt;code&gt;\&lt;/code&gt; before the symbol, so it would look something like this &lt;code&gt;\[blah\]&lt;/code&gt; this is regex speak for &lt;code&gt;[blah]&lt;/code&gt; the escaping character makes it actually register the bracket or parenthesis. Without it, it will probably just give you some syntax error.&lt;/p&gt;
&lt;p&gt;The websites I gave above are perfect for pointing out flaws in your pattern or maybe you missed escaping that + sign or question mark. It&apos;s why having these syntax sites available is vital.&lt;/p&gt;
&lt;h2&gt;Selection Groups&lt;/h2&gt;
&lt;p&gt;Now that you understand how to match things with RegEx you can wipe out things with ease, but what about saving that bit of the match you need?&lt;/p&gt;
&lt;p&gt;Example (I want to save youtube video id):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;img.youtube.com/vi/0q3rGKIMZg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Using this Regex will clean it up and save the id using the selection group.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;.*vi\/(.*)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will match and SELECT everything after &lt;code&gt;vi/&lt;/code&gt;  with &lt;code&gt;(.*)&lt;/code&gt; in the string, where &lt;code&gt;.*vi\/&lt;/code&gt; matches &lt;code&gt;img.youtube.com/vi/&lt;/code&gt;. The value &lt;code&gt;0q3rGKIMZg&lt;/code&gt; will be stored in &lt;code&gt;$1&lt;/code&gt; which is the first selection group. If you do multiple &lt;code&gt;()&lt;/code&gt; selections the second one would be &lt;code&gt;$2&lt;/code&gt; and so on.&lt;/p&gt;
&lt;p&gt;Example new format from old &lt;code&gt;{{ youtube 0q3rGKIMZg }}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The replace field would simply be &lt;code&gt;{{ youtube $1 }}&lt;/code&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/uwtPH6owqZA&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 3 Biggest Security Mistakes Linux Users Make</title><link>https://christitus.com/linux-security-mistakes/</link><guid isPermaLink="true">https://christitus.com/linux-security-mistakes/</guid><description>&lt;p&gt;Security is a journey, not a destination&lt;/p&gt;

&lt;p&gt;So after making a couple videos showing how to increase performance in desktop computers running Linux, I was overwhelmed by the sheer scale of comments worried about mitigations. If you are worried about that, you should be even more worried about the things below.&lt;/p&gt;
&lt;p&gt;Here are the 3 biggest things I see wrong in Linux installs that can easily be exploited or lead to massive problems. I&apos;m choosing some of the worst offenders from the basic security layers an attacker goes through.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/linux-security-mistakes/basic-layers.webp&quot; alt=&quot;basic-layers&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Network Level - Not using a Firewall&lt;/h2&gt;
&lt;p&gt;Managing a firewall on a system can be a monumental task, but one of the most important is managing the traffic coming to and from your computer. The best packages for this in Linux is &lt;code&gt;ufw&lt;/code&gt; and &lt;code&gt;fail2ban&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;UFW&lt;/h3&gt;
&lt;p&gt;Uncomplicated Firewall is easy to setup and understand. It blocks traffic and allows it.&lt;/p&gt;
&lt;h4&gt;Install UFW&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install ufw
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;My recommended Rules&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw limit 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Fail2Ban&lt;/h3&gt;
&lt;p&gt;Fail2Ban is one of the best programs that is installed in every single Linux server I have EVER installed. This program is a intrusion prevention utility. Most install it, but forget to configure and use it. These are the settings I like to use.&lt;/p&gt;
&lt;h4&gt;Installing Fail2Ban&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;My Fail2Ban Settings File&lt;/h4&gt;
&lt;p&gt;Fail2Ban by default doesn&apos;t really do much unless you adjust the settings file. Here is mine, but feel free to change it to your needs.&lt;/p&gt;
&lt;p&gt;All configuration files are in &lt;code&gt;/etc/fail2ban&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Configuration file examples and defaults are in two main files &lt;code&gt;/etc/fail2ban/fail2ban.conf&lt;/code&gt; and &lt;code&gt;/etc/fail2ban/jail.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;My Config - &lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now in more complex service environments I would generally start adding services and programs like &lt;code&gt;ssh-jail.conf&lt;/code&gt; to the &lt;code&gt;/etc/fail2ban/jail.d/&lt;/code&gt; directory. Any program that hackers use is typically always under watch, like WordPress installs for example:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/fail2ban/jail.d/wordpress.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/auth.log
maxretry = 3
port = http,https
bantime = 300
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Enabling Fail2Ban&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl enable fail2ban
sudo systemctl start fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Operating System Level - Adding Repositories&lt;/h2&gt;
&lt;p&gt;Too many times do I see people installing and using 10+ repositories on a Linux install. Obviously, adding repositories to get the programs you want on your system is something you will do. However, there is a hierarchy to these repositories and if you just blindly trust and import all the keys to the repositories, they can and will override packages from the base distribution. This isn&apos;t good and can lead to security issues or even break your system. I&apos;d highly recommend putting a priority on these, so it will only use them when the package doesn&apos;t exist in that base repo.&lt;/p&gt;
&lt;p&gt;If you don&apos;t use any priority, often times the package you want from the added repo is installed and updated, but sometimes they add OTHER packages in that repo that will also overwrite existing packages, which can lead to some undesired results.&lt;/p&gt;
&lt;h3&gt;Prioritizing Repositories&lt;/h3&gt;
&lt;p&gt;Official documentation for APT (Debian) - &lt;a href=&quot;https://wiki.debian.org/DebianRepository/UseThirdParty&quot;&gt;https://wiki.debian.org/DebianRepository/UseThirdParty&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All priority preference files are stored in the &lt;code&gt;/etc/apt/preferences.d/&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Example: &lt;code&gt;volian.pref&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Package: *
Pin: origin deb.volian.org
Pin-Priority: 100
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Set specific packages to only install with the &lt;code&gt;Package: *&lt;/code&gt; Line&lt;/li&gt;
&lt;li&gt;Pin: Origin is the address of the repo&lt;/li&gt;
&lt;li&gt;Pin-Priority is generally 100 which means it will update packages NOT in base repos.
&lt;ul&gt;
&lt;li&gt;1 = do not auto update&lt;/li&gt;
&lt;li&gt;100 = update if not in other repos&lt;/li&gt;
&lt;li&gt;over 100 = overwrite base repos&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Arch doesn&apos;t have any priorities in pacman that I can find, but most are building from source with limited 3rd party repositories. Building from source presents even more dangers for those that are blindly installing programs through the AUR.&lt;/p&gt;
&lt;h2&gt;Application Level - Not using AppArmor or SELinux&lt;/h2&gt;
&lt;p&gt;Most Linux distributions have one of these installed by default, but there is one major one that most forget. Arch Linux. A lot of install scripts forget apparmor and SELinux is too complex for many to install. These programs do one massive security feature that many just don&apos;t realize. They can sandbox and limit program access even when they get elevated. If an application profile doesn&apos;t exist, they typically limit its access to the home folder and limit hardware access. You can customize application profiles to expand or limit access as needed. Without having either of the programs installed, you are putting yourself at risk.&lt;/p&gt;
&lt;p&gt;However, just the simple act of installing these programs often leads to them being used or setup. They typically are set up to be in complain mode for AppArmor or permissive mode for SELinux. While these are fine for logging and adding some security, it normally would NOT stop the program doing damage.&lt;/p&gt;
&lt;p&gt;I&apos;ve set these up in server environments and it is not trivial to do or maintain. Most, if not all, Linux desktops don&apos;t bother with setting these to enforce mode and blocking programs that don&apos;t comply to their application profile. This requires the end user to have knowledge of how to set up profiles and generate them when they are missing, so the programs will work correctly.&lt;/p&gt;
&lt;p&gt;To learn more about using them:
AppArmor Documentation &lt;a href=&quot;https://gitlab.com/apparmor/apparmor/-/wikis/Documentation&quot;&gt;https://gitlab.com/apparmor/apparmor/-/wikis/Documentation&lt;/a&gt;
SELinux Documentation &lt;a href=&quot;https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index&quot;&gt;https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index&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/QxNsyrftJ8I&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, 03 Aug 2022 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Security is a journey, not a destination&lt;/p&gt;

&lt;p&gt;So after making a couple videos showing how to increase performance in desktop computers running Linux, I was overwhelmed by the sheer scale of comments worried about mitigations. If you are worried about that, you should be even more worried about the things below.&lt;/p&gt;
&lt;p&gt;Here are the 3 biggest things I see wrong in Linux installs that can easily be exploited or lead to massive problems. I&apos;m choosing some of the worst offenders from the basic security layers an attacker goes through.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/linux-security-mistakes/basic-layers.webp&quot; alt=&quot;basic-layers&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Network Level - Not using a Firewall&lt;/h2&gt;
&lt;p&gt;Managing a firewall on a system can be a monumental task, but one of the most important is managing the traffic coming to and from your computer. The best packages for this in Linux is &lt;code&gt;ufw&lt;/code&gt; and &lt;code&gt;fail2ban&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;UFW&lt;/h3&gt;
&lt;p&gt;Uncomplicated Firewall is easy to setup and understand. It blocks traffic and allows it.&lt;/p&gt;
&lt;h4&gt;Install UFW&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install ufw
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;My recommended Rules&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw limit 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Fail2Ban&lt;/h3&gt;
&lt;p&gt;Fail2Ban is one of the best programs that is installed in every single Linux server I have EVER installed. This program is a intrusion prevention utility. Most install it, but forget to configure and use it. These are the settings I like to use.&lt;/p&gt;
&lt;h4&gt;Installing Fail2Ban&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;My Fail2Ban Settings File&lt;/h4&gt;
&lt;p&gt;Fail2Ban by default doesn&apos;t really do much unless you adjust the settings file. Here is mine, but feel free to change it to your needs.&lt;/p&gt;
&lt;p&gt;All configuration files are in &lt;code&gt;/etc/fail2ban&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Configuration file examples and defaults are in two main files &lt;code&gt;/etc/fail2ban/fail2ban.conf&lt;/code&gt; and &lt;code&gt;/etc/fail2ban/jail.conf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;My Config - &lt;code&gt;/etc/fail2ban/jail.local&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now in more complex service environments I would generally start adding services and programs like &lt;code&gt;ssh-jail.conf&lt;/code&gt; to the &lt;code&gt;/etc/fail2ban/jail.d/&lt;/code&gt; directory. Any program that hackers use is typically always under watch, like WordPress installs for example:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/fail2ban/jail.d/wordpress.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[wordpress]
enabled = true
filter = wordpress
logpath = /var/log/auth.log
maxretry = 3
port = http,https
bantime = 300
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Enabling Fail2Ban&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl enable fail2ban
sudo systemctl start fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Operating System Level - Adding Repositories&lt;/h2&gt;
&lt;p&gt;Too many times do I see people installing and using 10+ repositories on a Linux install. Obviously, adding repositories to get the programs you want on your system is something you will do. However, there is a hierarchy to these repositories and if you just blindly trust and import all the keys to the repositories, they can and will override packages from the base distribution. This isn&apos;t good and can lead to security issues or even break your system. I&apos;d highly recommend putting a priority on these, so it will only use them when the package doesn&apos;t exist in that base repo.&lt;/p&gt;
&lt;p&gt;If you don&apos;t use any priority, often times the package you want from the added repo is installed and updated, but sometimes they add OTHER packages in that repo that will also overwrite existing packages, which can lead to some undesired results.&lt;/p&gt;
&lt;h3&gt;Prioritizing Repositories&lt;/h3&gt;
&lt;p&gt;Official documentation for APT (Debian) - &lt;a href=&quot;https://wiki.debian.org/DebianRepository/UseThirdParty&quot;&gt;https://wiki.debian.org/DebianRepository/UseThirdParty&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All priority preference files are stored in the &lt;code&gt;/etc/apt/preferences.d/&lt;/code&gt; directory.&lt;/p&gt;
&lt;p&gt;Example: &lt;code&gt;volian.pref&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Package: *
Pin: origin deb.volian.org
Pin-Priority: 100
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Set specific packages to only install with the &lt;code&gt;Package: *&lt;/code&gt; Line&lt;/li&gt;
&lt;li&gt;Pin: Origin is the address of the repo&lt;/li&gt;
&lt;li&gt;Pin-Priority is generally 100 which means it will update packages NOT in base repos.
&lt;ul&gt;
&lt;li&gt;1 = do not auto update&lt;/li&gt;
&lt;li&gt;100 = update if not in other repos&lt;/li&gt;
&lt;li&gt;over 100 = overwrite base repos&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Arch doesn&apos;t have any priorities in pacman that I can find, but most are building from source with limited 3rd party repositories. Building from source presents even more dangers for those that are blindly installing programs through the AUR.&lt;/p&gt;
&lt;h2&gt;Application Level - Not using AppArmor or SELinux&lt;/h2&gt;
&lt;p&gt;Most Linux distributions have one of these installed by default, but there is one major one that most forget. Arch Linux. A lot of install scripts forget apparmor and SELinux is too complex for many to install. These programs do one massive security feature that many just don&apos;t realize. They can sandbox and limit program access even when they get elevated. If an application profile doesn&apos;t exist, they typically limit its access to the home folder and limit hardware access. You can customize application profiles to expand or limit access as needed. Without having either of the programs installed, you are putting yourself at risk.&lt;/p&gt;
&lt;p&gt;However, just the simple act of installing these programs often leads to them being used or setup. They typically are set up to be in complain mode for AppArmor or permissive mode for SELinux. While these are fine for logging and adding some security, it normally would NOT stop the program doing damage.&lt;/p&gt;
&lt;p&gt;I&apos;ve set these up in server environments and it is not trivial to do or maintain. Most, if not all, Linux desktops don&apos;t bother with setting these to enforce mode and blocking programs that don&apos;t comply to their application profile. This requires the end user to have knowledge of how to set up profiles and generate them when they are missing, so the programs will work correctly.&lt;/p&gt;
&lt;p&gt;To learn more about using them:
AppArmor Documentation &lt;a href=&quot;https://gitlab.com/apparmor/apparmor/-/wikis/Documentation&quot;&gt;https://gitlab.com/apparmor/apparmor/-/wikis/Documentation&lt;/a&gt;
SELinux Documentation &lt;a href=&quot;https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index&quot;&gt;https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index&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/QxNsyrftJ8I&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>Shrink VMWare VMDK File</title><link>https://christitus.com/shrink-vmware-vmdk/</link><guid isPermaLink="true">https://christitus.com/shrink-vmware-vmdk/</guid><description>&lt;p&gt;This goes over reducing the size of a VMDK file using open-vm-tools and is used often in VMWare environments.&lt;/p&gt;

&lt;h2&gt;Tools Needed&lt;/h2&gt;
&lt;p&gt;I&apos;d recommend VMWare Workstation Pro, but you can get away with just using player if you don&apos;t have a license.&lt;/p&gt;
&lt;p&gt;Inside the Guest (Virtual Machine) you need to install &lt;code&gt;open-vm-tools&lt;/code&gt; on Linux which should be in the base repository for most main distributions.&lt;/p&gt;
&lt;h2&gt;Shrinking VMDK&lt;/h2&gt;
&lt;h3&gt;On Guest&lt;/h3&gt;
&lt;p&gt;These are done on the GUEST (Inside Virtual Machine)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vmware-toolbox-cmd disk shrink /
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are want to shrink a Windows Guest you need to install VMWare-Tools inside the VM. After the tools are installed, simply click the following in VMWare Workstation &lt;code&gt;VM Tab -&amp;gt; Manage -&amp;gt; Clean up Disks&lt;/code&gt; (Windows ONLY)&lt;/p&gt;
&lt;h3&gt;On Host&lt;/h3&gt;
&lt;p&gt;From inside your VMWare Workstation install you will find the following program &lt;code&gt;vmware-vdiskmanager&lt;/code&gt; this is where we finalize the vmdk by defragmenting it and doing the final shrink.&lt;/p&gt;
&lt;h4&gt;Defrag&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;vmware-vdiskmanager.exe -d /path/to/shrink.vmdk
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Final Shrink&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;vmware-vdiskmanager.exe -k /path/to/shrink.vmdk
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Example&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/vmware-vdisk.webp&quot; alt=&quot;vdisk&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Still Too Big?&lt;/h2&gt;
&lt;p&gt;If it is still too large, you can simply export the VM to OVF format inside VMWare Workstation. This will create a new vmdk file that will be considerably smaller. OVF is pretty easy to move to VirtualBox and other VM platforms as well.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;export to ovf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/vmware-ovf.webp&quot; alt=&quot;ovf&quot; /&gt;&lt;/p&gt;
</description><pubDate>Sat, 30 Jul 2022 18:40:50 GMT</pubDate><content:encoded>&lt;p&gt;This goes over reducing the size of a VMDK file using open-vm-tools and is used often in VMWare environments.&lt;/p&gt;

&lt;h2&gt;Tools Needed&lt;/h2&gt;
&lt;p&gt;I&apos;d recommend VMWare Workstation Pro, but you can get away with just using player if you don&apos;t have a license.&lt;/p&gt;
&lt;p&gt;Inside the Guest (Virtual Machine) you need to install &lt;code&gt;open-vm-tools&lt;/code&gt; on Linux which should be in the base repository for most main distributions.&lt;/p&gt;
&lt;h2&gt;Shrinking VMDK&lt;/h2&gt;
&lt;h3&gt;On Guest&lt;/h3&gt;
&lt;p&gt;These are done on the GUEST (Inside Virtual Machine)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vmware-toolbox-cmd disk shrink /
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are want to shrink a Windows Guest you need to install VMWare-Tools inside the VM. After the tools are installed, simply click the following in VMWare Workstation &lt;code&gt;VM Tab -&amp;gt; Manage -&amp;gt; Clean up Disks&lt;/code&gt; (Windows ONLY)&lt;/p&gt;
&lt;h3&gt;On Host&lt;/h3&gt;
&lt;p&gt;From inside your VMWare Workstation install you will find the following program &lt;code&gt;vmware-vdiskmanager&lt;/code&gt; this is where we finalize the vmdk by defragmenting it and doing the final shrink.&lt;/p&gt;
&lt;h4&gt;Defrag&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;vmware-vdiskmanager.exe -d /path/to/shrink.vmdk
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Final Shrink&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;vmware-vdiskmanager.exe -k /path/to/shrink.vmdk
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Example&lt;/h4&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/vmware-vdisk.webp&quot; alt=&quot;vdisk&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Still Too Big?&lt;/h2&gt;
&lt;p&gt;If it is still too large, you can simply export the VM to OVF format inside VMWare Workstation. This will create a new vmdk file that will be considerably smaller. OVF is pretty easy to move to VirtualBox and other VM platforms as well.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;export to ovf&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/vmware-ovf.webp&quot; alt=&quot;ovf&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Unlock Steam Deck</title><link>https://christitus.com/unlock-steam-deck/</link><guid isPermaLink="true">https://christitus.com/unlock-steam-deck/</guid><description>&lt;p&gt;This article shows you how to make the steamdeck writable and a full blown desktop that you can install apps on that aren&apos;t Flatpak, AppImage, or Snaps. Simply use &lt;code&gt;yay -S packagename&lt;/code&gt; to install the app of your choice.&lt;/p&gt;

&lt;h2&gt;Make Desktop Usable with password&lt;/h2&gt;
&lt;p&gt;set user password with &lt;code&gt;passwd&lt;/code&gt; which then allows the use of sudo and various commands. By default the deck user comes with NO PASSWORD! without setting the user password you can NOT use &lt;code&gt;sudo&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Making the steamdeck writable&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo steamos-readonly disable
echo &quot;keyserver hkps://keyserver.ubuntu.com&quot; &amp;gt;&amp;gt; /etc/pacman.d/gnupg/gpg.conf
sudo pacman-key --init
sudo pacman-key --populate
sudo pacman-key --refresh-keys
yay -S base-devel
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Signing Issues - Package Installs&lt;/h2&gt;
&lt;p&gt;The repositories for holo and steam deck are very interesting. Here are the base repos and what it is using.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/pacman/mirrrorlist&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The main issue is the gnupg signing is completely messed up and often fails when installing packages. This is because the core archlinux-keyring is badly out of date and it will show that any package you are trying to install is out of date, corrupt, or having marginal trust.&lt;/p&gt;
&lt;p&gt;Obviously changing the repos to official arch ones would fix this, but then that would change the kernel and a variety of other packages. To fix the key signatures the easiest thing is to grab the up to date keyring from the core archlinux repos and manually install it.&lt;/p&gt;
&lt;p&gt;Download Official archlinux-keyring ZST Package: &lt;a href=&quot;https://archlinux.org/packages/core/any/archlinux-keyring/download&quot;&gt;https://archlinux.org/packages/core/any/archlinux-keyring/download&lt;/a&gt;
Then install the downloaded ZST file through pacman - Ex. &lt;code&gt;sudo pacman -U archlinux-keyring-20220713-2-any.pkg.tar.zst&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This solves all your signing issues.&lt;/p&gt;
&lt;h2&gt;Making your own Steam Deck HTPC&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/holo.webp&quot; alt=&quot;holoiso&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The new steam interface for steam deck is absolutely a home run. It just works with so much functionality and much more when only controling your system with a controller.&lt;/p&gt;
&lt;p&gt;Check out HOLO-ISO - &lt;a href=&quot;https://github.com/theVakhovskeIsTaken/holoiso&quot;&gt;https://github.com/theVakhovskeIsTaken/holoiso&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;League of Legends on Linux / Steam&lt;/h2&gt;
&lt;p&gt;Many also asked about the League of Legends and other riot games on steam deck. Now this can be done on any Linux system, but the way its done changes all the time as Riot isn&apos;t very friendly to Linux. From the anti-cheat to the ridiculous launcher, it is always a nightmare to deal with unless the publisher stops smoking the devil&apos;s lettuce and actually listens to its customers. Because of the ever changing landscape around these two things stay subscribed to &lt;a href=&quot;https://www.reddit.com/r/leagueoflinux/&quot;&gt;https://www.reddit.com/r/leagueoflinux/&lt;/a&gt; sub reddit. Those guys are working day and night to make sure that LoL keeps playing on Linux and are an amazing community... UNLIKE most of League communities haha.&lt;/p&gt;
&lt;h2&gt;Steam Deck - Unexplored Potential&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/8oQdJjxn9EA&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, 28 Jul 2022 02:26:53 GMT</pubDate><content:encoded>&lt;p&gt;This article shows you how to make the steamdeck writable and a full blown desktop that you can install apps on that aren&apos;t Flatpak, AppImage, or Snaps. Simply use &lt;code&gt;yay -S packagename&lt;/code&gt; to install the app of your choice.&lt;/p&gt;

&lt;h2&gt;Make Desktop Usable with password&lt;/h2&gt;
&lt;p&gt;set user password with &lt;code&gt;passwd&lt;/code&gt; which then allows the use of sudo and various commands. By default the deck user comes with NO PASSWORD! without setting the user password you can NOT use &lt;code&gt;sudo&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Making the steamdeck writable&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo steamos-readonly disable
echo &quot;keyserver hkps://keyserver.ubuntu.com&quot; &amp;gt;&amp;gt; /etc/pacman.d/gnupg/gpg.conf
sudo pacman-key --init
sudo pacman-key --populate
sudo pacman-key --refresh-keys
yay -S base-devel
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Signing Issues - Package Installs&lt;/h2&gt;
&lt;p&gt;The repositories for holo and steam deck are very interesting. Here are the base repos and what it is using.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/pacman/mirrrorlist&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Server = https://steamdeck-packages.steamos.cloud/archlinux-mirror/$repo/os/$arch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The main issue is the gnupg signing is completely messed up and often fails when installing packages. This is because the core archlinux-keyring is badly out of date and it will show that any package you are trying to install is out of date, corrupt, or having marginal trust.&lt;/p&gt;
&lt;p&gt;Obviously changing the repos to official arch ones would fix this, but then that would change the kernel and a variety of other packages. To fix the key signatures the easiest thing is to grab the up to date keyring from the core archlinux repos and manually install it.&lt;/p&gt;
&lt;p&gt;Download Official archlinux-keyring ZST Package: &lt;a href=&quot;https://archlinux.org/packages/core/any/archlinux-keyring/download&quot;&gt;https://archlinux.org/packages/core/any/archlinux-keyring/download&lt;/a&gt;
Then install the downloaded ZST file through pacman - Ex. &lt;code&gt;sudo pacman -U archlinux-keyring-20220713-2-any.pkg.tar.zst&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This solves all your signing issues.&lt;/p&gt;
&lt;h2&gt;Making your own Steam Deck HTPC&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/holo.webp&quot; alt=&quot;holoiso&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The new steam interface for steam deck is absolutely a home run. It just works with so much functionality and much more when only controling your system with a controller.&lt;/p&gt;
&lt;p&gt;Check out HOLO-ISO - &lt;a href=&quot;https://github.com/theVakhovskeIsTaken/holoiso&quot;&gt;https://github.com/theVakhovskeIsTaken/holoiso&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;League of Legends on Linux / Steam&lt;/h2&gt;
&lt;p&gt;Many also asked about the League of Legends and other riot games on steam deck. Now this can be done on any Linux system, but the way its done changes all the time as Riot isn&apos;t very friendly to Linux. From the anti-cheat to the ridiculous launcher, it is always a nightmare to deal with unless the publisher stops smoking the devil&apos;s lettuce and actually listens to its customers. Because of the ever changing landscape around these two things stay subscribed to &lt;a href=&quot;https://www.reddit.com/r/leagueoflinux/&quot;&gt;https://www.reddit.com/r/leagueoflinux/&lt;/a&gt; sub reddit. Those guys are working day and night to make sure that LoL keeps playing on Linux and are an amazing community... UNLIKE most of League communities haha.&lt;/p&gt;
&lt;h2&gt;Steam Deck - Unexplored Potential&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/8oQdJjxn9EA&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>Speedup Linux</title><link>https://christitus.com/speedup-linux/</link><guid isPermaLink="true">https://christitus.com/speedup-linux/</guid><description>&lt;p&gt;Linux by default is meant for servers and actually decreases the performance for greater security. While this great in business, when using Linux as a desktop it is not ideal unless your are serving other devices on your network with that machine.&lt;/p&gt;

&lt;h2&gt;Disable Mitigations&lt;/h2&gt;
&lt;p&gt;This will have a substantial increase in performance just by doing disable many mitigations that happen in multi-threaded systems. The more core count you have the greater the performance gain. Some performances increases can be as large as 30%, but the average increase is about 10%.&lt;/p&gt;
&lt;p&gt;Add this to your &lt;code&gt;/etc/default/grub&lt;/code&gt; under line &lt;code&gt;GRUB_CMDLINE_LINUX=&quot;rhgb quiet&quot;&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;GRUB_CMDLINE_LINUX=&quot;rhgb quiet mitigations=off&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;ZSwap for 16GB or Less Systems&lt;/h2&gt;
&lt;p&gt;Z Swap is the a neat Linux feature that compresses data that is about to enter your swap file. This causes it to be used quite a bit less and can give a performance uplift to those with a small amount of memory. If you have a system with 32GB or greater, I wouldn&apos;t recommend doing this.&lt;/p&gt;
&lt;p&gt;Add this to your &lt;code&gt;/etc/default/grub&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;GRUB_CMDLINE_LINUX=&quot;zswap.enabled=1 rhgb quiet mitigations=off&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Systems older than Linux 5.11&lt;/h2&gt;
&lt;p&gt;The now-retired Make Linux Fast Again project collected a massive amount of the flags including the ones used above. However, this is mainly for older Linux installs and why I really don&apos;t use it. These are all the flags that project recommended:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off tsx=on tsx_async_abort=off mitigations=off
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Is this really needed?&lt;/h2&gt;
&lt;p&gt;While all this above isn&apos;t really needed, it is a really neat way to squeeze a bit performance out of your systems. It is ONLY recommended for those not sharing services and files through your network. It is also NOT recommended for those using Linux in a virtual machine as many of the mitigations are for VM protection. So use this RESPONSIBLY and don&apos;t just slap it on every Linux install.&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/8XueTkMTNvc&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, 24 Jul 2022 15:30:53 GMT</pubDate><content:encoded>&lt;p&gt;Linux by default is meant for servers and actually decreases the performance for greater security. While this great in business, when using Linux as a desktop it is not ideal unless your are serving other devices on your network with that machine.&lt;/p&gt;

&lt;h2&gt;Disable Mitigations&lt;/h2&gt;
&lt;p&gt;This will have a substantial increase in performance just by doing disable many mitigations that happen in multi-threaded systems. The more core count you have the greater the performance gain. Some performances increases can be as large as 30%, but the average increase is about 10%.&lt;/p&gt;
&lt;p&gt;Add this to your &lt;code&gt;/etc/default/grub&lt;/code&gt; under line &lt;code&gt;GRUB_CMDLINE_LINUX=&quot;rhgb quiet&quot;&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;GRUB_CMDLINE_LINUX=&quot;rhgb quiet mitigations=off&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;ZSwap for 16GB or Less Systems&lt;/h2&gt;
&lt;p&gt;Z Swap is the a neat Linux feature that compresses data that is about to enter your swap file. This causes it to be used quite a bit less and can give a performance uplift to those with a small amount of memory. If you have a system with 32GB or greater, I wouldn&apos;t recommend doing this.&lt;/p&gt;
&lt;p&gt;Add this to your &lt;code&gt;/etc/default/grub&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;GRUB_CMDLINE_LINUX=&quot;zswap.enabled=1 rhgb quiet mitigations=off&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Systems older than Linux 5.11&lt;/h2&gt;
&lt;p&gt;The now-retired Make Linux Fast Again project collected a massive amount of the flags including the ones used above. However, this is mainly for older Linux installs and why I really don&apos;t use it. These are all the flags that project recommended:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off tsx=on tsx_async_abort=off mitigations=off
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Is this really needed?&lt;/h2&gt;
&lt;p&gt;While all this above isn&apos;t really needed, it is a really neat way to squeeze a bit performance out of your systems. It is ONLY recommended for those not sharing services and files through your network. It is also NOT recommended for those using Linux in a virtual machine as many of the mitigations are for VM protection. So use this RESPONSIBLY and don&apos;t just slap it on every Linux install.&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/8XueTkMTNvc&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>Star Trek Window Management</title><link>https://christitus.com/star-trek-os/</link><guid isPermaLink="true">https://christitus.com/star-trek-os/</guid><description>&lt;p&gt;The LCARS system from Star Trek is a staple in the geek world. Ever since it made its first appearence in the Next Generation TV series in the 90s people have been obsessed with recreating that system. Leave it to Linux to give a functional LCARS recreation for those Star Trek fans out there.&lt;/p&gt;

&lt;h2&gt;The LCARS Desktop Environment&lt;/h2&gt;
&lt;p&gt;This was created and hosted on &lt;a href=&quot;https://lcarsde.github.io/index.html&quot;&gt;https://lcarsde.github.io/index.html&lt;/a&gt;. The creator made 5 packages that you need to install before you can use it. The entire environment isn&apos;t all that practical unless you have a massive monitor because of all the screen real estate lost to the LCARS design. This isn&apos;t very up to date so I recommend using debian version 10 (buster) for maximum compatibility. Newer version of Debian have issues with the &lt;code&gt;python3-posix-ipc&lt;/code&gt; dependancy.&lt;/p&gt;
&lt;p&gt;Download base Debian 10 (buster) distro @ &lt;a href=&quot;https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/archive/10.12.0+nonfree/amd64/iso-cd/firmware-10.12.0-amd64-netinst.iso&quot;&gt;https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/archive/10.12.0+nonfree/amd64/iso-cd/firmware-10.12.0-amd64-netinst.iso&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install nothing but base system. No GUI components to keep it light.&lt;/p&gt;
&lt;h3&gt;Install Dependancies&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Xorg&lt;/li&gt;
&lt;li&gt;LightDM&lt;/li&gt;
&lt;li&gt;Firefox (or other browser)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Set Graphical install &lt;code&gt;sudo systemctl set-default graphical.target&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: There are a ton of different python dependancies and you need to track these down to utilize the full desktop environment&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;My LCARS script&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;mkdir lcars-build
cd lcars-build
wget https://github.com/lcarsde/lcarswm/releases/download/22.1/lcarswm_22.1_amd64.deb
wget https://github.com/lcarsde/menu/releases/download/22.1/lcarsde-app-menu_22.1_amd64.deb
wget https://github.com/lcarsde/status-bar/releases/download/22.2/status-bar_22.2_amd64.deb
wget https://github.com/lcarsde/application-starter/releases/download/21.1/lcarsde-application-starter_21.1_amd64.deb
wget https://github.com/lcarsde/logout/releases/download/20.1/lcarsde-logout_20.1_amd64.deb
sudo dpkg -i *.deb
sudo apt -f install
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Using LCARS&lt;/h2&gt;
&lt;p&gt;To use it after installation, you logout of your desktop and select LCARS instead of KDE,GNOME, or whatever your current system is. This is an extremely minimal install so you don&apos;t have to worry about it conflicting with your current install.&lt;/p&gt;
&lt;p&gt;The complete manual is located @ &lt;a href=&quot;https://lcarsde.github.io/manual.html&quot;&gt;https://lcarsde.github.io/manual.html&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Setting up intial configuration&lt;/h3&gt;
&lt;p&gt;Edit the file @ &lt;code&gt;~/.config/lcarde/status-config.xml&lt;/code&gt; look for these lines and change them to your system:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;widget name=&quot;LcarsdeWifiStatus&quot;&amp;gt;
 41         &amp;lt;position x=&quot;4&quot; y=&quot;2&quot; width=&quot;1&quot; height=&quot;1&quot; /&amp;gt;
 42         &amp;lt;properties&amp;gt;
 43             &amp;lt;!-- Device should correspond to a folder in /sys/class/net that starts with &quot;w&quot; --&amp;gt;
 44             &amp;lt;property key=&quot;device&quot; **value=&quot;wlp2s0&quot;** /&amp;gt;
 45         &amp;lt;/properties&amp;gt;
 46     &amp;lt;/widget&amp;gt;
 47     &amp;lt;widget name=&quot;LcarsdeEthStatus&quot;&amp;gt;
 48         &amp;lt;position x=&quot;4&quot; y=&quot;1&quot; width=&quot;1&quot; height=&quot;1&quot; /&amp;gt;
 49         &amp;lt;properties&amp;gt;
 50             &amp;lt;!-- Device should correspond to a folder in /sys/class/net that starts with &quot;e&quot; --&amp;gt;
 51             &amp;lt;property key=&quot;device&quot; **value=&quot;enp0s20f0u2u3i5&quot;** /&amp;gt;
 52         &amp;lt;/properties&amp;gt;
 53     &amp;lt;/widget&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Change the programs to what you use in &lt;code&gt;~/.config/lcarde/settings.xml&lt;/code&gt;
Example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
  2 &amp;lt;lcarswm&amp;gt;
  3     &amp;lt;key-config&amp;gt;
  4         &amp;lt;!-- keys for executing programs --&amp;gt;
  5         &amp;lt;binding&amp;gt;
  6             &amp;lt;keys&amp;gt;Lin+T&amp;lt;/keys&amp;gt;
  7             &amp;lt;exec&amp;gt;kitty&amp;lt;/exec&amp;gt;
  8         &amp;lt;/binding&amp;gt;
  9         &amp;lt;binding&amp;gt;
 10             &amp;lt;keys&amp;gt;Lin+B&amp;lt;/keys&amp;gt;
 11             &amp;lt;exec&amp;gt;brave-browser&amp;lt;/exec&amp;gt;
 12         &amp;lt;/binding&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Images&lt;/h2&gt;
&lt;p&gt;The prebuilt image download is no longer available. Use the build instructions above to create the environment.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;p&gt;_Release Date: July 22, 2022*&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/hbg-QgKOdac&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, 21 Jul 2022 17:07:52 GMT</pubDate><content:encoded>&lt;p&gt;The LCARS system from Star Trek is a staple in the geek world. Ever since it made its first appearence in the Next Generation TV series in the 90s people have been obsessed with recreating that system. Leave it to Linux to give a functional LCARS recreation for those Star Trek fans out there.&lt;/p&gt;

&lt;h2&gt;The LCARS Desktop Environment&lt;/h2&gt;
&lt;p&gt;This was created and hosted on &lt;a href=&quot;https://lcarsde.github.io/index.html&quot;&gt;https://lcarsde.github.io/index.html&lt;/a&gt;. The creator made 5 packages that you need to install before you can use it. The entire environment isn&apos;t all that practical unless you have a massive monitor because of all the screen real estate lost to the LCARS design. This isn&apos;t very up to date so I recommend using debian version 10 (buster) for maximum compatibility. Newer version of Debian have issues with the &lt;code&gt;python3-posix-ipc&lt;/code&gt; dependancy.&lt;/p&gt;
&lt;p&gt;Download base Debian 10 (buster) distro @ &lt;a href=&quot;https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/archive/10.12.0+nonfree/amd64/iso-cd/firmware-10.12.0-amd64-netinst.iso&quot;&gt;https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/archive/10.12.0+nonfree/amd64/iso-cd/firmware-10.12.0-amd64-netinst.iso&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install nothing but base system. No GUI components to keep it light.&lt;/p&gt;
&lt;h3&gt;Install Dependancies&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Xorg&lt;/li&gt;
&lt;li&gt;LightDM&lt;/li&gt;
&lt;li&gt;Firefox (or other browser)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Set Graphical install &lt;code&gt;sudo systemctl set-default graphical.target&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: There are a ton of different python dependancies and you need to track these down to utilize the full desktop environment&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;My LCARS script&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;mkdir lcars-build
cd lcars-build
wget https://github.com/lcarsde/lcarswm/releases/download/22.1/lcarswm_22.1_amd64.deb
wget https://github.com/lcarsde/menu/releases/download/22.1/lcarsde-app-menu_22.1_amd64.deb
wget https://github.com/lcarsde/status-bar/releases/download/22.2/status-bar_22.2_amd64.deb
wget https://github.com/lcarsde/application-starter/releases/download/21.1/lcarsde-application-starter_21.1_amd64.deb
wget https://github.com/lcarsde/logout/releases/download/20.1/lcarsde-logout_20.1_amd64.deb
sudo dpkg -i *.deb
sudo apt -f install
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Using LCARS&lt;/h2&gt;
&lt;p&gt;To use it after installation, you logout of your desktop and select LCARS instead of KDE,GNOME, or whatever your current system is. This is an extremely minimal install so you don&apos;t have to worry about it conflicting with your current install.&lt;/p&gt;
&lt;p&gt;The complete manual is located @ &lt;a href=&quot;https://lcarsde.github.io/manual.html&quot;&gt;https://lcarsde.github.io/manual.html&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Setting up intial configuration&lt;/h3&gt;
&lt;p&gt;Edit the file @ &lt;code&gt;~/.config/lcarde/status-config.xml&lt;/code&gt; look for these lines and change them to your system:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;widget name=&quot;LcarsdeWifiStatus&quot;&amp;gt;
 41         &amp;lt;position x=&quot;4&quot; y=&quot;2&quot; width=&quot;1&quot; height=&quot;1&quot; /&amp;gt;
 42         &amp;lt;properties&amp;gt;
 43             &amp;lt;!-- Device should correspond to a folder in /sys/class/net that starts with &quot;w&quot; --&amp;gt;
 44             &amp;lt;property key=&quot;device&quot; **value=&quot;wlp2s0&quot;** /&amp;gt;
 45         &amp;lt;/properties&amp;gt;
 46     &amp;lt;/widget&amp;gt;
 47     &amp;lt;widget name=&quot;LcarsdeEthStatus&quot;&amp;gt;
 48         &amp;lt;position x=&quot;4&quot; y=&quot;1&quot; width=&quot;1&quot; height=&quot;1&quot; /&amp;gt;
 49         &amp;lt;properties&amp;gt;
 50             &amp;lt;!-- Device should correspond to a folder in /sys/class/net that starts with &quot;e&quot; --&amp;gt;
 51             &amp;lt;property key=&quot;device&quot; **value=&quot;enp0s20f0u2u3i5&quot;** /&amp;gt;
 52         &amp;lt;/properties&amp;gt;
 53     &amp;lt;/widget&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Change the programs to what you use in &lt;code&gt;~/.config/lcarde/settings.xml&lt;/code&gt;
Example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
  2 &amp;lt;lcarswm&amp;gt;
  3     &amp;lt;key-config&amp;gt;
  4         &amp;lt;!-- keys for executing programs --&amp;gt;
  5         &amp;lt;binding&amp;gt;
  6             &amp;lt;keys&amp;gt;Lin+T&amp;lt;/keys&amp;gt;
  7             &amp;lt;exec&amp;gt;kitty&amp;lt;/exec&amp;gt;
  8         &amp;lt;/binding&amp;gt;
  9         &amp;lt;binding&amp;gt;
 10             &amp;lt;keys&amp;gt;Lin+B&amp;lt;/keys&amp;gt;
 11             &amp;lt;exec&amp;gt;brave-browser&amp;lt;/exec&amp;gt;
 12         &amp;lt;/binding&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Images&lt;/h2&gt;
&lt;p&gt;The prebuilt image download is no longer available. Use the build instructions above to create the environment.&lt;/p&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;p&gt;_Release Date: July 22, 2022*&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/hbg-QgKOdac&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>Stop Using APT</title><link>https://christitus.com/stop-using-apt/</link><guid isPermaLink="true">https://christitus.com/stop-using-apt/</guid><description>&lt;p&gt;APT is slow... single downloading and generally uses slow mirrors as it doesn&apos;t optimize them out of the box. It also doesn&apos;t have a history so rolling back updates can really suck.&lt;/p&gt;

&lt;p&gt;Welp, all that is now fixed with &lt;a href=&quot;https://gitlab.com/volian/nala&quot;&gt;Nala&lt;/a&gt; and it is absolutely wonderful. Not only does it fix all that listed above but it makes the updates look beautiful.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/nala/nala.webp&quot; alt=&quot;nala-image&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Install&lt;/h2&gt;
&lt;p&gt;Add Repository - NOT NEEDED FOR Debian SID/testing&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;deb http://deb.volian.org/volian/ scar main&quot; | sudo tee /etc/apt/sources.list.d/volian-archive-scar-unstable.list; wget -qO - https://deb.volian.org/volian/scar.key | sudo tee /etc/apt/trusted.gpg.d/volian-archive-scar-unstable.gpg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Nala on any Debian Sid or Ubuntu 22+ with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install nala
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install on Debian Stable or Ubuntu 21 and below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install nala-legacy
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Update Mirrors&lt;/h2&gt;
&lt;p&gt;This will drastically speed up your downloads&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nala fetch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Select the mirrors you want from the list. Typically you will want to select three. Here is an example:
&lt;img src=&quot;/images/2022/nala/mirror.webp&quot; alt=&quot;nala-mirror&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;View Update History&lt;/h2&gt;
&lt;p&gt;Nala has a robust history and even an UNDO! These commands are a life saver.&lt;/p&gt;
&lt;p&gt;View the history:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nala history
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Undo a history (&lt;code&gt;sudo nala history undo ID&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nala history undo 1
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Convert APT to Nala&lt;/h2&gt;
&lt;p&gt;Add the following to your &lt;code&gt;~/.bashrc&lt;/code&gt; AND &lt;code&gt;/root/.bashrc&lt;/code&gt; file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt() { 
  command nala &quot;$@&quot;
}
sudo() {
  if [ &quot;$1&quot; = &quot;apt&quot; ]; then
    shift
    command sudo nala &quot;$@&quot;
  else
    command sudo &quot;$@&quot;
  fi
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From here you can install programs with apt or nala command and it will always work perfectly!&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is everything I want in a package manager and more. My hat is off to the team that came up with all these drastic improvements and it has made my life so much easier on Debian based systems!&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/oroSkR4Nn_w&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>Tue, 19 Jul 2022 22:32:28 GMT</pubDate><content:encoded>&lt;p&gt;APT is slow... single downloading and generally uses slow mirrors as it doesn&apos;t optimize them out of the box. It also doesn&apos;t have a history so rolling back updates can really suck.&lt;/p&gt;

&lt;p&gt;Welp, all that is now fixed with &lt;a href=&quot;https://gitlab.com/volian/nala&quot;&gt;Nala&lt;/a&gt; and it is absolutely wonderful. Not only does it fix all that listed above but it makes the updates look beautiful.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/nala/nala.webp&quot; alt=&quot;nala-image&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Install&lt;/h2&gt;
&lt;p&gt;Add Repository - NOT NEEDED FOR Debian SID/testing&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;deb http://deb.volian.org/volian/ scar main&quot; | sudo tee /etc/apt/sources.list.d/volian-archive-scar-unstable.list; wget -qO - https://deb.volian.org/volian/scar.key | sudo tee /etc/apt/trusted.gpg.d/volian-archive-scar-unstable.gpg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Nala on any Debian Sid or Ubuntu 22+ with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install nala
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install on Debian Stable or Ubuntu 21 and below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt install nala-legacy
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Update Mirrors&lt;/h2&gt;
&lt;p&gt;This will drastically speed up your downloads&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nala fetch
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Select the mirrors you want from the list. Typically you will want to select three. Here is an example:
&lt;img src=&quot;/images/2022/nala/mirror.webp&quot; alt=&quot;nala-mirror&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;View Update History&lt;/h2&gt;
&lt;p&gt;Nala has a robust history and even an UNDO! These commands are a life saver.&lt;/p&gt;
&lt;p&gt;View the history:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nala history
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Undo a history (&lt;code&gt;sudo nala history undo ID&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nala history undo 1
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Convert APT to Nala&lt;/h2&gt;
&lt;p&gt;Add the following to your &lt;code&gt;~/.bashrc&lt;/code&gt; AND &lt;code&gt;/root/.bashrc&lt;/code&gt; file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt() { 
  command nala &quot;$@&quot;
}
sudo() {
  if [ &quot;$1&quot; = &quot;apt&quot; ]; then
    shift
    command sudo nala &quot;$@&quot;
  else
    command sudo &quot;$@&quot;
  fi
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;From here you can install programs with apt or nala command and it will always work perfectly!&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is everything I want in a package manager and more. My hat is off to the team that came up with all these drastic improvements and it has made my life so much easier on Debian based systems!&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/oroSkR4Nn_w&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>Choosing the Right Linux Distro</title><link>https://christitus.com/choose-linux-distro/</link><guid isPermaLink="true">https://christitus.com/choose-linux-distro/</guid><description>&lt;p&gt;Choosing a Linux distribution can be difficult, especially if you don&apos;t know much about Linux. However, over the past several years I&apos;ve tried almost every Distribution that you can choose. There are some that I have not installed, because it was just more of the same.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2022/choose-linux-distribution/distros.webp&quot; alt=&quot;distros&quot; /&gt;&lt;/p&gt;
&lt;p&gt;To start with there is a misconception that there is thousands of choices in Linux Distributions. While technically true, there is really only 3 distributions you need to know about for desktop use, but before we get into that you need to know about what makes up a distribution. This is mandatory to understand why there is so many different ones that splinter off of these three.&lt;/p&gt;
&lt;h2&gt;What is in a Distribution&lt;/h2&gt;
&lt;p&gt;Windows and Mac are called Operating Systems, NOT distributions... but in Linux this isn&apos;t the case. Why? That is because each Linux offering has different options at its core. With Windows and Mac you always get the same bootloader, file manager, etc. and in Linux these can differ drastically from one to the next. So this is what makes up the Linux distribution.&lt;/p&gt;
&lt;h3&gt;Bootloader&lt;/h3&gt;
&lt;p&gt;This can is usually either GRUB or systemd-boot. This may not mean much to you, but i&apos;ll explain the difference. GRUB has been around for ages and can be themed while having a ton of flexibility. It supports UEFI and Legacy, while systemd-boot is pretty much included with every modern linux distribution and only boots via UEFI and has a limited menu system. I highly encourage you that want a themed multi-boot system to check out my Top 5 Bootloader project that auto-installs multiple themes: &lt;a href=&quot;https://christitus.com/bootloader-themes/&quot;&gt;https://christitus.com/bootloader-themes/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Init System&lt;/h3&gt;
&lt;p&gt;When your system is initializing on startup it needs to verify all the devices it will use and get the system ready for boot. Almost every Linux system these days use systemd. Systemd is very big and inclusive, but to many is bloated. It does much more than just initializing the system. It has Timers, bootloader, services, and much more. I did a YouTube video explaining everything in systemd if you want to learn more. &lt;a href=&quot;https://youtu.be/hc7J-zWEty8&quot;&gt;https://youtu.be/hc7J-zWEty8&lt;/a&gt;
There is other options out there for Linux and certain fringe distributions that use them, but if you want other options check out init.d and precursors to systemd. They are much faster and if looking at building an ultimate minimal system this is the route to take.&lt;/p&gt;
&lt;h3&gt;Display Render&lt;/h3&gt;
&lt;p&gt;To draw graphics on the screen we need a render. There are only two major ones you need to know about. Wayland and Xorg. Wayland is the new kid that should be faster and better, but is lacking features and compatibility. Xorg is the old, wise man that just works, but is starting to show its age. To me, I always choose Xorg because Wayland always runs into problems. Xorg has two features that Wayland is lacking for me right now. It has X11 forwarding for running GUI programs remotely through an SSH connection and using legacy programs for sharing a keyboard/mouse across screens using synergy/barrier. I did a video on this here: &lt;a href=&quot;https://youtu.be/Fci_ALdEzGc&quot;&gt;https://youtu.be/Fci_ALdEzGc&lt;/a&gt;. To many it simply doesn&apos;t matter, because they both fundamentally do the same thing.&lt;/p&gt;
&lt;h3&gt;Display Manager&lt;/h3&gt;
&lt;p&gt;This really should be called a Login Manager or user selector, but in Linux the entire ecosystem is run by extremely smart technical people, that just so happen to be terrible at marketing. So the &quot;Display Manager&quot; comes in many flavors and this is where we start to run into many personal options in Distributions. Personally, I really don&apos;t care about this, but there are three main ones that are used and can be configured differently:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lightdm&lt;/li&gt;
&lt;li&gt;sddm&lt;/li&gt;
&lt;li&gt;gdm
While there are others, these three pretty much are always chosen for a distribution. SDDM is generally bundled with KDE systems (which we will get into here in a bit), GDM is for GNOME systems, and lightdm (my personal fav) is pretty much a catch all.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desktop Environments&lt;/h3&gt;
&lt;p&gt;Think of Desktop Environments as the tools that make up the control center in an Operating System. Want to change the display resolution, theme, colors, fonts, etc. well all that stuff is in the desktop environment. Now you don&apos;t technically need a full blow DE with all this stuff. The main thing you do need is a Window Manager to control where windows are placed. With all that said lets layout the common DEs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GNOME&lt;/li&gt;
&lt;li&gt;KDE&lt;/li&gt;
&lt;li&gt;XFCE&lt;/li&gt;
&lt;li&gt;Window Managers&lt;/li&gt;
&lt;li&gt;and many, many, more.
This could be a 100 page manual with all the options, but I want to give you the basics. GNOME gives more of a mac-esque style and KDE gives that windows look and feed. XFCE is more bare-bones with the essential tools and not much else. Where a basic &quot;window manager&quot; is just the window manager without any utilities. You might think... &quot;How the hell do you change the resolution? or font? with a window manger...&quot; This is accomplished either by hard coding it in to the configuration files or by installing an independent utility.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Package Managers&lt;/h3&gt;
&lt;p&gt;This is how distributions install programs. Here are the major ones you need to know about.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;APT - Debian distros &lt;code&gt;apt install programname&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;DNF / YUM - RHEL distros &lt;code&gt;dnf install programname&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pacman - Arch distros &lt;code&gt;pacman -S programname&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Distributions&lt;/h2&gt;
&lt;p&gt;So now that you know what they are made up of we can easily get to deciding what you really want your computing experience to be like. Figure out what components above you like and do NOT like. Then swap them out for something better. The main gripe I have with Windows and Mac is I find their file manager absolutely terrible. I want to switch them and rip out the junk they give me, but we can&apos;t as they are integral to the function of the operating system. In Linux, we get that freedom. Here are the three &quot;distributions&quot; that pretty much everything is based on and what the base package installs are. Remember you can change the things you do NOT like from the stock settings.&lt;/p&gt;
&lt;h3&gt;Debian Linux&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/choose-linux-distribution/debian.webp&quot; alt=&quot;debian&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Debian uses a stable release cycle and generally has older packages, but they don&apos;t usually have many bugs and are very reliable. This is typically my go to for desktops I don&apos;t change much.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootloader - GRUB&lt;/li&gt;
&lt;li&gt;Init System - systemd&lt;/li&gt;
&lt;li&gt;Display Render - Xorg&lt;/li&gt;
&lt;li&gt;Display Manager - SDDM/GDM&lt;/li&gt;
&lt;li&gt;Desktop Environment - KDE/GNOME&lt;/li&gt;
&lt;li&gt;Package Manager - APT&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Arch Linux&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/choose-linux-distribution/arch.webp&quot; alt=&quot;arch&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Very new packages with a massive user repository to grab programs you might be missing and builds them for you. The main issue is if you forget to update your system for a period of months it is prone to breaking. Backups are MANDATORY if you use this for your daily use. The benefits are you get the latest and greatest and is often thought to be the best for drivers and hardware that is just released. Its unique that you get to choose every component and can utilize pretty much any COMBINATION of components listed above. The only constant is its package manager which is PACMAN. The other unique aspect is it has a helper program that can install things through the AUR (Arch User Repository) and boy does it have options here... I&apos;m going to recommend the top three&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;paru&lt;/li&gt;
&lt;li&gt;yay&lt;/li&gt;
&lt;li&gt;trizen
They follow the same syntax as pacman except you run them at a user level and they can install pretty much any package. For a complete list visit: &lt;a href=&quot;https://aur.archlinux.org/&quot;&gt;https://aur.archlinux.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fedora Linux&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/choose-linux-distribution/fedora.webp&quot; alt=&quot;fedora&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is a RHEL (Red Hat Enterprise Linux) based distribution. It strikes a balance between newer packages and Linux kernels between Debian and Arch. Its not as new as Arch, but not as old as Debian. It has different SPINS but its main download uses the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootloader - Systemd&lt;/li&gt;
&lt;li&gt;Init System - systemd&lt;/li&gt;
&lt;li&gt;Display Render - Wayland&lt;/li&gt;
&lt;li&gt;Desktop Environment - GNOME&lt;/li&gt;
&lt;li&gt;Package Manager - DNF&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;So the best distribution is the one that suits your needs and preferences. Instead of the one size fits all approach of Mac and Windows, Linux takes a completely different approach. Learn the above and try out the different options and you will make the perfect system for your needs. You will also understand why all the top 5 distros and other Linux garbage on the internet is worthless. That is because there is no perfect distro, however there is the perfect distro for YOU! It just so happens that it is different for each user and you have the options that no other system on earth give you with Linux.&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/dL05DoJ0qsQ&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>Tue, 28 Jun 2022 22:12:25 GMT</pubDate><content:encoded>&lt;p&gt;Choosing a Linux distribution can be difficult, especially if you don&apos;t know much about Linux. However, over the past several years I&apos;ve tried almost every Distribution that you can choose. There are some that I have not installed, because it was just more of the same.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2022/choose-linux-distribution/distros.webp&quot; alt=&quot;distros&quot; /&gt;&lt;/p&gt;
&lt;p&gt;To start with there is a misconception that there is thousands of choices in Linux Distributions. While technically true, there is really only 3 distributions you need to know about for desktop use, but before we get into that you need to know about what makes up a distribution. This is mandatory to understand why there is so many different ones that splinter off of these three.&lt;/p&gt;
&lt;h2&gt;What is in a Distribution&lt;/h2&gt;
&lt;p&gt;Windows and Mac are called Operating Systems, NOT distributions... but in Linux this isn&apos;t the case. Why? That is because each Linux offering has different options at its core. With Windows and Mac you always get the same bootloader, file manager, etc. and in Linux these can differ drastically from one to the next. So this is what makes up the Linux distribution.&lt;/p&gt;
&lt;h3&gt;Bootloader&lt;/h3&gt;
&lt;p&gt;This can is usually either GRUB or systemd-boot. This may not mean much to you, but i&apos;ll explain the difference. GRUB has been around for ages and can be themed while having a ton of flexibility. It supports UEFI and Legacy, while systemd-boot is pretty much included with every modern linux distribution and only boots via UEFI and has a limited menu system. I highly encourage you that want a themed multi-boot system to check out my Top 5 Bootloader project that auto-installs multiple themes: &lt;a href=&quot;https://christitus.com/bootloader-themes/&quot;&gt;https://christitus.com/bootloader-themes/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Init System&lt;/h3&gt;
&lt;p&gt;When your system is initializing on startup it needs to verify all the devices it will use and get the system ready for boot. Almost every Linux system these days use systemd. Systemd is very big and inclusive, but to many is bloated. It does much more than just initializing the system. It has Timers, bootloader, services, and much more. I did a YouTube video explaining everything in systemd if you want to learn more. &lt;a href=&quot;https://youtu.be/hc7J-zWEty8&quot;&gt;https://youtu.be/hc7J-zWEty8&lt;/a&gt;
There is other options out there for Linux and certain fringe distributions that use them, but if you want other options check out init.d and precursors to systemd. They are much faster and if looking at building an ultimate minimal system this is the route to take.&lt;/p&gt;
&lt;h3&gt;Display Render&lt;/h3&gt;
&lt;p&gt;To draw graphics on the screen we need a render. There are only two major ones you need to know about. Wayland and Xorg. Wayland is the new kid that should be faster and better, but is lacking features and compatibility. Xorg is the old, wise man that just works, but is starting to show its age. To me, I always choose Xorg because Wayland always runs into problems. Xorg has two features that Wayland is lacking for me right now. It has X11 forwarding for running GUI programs remotely through an SSH connection and using legacy programs for sharing a keyboard/mouse across screens using synergy/barrier. I did a video on this here: &lt;a href=&quot;https://youtu.be/Fci_ALdEzGc&quot;&gt;https://youtu.be/Fci_ALdEzGc&lt;/a&gt;. To many it simply doesn&apos;t matter, because they both fundamentally do the same thing.&lt;/p&gt;
&lt;h3&gt;Display Manager&lt;/h3&gt;
&lt;p&gt;This really should be called a Login Manager or user selector, but in Linux the entire ecosystem is run by extremely smart technical people, that just so happen to be terrible at marketing. So the &quot;Display Manager&quot; comes in many flavors and this is where we start to run into many personal options in Distributions. Personally, I really don&apos;t care about this, but there are three main ones that are used and can be configured differently:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lightdm&lt;/li&gt;
&lt;li&gt;sddm&lt;/li&gt;
&lt;li&gt;gdm
While there are others, these three pretty much are always chosen for a distribution. SDDM is generally bundled with KDE systems (which we will get into here in a bit), GDM is for GNOME systems, and lightdm (my personal fav) is pretty much a catch all.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Desktop Environments&lt;/h3&gt;
&lt;p&gt;Think of Desktop Environments as the tools that make up the control center in an Operating System. Want to change the display resolution, theme, colors, fonts, etc. well all that stuff is in the desktop environment. Now you don&apos;t technically need a full blow DE with all this stuff. The main thing you do need is a Window Manager to control where windows are placed. With all that said lets layout the common DEs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GNOME&lt;/li&gt;
&lt;li&gt;KDE&lt;/li&gt;
&lt;li&gt;XFCE&lt;/li&gt;
&lt;li&gt;Window Managers&lt;/li&gt;
&lt;li&gt;and many, many, more.
This could be a 100 page manual with all the options, but I want to give you the basics. GNOME gives more of a mac-esque style and KDE gives that windows look and feed. XFCE is more bare-bones with the essential tools and not much else. Where a basic &quot;window manager&quot; is just the window manager without any utilities. You might think... &quot;How the hell do you change the resolution? or font? with a window manger...&quot; This is accomplished either by hard coding it in to the configuration files or by installing an independent utility.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Package Managers&lt;/h3&gt;
&lt;p&gt;This is how distributions install programs. Here are the major ones you need to know about.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;APT - Debian distros &lt;code&gt;apt install programname&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;DNF / YUM - RHEL distros &lt;code&gt;dnf install programname&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Pacman - Arch distros &lt;code&gt;pacman -S programname&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Distributions&lt;/h2&gt;
&lt;p&gt;So now that you know what they are made up of we can easily get to deciding what you really want your computing experience to be like. Figure out what components above you like and do NOT like. Then swap them out for something better. The main gripe I have with Windows and Mac is I find their file manager absolutely terrible. I want to switch them and rip out the junk they give me, but we can&apos;t as they are integral to the function of the operating system. In Linux, we get that freedom. Here are the three &quot;distributions&quot; that pretty much everything is based on and what the base package installs are. Remember you can change the things you do NOT like from the stock settings.&lt;/p&gt;
&lt;h3&gt;Debian Linux&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/choose-linux-distribution/debian.webp&quot; alt=&quot;debian&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Debian uses a stable release cycle and generally has older packages, but they don&apos;t usually have many bugs and are very reliable. This is typically my go to for desktops I don&apos;t change much.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootloader - GRUB&lt;/li&gt;
&lt;li&gt;Init System - systemd&lt;/li&gt;
&lt;li&gt;Display Render - Xorg&lt;/li&gt;
&lt;li&gt;Display Manager - SDDM/GDM&lt;/li&gt;
&lt;li&gt;Desktop Environment - KDE/GNOME&lt;/li&gt;
&lt;li&gt;Package Manager - APT&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Arch Linux&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/choose-linux-distribution/arch.webp&quot; alt=&quot;arch&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Very new packages with a massive user repository to grab programs you might be missing and builds them for you. The main issue is if you forget to update your system for a period of months it is prone to breaking. Backups are MANDATORY if you use this for your daily use. The benefits are you get the latest and greatest and is often thought to be the best for drivers and hardware that is just released. Its unique that you get to choose every component and can utilize pretty much any COMBINATION of components listed above. The only constant is its package manager which is PACMAN. The other unique aspect is it has a helper program that can install things through the AUR (Arch User Repository) and boy does it have options here... I&apos;m going to recommend the top three&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;paru&lt;/li&gt;
&lt;li&gt;yay&lt;/li&gt;
&lt;li&gt;trizen
They follow the same syntax as pacman except you run them at a user level and they can install pretty much any package. For a complete list visit: &lt;a href=&quot;https://aur.archlinux.org/&quot;&gt;https://aur.archlinux.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fedora Linux&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/choose-linux-distribution/fedora.webp&quot; alt=&quot;fedora&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is a RHEL (Red Hat Enterprise Linux) based distribution. It strikes a balance between newer packages and Linux kernels between Debian and Arch. Its not as new as Arch, but not as old as Debian. It has different SPINS but its main download uses the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootloader - Systemd&lt;/li&gt;
&lt;li&gt;Init System - systemd&lt;/li&gt;
&lt;li&gt;Display Render - Wayland&lt;/li&gt;
&lt;li&gt;Desktop Environment - GNOME&lt;/li&gt;
&lt;li&gt;Package Manager - DNF&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;So the best distribution is the one that suits your needs and preferences. Instead of the one size fits all approach of Mac and Windows, Linux takes a completely different approach. Learn the above and try out the different options and you will make the perfect system for your needs. You will also understand why all the top 5 distros and other Linux garbage on the internet is worthless. That is because there is no perfect distro, however there is the perfect distro for YOU! It just so happens that it is different for each user and you have the options that no other system on earth give you with Linux.&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/dL05DoJ0qsQ&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>Ubuntu&apos;s Decline</title><link>https://christitus.com/ubuntu-decline/</link><guid isPermaLink="true">https://christitus.com/ubuntu-decline/</guid><description>&lt;p&gt;When Ubuntu came on the scene in 2004, it made desktop Linux viable to many with its ease of use and friendly layout. Instead of constantly improving this and becoming the &quot;King of All Distributions&quot; it took a very different path. While I still use Ubuntu server with some caveats, I will NOT use Ubuntu Desktop.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2022/ubuntu-decline/ubuntu.webp&quot; alt=&quot;ubuntu&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;What Ubuntu does right&lt;/h2&gt;
&lt;p&gt;Before we roast Ubuntu and its decline, we need to understand why they rose to the top. Not only did they make Linux desktop easy, but they did the same in the server realm as well. They also made highly successful and well designed products for Linux, like the Unity Desktop Environment. They were one of the first to also make it easy for us to use nVidia cards on our systems without much fuss.&lt;/p&gt;
&lt;h2&gt;The things that lead to the decline&lt;/h2&gt;
&lt;p&gt;This is not going to be an exhaustive list, but rather the large things they have done to ensure their downfall and what has caused many to leave Ubuntu to never return.&lt;/p&gt;
&lt;h3&gt;Snaps&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/ubuntu-decline/snaps.webp&quot; alt=&quot;snaps&quot; /&gt;&lt;/p&gt;
&lt;p&gt;By far the biggest issue with Ubuntu is Snaps. They created a universal package manager that can work on any system. Sounds amazing, right? WRONG! The two biggest issues are simple: Its slow as hell and closed source.&lt;/p&gt;
&lt;p&gt;How is it slow? Well, it can take upwards of 10-15 seconds to launch Firefox snap, which is a web browser that would normally take MAYBE 1-2 seconds. What the hell Canonical!?! It&apos;s obviously not ready, so why are forcing everyone to use snaps? Do they just not like users? Do they think their users are just too stupid to know its this slow?&lt;/p&gt;
&lt;p&gt;Closed Source. This can be summed up to there is only one place to download packages, Canonical. Want to open up a Snap store for a competing distribution? Too bad, its closed source. Is this the worst thing about it? No, but why bother with it when there are better solutions like AppImage and Flatpak which ARE open source?&lt;/p&gt;
&lt;h3&gt;Spyware&lt;/h3&gt;
&lt;p&gt;Back in Ubuntu 14 they were submitting search results to Canonical. Then in Ubuntu 16 they introduced a bundled amazon store which they were compensated for. Too many this was just simply spyware on their distribution. A blatant cash grab if you will... However, to me it screams of desperation. They want or need money and this was the easiest way to accomplish this. Apple and Microsoft does this... why not Canonical? The answer is surprisingly simple, many users ran from big tech for privacy and why choose Ubuntu when their are so many better distributions.&lt;/p&gt;
&lt;h3&gt;Lack of commitment&lt;/h3&gt;
&lt;p&gt;The last reason many users have given up on Ubuntu is it just feels like Canonical is padding their balance sheet for an eventual buyout from some biggest tech firm. The days of innovation are over and they have killed so many projects that no one trusts them anymore. It has been eroded away by not listening to the community, doing things not in the best interest of their users, and abandoning many, many projects. Here is the short list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu Touch&lt;/li&gt;
&lt;li&gt;Unity Desktop Environment&lt;/li&gt;
&lt;li&gt;Mir Display Manager&lt;/li&gt;
&lt;li&gt;Ubuntu One (Cloud services)&lt;/li&gt;
&lt;li&gt;PPA Repos - .DEB Packages being phased out from Software Centre&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Future&lt;/h2&gt;
&lt;p&gt;The future of Ubuntu Desktop is pretty bleak. It feels like we are watching it circle the toilet bowl to be forever gone in a few years. I want to give two outcomes...&lt;/p&gt;
&lt;p&gt;It continues down this path, forcing everyone to use snaps and fades to irrelevance until the entire desktop offering is discontinued.&lt;/p&gt;
&lt;p&gt;It cuts it losses with snaps and starts streamlining their distro. Gone are the days of slow boot times and bloated distribution installs. It reverts to what it began as... a user friendly and easy to user distribution that just works.&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/pMfqCzbSmQU&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, 27 Jun 2022 20:52:45 GMT</pubDate><content:encoded>&lt;p&gt;When Ubuntu came on the scene in 2004, it made desktop Linux viable to many with its ease of use and friendly layout. Instead of constantly improving this and becoming the &quot;King of All Distributions&quot; it took a very different path. While I still use Ubuntu server with some caveats, I will NOT use Ubuntu Desktop.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2022/ubuntu-decline/ubuntu.webp&quot; alt=&quot;ubuntu&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;What Ubuntu does right&lt;/h2&gt;
&lt;p&gt;Before we roast Ubuntu and its decline, we need to understand why they rose to the top. Not only did they make Linux desktop easy, but they did the same in the server realm as well. They also made highly successful and well designed products for Linux, like the Unity Desktop Environment. They were one of the first to also make it easy for us to use nVidia cards on our systems without much fuss.&lt;/p&gt;
&lt;h2&gt;The things that lead to the decline&lt;/h2&gt;
&lt;p&gt;This is not going to be an exhaustive list, but rather the large things they have done to ensure their downfall and what has caused many to leave Ubuntu to never return.&lt;/p&gt;
&lt;h3&gt;Snaps&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/ubuntu-decline/snaps.webp&quot; alt=&quot;snaps&quot; /&gt;&lt;/p&gt;
&lt;p&gt;By far the biggest issue with Ubuntu is Snaps. They created a universal package manager that can work on any system. Sounds amazing, right? WRONG! The two biggest issues are simple: Its slow as hell and closed source.&lt;/p&gt;
&lt;p&gt;How is it slow? Well, it can take upwards of 10-15 seconds to launch Firefox snap, which is a web browser that would normally take MAYBE 1-2 seconds. What the hell Canonical!?! It&apos;s obviously not ready, so why are forcing everyone to use snaps? Do they just not like users? Do they think their users are just too stupid to know its this slow?&lt;/p&gt;
&lt;p&gt;Closed Source. This can be summed up to there is only one place to download packages, Canonical. Want to open up a Snap store for a competing distribution? Too bad, its closed source. Is this the worst thing about it? No, but why bother with it when there are better solutions like AppImage and Flatpak which ARE open source?&lt;/p&gt;
&lt;h3&gt;Spyware&lt;/h3&gt;
&lt;p&gt;Back in Ubuntu 14 they were submitting search results to Canonical. Then in Ubuntu 16 they introduced a bundled amazon store which they were compensated for. Too many this was just simply spyware on their distribution. A blatant cash grab if you will... However, to me it screams of desperation. They want or need money and this was the easiest way to accomplish this. Apple and Microsoft does this... why not Canonical? The answer is surprisingly simple, many users ran from big tech for privacy and why choose Ubuntu when their are so many better distributions.&lt;/p&gt;
&lt;h3&gt;Lack of commitment&lt;/h3&gt;
&lt;p&gt;The last reason many users have given up on Ubuntu is it just feels like Canonical is padding their balance sheet for an eventual buyout from some biggest tech firm. The days of innovation are over and they have killed so many projects that no one trusts them anymore. It has been eroded away by not listening to the community, doing things not in the best interest of their users, and abandoning many, many projects. Here is the short list:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu Touch&lt;/li&gt;
&lt;li&gt;Unity Desktop Environment&lt;/li&gt;
&lt;li&gt;Mir Display Manager&lt;/li&gt;
&lt;li&gt;Ubuntu One (Cloud services)&lt;/li&gt;
&lt;li&gt;PPA Repos - .DEB Packages being phased out from Software Centre&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Future&lt;/h2&gt;
&lt;p&gt;The future of Ubuntu Desktop is pretty bleak. It feels like we are watching it circle the toilet bowl to be forever gone in a few years. I want to give two outcomes...&lt;/p&gt;
&lt;p&gt;It continues down this path, forcing everyone to use snaps and fades to irrelevance until the entire desktop offering is discontinued.&lt;/p&gt;
&lt;p&gt;It cuts it losses with snaps and starts streamlining their distro. Gone are the days of slow boot times and bloated distribution installs. It reverts to what it began as... a user friendly and easy to user distribution that just works.&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/pMfqCzbSmQU&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>Future Internet</title><link>https://christitus.com/future-internet/</link><guid isPermaLink="true">https://christitus.com/future-internet/</guid><description>&lt;p&gt;Renewing website domains, paying for web hosting, and having them expire are all going to be a thing of the past.
Using IPFS (Inter-planetary File System) is a way to store websites decentralized and without any money. How fast or how slow it will be, is determined by how popular it is with IPFS nodes.
This guide shows how to host a website, owning a web domain forever, and redirecting these domains to traditional website hosts.&lt;/p&gt;

&lt;h2&gt;IPFS - A Better Storage System&lt;/h2&gt;
&lt;p&gt;IPFS is absolutely amazing as you can run a node on anything and share your files. If they are used by other people then they will populate to their nodes and I&apos;ve shared and used video files over 1 GB in size! The main issue is there isn&apos;t many browsers that support IPFS and it is slower than normal storage right now. However, you never have to worry about hosting costs and as long as the content is accessed by others on a regular basis it will live forever!&lt;/p&gt;
&lt;h3&gt;Improving IPFS in Brave Browser&lt;/h3&gt;
&lt;p&gt;I highly recommend using IPFS Companion if you plan on doing this regularly. You don&apos;t have to run your own node, but can that is up to you. Using this add-on will help resolve IPFS addresses much faster even in Gateway only mode.&lt;/p&gt;
&lt;p&gt;Enable IPFS Companion Extension&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.ipfs.io/install/ipfs-companion/&quot;&gt;https://docs.ipfs.io/install/ipfs-companion/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After installing IPFS Companion change the following brave settings under Settings -&amp;gt; IPFS&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable IPFS Public Gateway Fallback (Not Required, but recommended)&lt;/li&gt;
&lt;li&gt;Enable IPFS Companion
&lt;img src=&quot;/images/2022/future-internet/ipfs-settings.webp&quot; alt=&quot;ipfs-settings&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enable Blockchain domains - The Unstoppable Domains extension (In the future, this should be baked into many browsers. Brave natively supports .crypto)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://unstoppabledomains.com/extension&quot;&gt;https://unstoppabledomains.com/extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Blockchains - Not all created equal&lt;/h2&gt;
&lt;p&gt;The technology powering blockchains are amazing, but most just care about the monetary gain. I&apos;m more interested in actually using the blockchain and where all the meta data lives for decentralized web or Web3. So what blockchains have I used for this? Lets review:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ethereum was one of the original ones that is incredible slow and expensive. I feel like this has turned from a usable blockchain into something only millionaires can use. Maybe this will change in the future, but right now it isn&apos;t usable because of the cost to submit transactions. ENS Domains uses ethereum.&lt;/li&gt;
&lt;li&gt;Polygon is a bridge blockchain that drastically improves upon what ethereum started. Fees are non-existent and is very functional. Transfer times are generally about a minute. This is currently what unstoppable domains uses.&lt;/li&gt;
&lt;li&gt;Solana is not something I recommend, but is considered the fastest blockchain out there. However, It has crashed multiple times and halted completely. I am also skeptical that is even decentralized with the problems it has had. It is very easy to work on and something to watch.&lt;/li&gt;
&lt;li&gt;Cardano is probably my favorite out of all these blockchains for the future. It is very decentralized, transactions can be as fast as 20 seconds and up to a couple minutes. Its roadmap is probably the most promising blockchain with future transactions hitting upwards of 10,000+ transactions per second in a decentralized format. Another possible chain that can be used in the future.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Buying Websites Forever&lt;/h2&gt;
&lt;p&gt;Currently ens domains requires renewing websites, while unstoppable domains provides them forever. This entire space is exploding, so getting a good name is becoming more and more difficult just like the traditional web. There is a very healthy resale market on &lt;a href=&quot;http://Opensea.io&quot;&gt;Opensea.io&lt;/a&gt; that folks are using to squat or resell domains purchased through unstoppable domains. If adoption keeps moving this direction, we will soon see some pretty ridiculous prices on domain names. Buying direct from unstoppable domains ranges from $10 to $100 per domain name, depending on domain ending.
&lt;img src=&quot;/images/2022/future-internet/domains.webp&quot; alt=&quot;domains&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Here is discount link for unstoppable if you are interested in picking up a domain: &lt;a href=&quot;https://unstoppabledomains.pxf.io/MX3zVM&quot;&gt;https://unstoppabledomains.pxf.io/MX3zVM&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Uploading Static Sites&lt;/h2&gt;
&lt;p&gt;Hosting your website through unstoppable domains is pretty easy, but just know you are limited on size if using their uploader. They have a 20 MB Limit!&lt;/p&gt;
&lt;p&gt;So for large static sites, simply put them all on a IPFS node local or remote and copy the IPFS hash into unstoppable domains to host ANY size of website.&lt;/p&gt;
&lt;p&gt;I personally build my entire static site using hugo because its free / open source. You can then simply upload to IPFS the entire /public folder once you do this. If you are going to go this route, I&apos;d recommend hosting an IPFS node so you can avoid the upload process entirely!&lt;/p&gt;
&lt;h2&gt;Redirect to Traditional Website&lt;/h2&gt;
&lt;p&gt;The simplist way to do this is with a meta redirect using a standard index.html (PLAIN TEXT ONLY!)&lt;/p&gt;
&lt;p&gt;index.html&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;HTML Meta Tag&amp;lt;/title&amp;gt;
    &amp;lt;meta http-equiv = &quot;refresh&quot; content = &quot;1; url = YOUR WEBSITE URL HERE&quot; /&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
      &amp;lt;p&amp;gt;YOUR WEBSITE DESCRIPTION HERE &amp;lt;/p&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&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/GERBV2Bv-A4&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, 11 Jun 2022 20:07:10 GMT</pubDate><content:encoded>&lt;p&gt;Renewing website domains, paying for web hosting, and having them expire are all going to be a thing of the past.
Using IPFS (Inter-planetary File System) is a way to store websites decentralized and without any money. How fast or how slow it will be, is determined by how popular it is with IPFS nodes.
This guide shows how to host a website, owning a web domain forever, and redirecting these domains to traditional website hosts.&lt;/p&gt;

&lt;h2&gt;IPFS - A Better Storage System&lt;/h2&gt;
&lt;p&gt;IPFS is absolutely amazing as you can run a node on anything and share your files. If they are used by other people then they will populate to their nodes and I&apos;ve shared and used video files over 1 GB in size! The main issue is there isn&apos;t many browsers that support IPFS and it is slower than normal storage right now. However, you never have to worry about hosting costs and as long as the content is accessed by others on a regular basis it will live forever!&lt;/p&gt;
&lt;h3&gt;Improving IPFS in Brave Browser&lt;/h3&gt;
&lt;p&gt;I highly recommend using IPFS Companion if you plan on doing this regularly. You don&apos;t have to run your own node, but can that is up to you. Using this add-on will help resolve IPFS addresses much faster even in Gateway only mode.&lt;/p&gt;
&lt;p&gt;Enable IPFS Companion Extension&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.ipfs.io/install/ipfs-companion/&quot;&gt;https://docs.ipfs.io/install/ipfs-companion/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After installing IPFS Companion change the following brave settings under Settings -&amp;gt; IPFS&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable IPFS Public Gateway Fallback (Not Required, but recommended)&lt;/li&gt;
&lt;li&gt;Enable IPFS Companion
&lt;img src=&quot;/images/2022/future-internet/ipfs-settings.webp&quot; alt=&quot;ipfs-settings&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Enable Blockchain domains - The Unstoppable Domains extension (In the future, this should be baked into many browsers. Brave natively supports .crypto)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://unstoppabledomains.com/extension&quot;&gt;https://unstoppabledomains.com/extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Blockchains - Not all created equal&lt;/h2&gt;
&lt;p&gt;The technology powering blockchains are amazing, but most just care about the monetary gain. I&apos;m more interested in actually using the blockchain and where all the meta data lives for decentralized web or Web3. So what blockchains have I used for this? Lets review:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ethereum was one of the original ones that is incredible slow and expensive. I feel like this has turned from a usable blockchain into something only millionaires can use. Maybe this will change in the future, but right now it isn&apos;t usable because of the cost to submit transactions. ENS Domains uses ethereum.&lt;/li&gt;
&lt;li&gt;Polygon is a bridge blockchain that drastically improves upon what ethereum started. Fees are non-existent and is very functional. Transfer times are generally about a minute. This is currently what unstoppable domains uses.&lt;/li&gt;
&lt;li&gt;Solana is not something I recommend, but is considered the fastest blockchain out there. However, It has crashed multiple times and halted completely. I am also skeptical that is even decentralized with the problems it has had. It is very easy to work on and something to watch.&lt;/li&gt;
&lt;li&gt;Cardano is probably my favorite out of all these blockchains for the future. It is very decentralized, transactions can be as fast as 20 seconds and up to a couple minutes. Its roadmap is probably the most promising blockchain with future transactions hitting upwards of 10,000+ transactions per second in a decentralized format. Another possible chain that can be used in the future.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Buying Websites Forever&lt;/h2&gt;
&lt;p&gt;Currently ens domains requires renewing websites, while unstoppable domains provides them forever. This entire space is exploding, so getting a good name is becoming more and more difficult just like the traditional web. There is a very healthy resale market on &lt;a href=&quot;http://Opensea.io&quot;&gt;Opensea.io&lt;/a&gt; that folks are using to squat or resell domains purchased through unstoppable domains. If adoption keeps moving this direction, we will soon see some pretty ridiculous prices on domain names. Buying direct from unstoppable domains ranges from $10 to $100 per domain name, depending on domain ending.
&lt;img src=&quot;/images/2022/future-internet/domains.webp&quot; alt=&quot;domains&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Here is discount link for unstoppable if you are interested in picking up a domain: &lt;a href=&quot;https://unstoppabledomains.pxf.io/MX3zVM&quot;&gt;https://unstoppabledomains.pxf.io/MX3zVM&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Uploading Static Sites&lt;/h2&gt;
&lt;p&gt;Hosting your website through unstoppable domains is pretty easy, but just know you are limited on size if using their uploader. They have a 20 MB Limit!&lt;/p&gt;
&lt;p&gt;So for large static sites, simply put them all on a IPFS node local or remote and copy the IPFS hash into unstoppable domains to host ANY size of website.&lt;/p&gt;
&lt;p&gt;I personally build my entire static site using hugo because its free / open source. You can then simply upload to IPFS the entire /public folder once you do this. If you are going to go this route, I&apos;d recommend hosting an IPFS node so you can avoid the upload process entirely!&lt;/p&gt;
&lt;h2&gt;Redirect to Traditional Website&lt;/h2&gt;
&lt;p&gt;The simplist way to do this is with a meta redirect using a standard index.html (PLAIN TEXT ONLY!)&lt;/p&gt;
&lt;p&gt;index.html&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;HTML Meta Tag&amp;lt;/title&amp;gt;
    &amp;lt;meta http-equiv = &quot;refresh&quot; content = &quot;1; url = YOUR WEBSITE URL HERE&quot; /&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body&amp;gt;
      &amp;lt;p&amp;gt;YOUR WEBSITE DESCRIPTION HERE &amp;lt;/p&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&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/GERBV2Bv-A4&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>Easily moving Linux installs</title><link>https://christitus.com/chezmoi/</link><guid isPermaLink="true">https://christitus.com/chezmoi/</guid><description>&lt;p&gt;Are you tired of having to reset all your app settings on a new install? Using a simple tool you will never have to reconfig your app settings again. Also adding new apps and programs are extremely simple and intuitive. Stop wasting your time and start using Chezmoi to restore your app settings. This isn&apos;t meant to be a system backup but a settings backup.&lt;/p&gt;

&lt;h2&gt;Why Chezmoi&lt;/h2&gt;
&lt;p&gt;Chezmoi offers the most simplistic approach and versioning that is simply is my preferred solution over the other dot file tools below. Here is a brief diagram of how it works. &lt;em&gt;Note: I do not use git from command line in my tutorial for commits and pushes&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/chezmoi/diagram.webp&quot; alt=&quot;diagram.webp&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Notes about other dot file tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GNU/Stow&lt;/strong&gt; is a very popular one, but I don&apos;t like using it because of its reliance on Symlinks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bare GIT repos&lt;/strong&gt; are also another way of doing this, but managing the files can be cumbersome&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git / Ansible playbooks&lt;/strong&gt; a great way to deploy new systems, but can be complex to maintain and keep up to date.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Home Directory Backups&lt;/strong&gt; many times end up backing up too much and overly bloat a new system or add in unwanted settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;First we install Chezmoi to the /bin folder. I recommend system wide below but you can also do the install to &lt;code&gt;~/.local/bin&lt;/code&gt; if you only want to install for current user&lt;/p&gt;
&lt;p&gt;System-wide install &lt;code&gt;/bin&lt;/code&gt; &lt;em&gt;Recommended&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;su
cd /
sh -c &quot;$(curl -fsLS chezmoi.io/get)&quot;
exit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;User install &lt;code&gt;~/.local/bin&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~/.local
sh -c &quot;$(curl -fsLS chezmoi.io/get)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Most systems have ~/.local/bin, however a few do not&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Setting up config repository&lt;/h2&gt;
&lt;p&gt;First Setup a new repository for your config files on GitHub&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/chezmoi/new-repo.webp&quot; alt=&quot;new-repo.webp&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For this example, call the repository &lt;code&gt;dotfiles&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;We now simply initialize chezmoi with that new GitHub repository&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chezmoi init https://github.com/yourusername/dotfiles
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Adding files and Applying changes&lt;/h2&gt;
&lt;p&gt;chezmoi uses a git based aliases to add files and merge them. To add something to your dotconfigs you&apos;d simply do this command as an example: &lt;code&gt;chezmoi add .bashrc&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This copies the file to the working directory ~/.local/share/chezmoi and allows it to be a part of your repository. Just like the name suggests, the working directory is where you should be doing all your edits once they are added.&lt;/p&gt;
&lt;p&gt;Once you edit your file you need to &quot;apply&quot; it back to its home so they are used with &lt;code&gt;chezmoi apply&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;What happens if you edit the &quot;original&quot; file in the home directory? simply merge that change with the working directory with &lt;code&gt;chezmoi merge filename&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now you are done for the day and you want to submit the changes to the remote repo so you can apply these changes to your other computers. You simply change directory to chezmoi with &lt;code&gt;chezmoi cd&lt;/code&gt; or &lt;code&gt;cd ~/.local/share/chezmoi&lt;/code&gt; and &lt;code&gt;git add files&lt;/code&gt; -&amp;gt; &lt;code&gt;git commit -m &quot;initial commit&quot;&lt;/code&gt; -&amp;gt; &lt;code&gt;git push&lt;/code&gt; in the command line. However, I really like the desktop application GitHub desktop and prefer to add the ~/.local/share/chezmoi directory to it and do the add, commit, and push in that GUI GitHub Directory shown below.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/chezmoi/git-desktop.webp&quot; alt=&quot;git-desktop.webp&quot; /&gt;&lt;/p&gt;
</description><pubDate>Mon, 25 Apr 2022 22:04:25 GMT</pubDate><content:encoded>&lt;p&gt;Are you tired of having to reset all your app settings on a new install? Using a simple tool you will never have to reconfig your app settings again. Also adding new apps and programs are extremely simple and intuitive. Stop wasting your time and start using Chezmoi to restore your app settings. This isn&apos;t meant to be a system backup but a settings backup.&lt;/p&gt;

&lt;h2&gt;Why Chezmoi&lt;/h2&gt;
&lt;p&gt;Chezmoi offers the most simplistic approach and versioning that is simply is my preferred solution over the other dot file tools below. Here is a brief diagram of how it works. &lt;em&gt;Note: I do not use git from command line in my tutorial for commits and pushes&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/chezmoi/diagram.webp&quot; alt=&quot;diagram.webp&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Notes about other dot file tools&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GNU/Stow&lt;/strong&gt; is a very popular one, but I don&apos;t like using it because of its reliance on Symlinks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bare GIT repos&lt;/strong&gt; are also another way of doing this, but managing the files can be cumbersome&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git / Ansible playbooks&lt;/strong&gt; a great way to deploy new systems, but can be complex to maintain and keep up to date.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Home Directory Backups&lt;/strong&gt; many times end up backing up too much and overly bloat a new system or add in unwanted settings&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;First we install Chezmoi to the /bin folder. I recommend system wide below but you can also do the install to &lt;code&gt;~/.local/bin&lt;/code&gt; if you only want to install for current user&lt;/p&gt;
&lt;p&gt;System-wide install &lt;code&gt;/bin&lt;/code&gt; &lt;em&gt;Recommended&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;su
cd /
sh -c &quot;$(curl -fsLS chezmoi.io/get)&quot;
exit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;User install &lt;code&gt;~/.local/bin&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~/.local
sh -c &quot;$(curl -fsLS chezmoi.io/get)&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Most systems have ~/.local/bin, however a few do not&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Setting up config repository&lt;/h2&gt;
&lt;p&gt;First Setup a new repository for your config files on GitHub&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/chezmoi/new-repo.webp&quot; alt=&quot;new-repo.webp&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For this example, call the repository &lt;code&gt;dotfiles&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;We now simply initialize chezmoi with that new GitHub repository&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chezmoi init https://github.com/yourusername/dotfiles
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Adding files and Applying changes&lt;/h2&gt;
&lt;p&gt;chezmoi uses a git based aliases to add files and merge them. To add something to your dotconfigs you&apos;d simply do this command as an example: &lt;code&gt;chezmoi add .bashrc&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This copies the file to the working directory ~/.local/share/chezmoi and allows it to be a part of your repository. Just like the name suggests, the working directory is where you should be doing all your edits once they are added.&lt;/p&gt;
&lt;p&gt;Once you edit your file you need to &quot;apply&quot; it back to its home so they are used with &lt;code&gt;chezmoi apply&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;What happens if you edit the &quot;original&quot; file in the home directory? simply merge that change with the working directory with &lt;code&gt;chezmoi merge filename&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now you are done for the day and you want to submit the changes to the remote repo so you can apply these changes to your other computers. You simply change directory to chezmoi with &lt;code&gt;chezmoi cd&lt;/code&gt; or &lt;code&gt;cd ~/.local/share/chezmoi&lt;/code&gt; and &lt;code&gt;git add files&lt;/code&gt; -&amp;gt; &lt;code&gt;git commit -m &quot;initial commit&quot;&lt;/code&gt; -&amp;gt; &lt;code&gt;git push&lt;/code&gt; in the command line. However, I really like the desktop application GitHub desktop and prefer to add the ~/.local/share/chezmoi directory to it and do the add, commit, and push in that GUI GitHub Directory shown below.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2022/chezmoi/git-desktop.webp&quot; alt=&quot;git-desktop.webp&quot; /&gt;&lt;/p&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>Install KVM, QEMU, and Virt-Manager on Linux</title><link>https://christitus.com/vm-setup-in-linux/</link><guid isPermaLink="true">https://christitus.com/vm-setup-in-linux/</guid><description>&lt;p&gt;This guide installs KVM/QEMU, libvirt, and the Virt-Manager desktop app on Debian, Arch Linux, or Fedora. Pick your distribution, copy the commands, and then complete the shared setup steps.&lt;/p&gt;

&lt;h2&gt;Before You Install&lt;/h2&gt;
&lt;p&gt;KVM needs Intel VT-x or AMD-V hardware virtualization. Check whether your CPU exposes either feature:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;grep -Eoc &apos;(vmx|svm)&apos; /proc/cpuinfo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Any number greater than &lt;code&gt;0&lt;/code&gt; means the CPU virtualization extensions are available. If the result is &lt;code&gt;0&lt;/code&gt;, reboot into your BIOS/UEFI settings and enable &lt;strong&gt;Intel VT-x&lt;/strong&gt;, &lt;strong&gt;Intel Virtualization Technology&lt;/strong&gt;, &lt;strong&gt;AMD-V&lt;/strong&gt;, or &lt;strong&gt;SVM Mode&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Debian&lt;/h2&gt;
&lt;p&gt;These commands install the QEMU/KVM hypervisor, libvirt, its command-line tools, and Virt-Manager:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt update
sudo apt install -y qemu-system-x86 qemu-utils libvirt-daemon-system libvirt-clients virt-manager
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Start libvirt now and automatically at boot:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl enable --now libvirtd.service
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Arch Linux&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;qemu-desktop&lt;/code&gt; package is the practical choice for running x86 virtual machines with a graphical desktop. &lt;code&gt;dnsmasq&lt;/code&gt; supplies DHCP and DNS for libvirt&apos;s default NAT network.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -Syu --needed qemu-desktop libvirt virt-manager dnsmasq
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Start libvirt now and automatically at boot:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl enable --now libvirtd.service
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Fedora&lt;/h2&gt;
&lt;p&gt;Fedora&apos;s virtualization package group installs QEMU/KVM, libvirt, Virt-Manager, and the default network configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo dnf install -y @virtualization
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Start libvirt now and automatically at boot:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl enable --now libvirtd.service
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Allow Your User to Manage Virtual Machines&lt;/h2&gt;
&lt;p&gt;Add your current user to the &lt;code&gt;libvirt&lt;/code&gt; group:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo usermod -aG libvirt &quot;$USER&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Log out and back in so the new group membership takes effect. A reboot works too.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Membership in the &lt;code&gt;libvirt&lt;/code&gt; group grants permission to manage system virtual machines. Do not add your account to broad device-access groups such as &lt;code&gt;disk&lt;/code&gt; or &lt;code&gt;input&lt;/code&gt; for this setup.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Enable the Default Virtual Network&lt;/h2&gt;
&lt;p&gt;First, check the available libvirt networks:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo virsh net-list --all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If &lt;code&gt;default&lt;/code&gt; is listed as inactive, start it and configure it to start at boot:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo virsh net-start default
sudo virsh net-autostart default
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify that &lt;code&gt;default&lt;/code&gt; now shows &lt;code&gt;active&lt;/code&gt; and &lt;code&gt;yes&lt;/code&gt; under Autostart:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo virsh net-list --all
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Verify KVM and Libvirt&lt;/h2&gt;
&lt;p&gt;Check that the KVM kernel modules are loaded. You should see &lt;code&gt;kvm_intel&lt;/code&gt; or &lt;code&gt;kvm_amd&lt;/code&gt;, plus the main &lt;code&gt;kvm&lt;/code&gt; module:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;lsmod | grep kvm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After logging back in, verify that your user can connect to the system libvirt service:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;virsh --connect qemu:///system list --all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;An empty virtual-machine list is normal on a new installation. If the command returns without a connection or permission error, the setup is working.&lt;/p&gt;
&lt;h2&gt;Create Your First Virtual Machine&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Download the ISO for the operating system you want to install.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Virtual Machine Manager&lt;/strong&gt; from your application menu, or run &lt;code&gt;virt-manager&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Make sure the connection is &lt;strong&gt;QEMU/KVM - System&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Create a new virtual machine&lt;/strong&gt;, choose your ISO, and follow the wizard.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Virt-Manager stores system VM disk images in &lt;code&gt;/var/lib/libvirt/images/&lt;/code&gt; by default.&lt;/p&gt;
&lt;h2&gt;Troubleshooting&lt;/h2&gt;
&lt;h3&gt;The Virtualization Check Returns 0&lt;/h3&gt;
&lt;p&gt;Enable VT-x or AMD-V/SVM in BIOS/UEFI. On a VM host provided by a cloud service or another hypervisor, nested virtualization must also be enabled by that provider or parent hypervisor.&lt;/p&gt;
&lt;h3&gt;The Default Network Does Not Exist&lt;/h3&gt;
&lt;p&gt;Define it from libvirt&apos;s packaged configuration, then start it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo virsh net-define /usr/share/libvirt/networks/default.xml
sudo virsh net-autostart default
sudo virsh net-start default
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Virt-Manager Cannot Connect&lt;/h3&gt;
&lt;p&gt;Confirm that libvirt is running:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;systemctl status libvirtd.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then confirm that your login session has the &lt;code&gt;libvirt&lt;/code&gt; group:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;groups
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If &lt;code&gt;libvirt&lt;/code&gt; is missing, log out completely and log back in, or reboot.&lt;/p&gt;
&lt;h2&gt;Distribution Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.debian.org/doc/manuals/debian-handbook/sect.virtualization.en.html&quot;&gt;Debian Handbook: Virtualization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.archlinux.org/title/Libvirt&quot;&gt;ArchWiki: libvirt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.fedoraproject.org/en-US/quick-docs/virtualization-getting-started/&quot;&gt;Fedora Docs: Virtualization - Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;p&gt;The video below shows the original Debian-focused version of this setup. Package names and screens may differ from the updated commands above.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/Kq849CpGd88&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, 12 Jan 2022 21:28:59 GMT</pubDate><content:encoded>&lt;p&gt;This guide installs KVM/QEMU, libvirt, and the Virt-Manager desktop app on Debian, Arch Linux, or Fedora. Pick your distribution, copy the commands, and then complete the shared setup steps.&lt;/p&gt;

&lt;h2&gt;Before You Install&lt;/h2&gt;
&lt;p&gt;KVM needs Intel VT-x or AMD-V hardware virtualization. Check whether your CPU exposes either feature:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;grep -Eoc &apos;(vmx|svm)&apos; /proc/cpuinfo
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Any number greater than &lt;code&gt;0&lt;/code&gt; means the CPU virtualization extensions are available. If the result is &lt;code&gt;0&lt;/code&gt;, reboot into your BIOS/UEFI settings and enable &lt;strong&gt;Intel VT-x&lt;/strong&gt;, &lt;strong&gt;Intel Virtualization Technology&lt;/strong&gt;, &lt;strong&gt;AMD-V&lt;/strong&gt;, or &lt;strong&gt;SVM Mode&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Debian&lt;/h2&gt;
&lt;p&gt;These commands install the QEMU/KVM hypervisor, libvirt, its command-line tools, and Virt-Manager:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt update
sudo apt install -y qemu-system-x86 qemu-utils libvirt-daemon-system libvirt-clients virt-manager
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Start libvirt now and automatically at boot:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl enable --now libvirtd.service
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Arch Linux&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;qemu-desktop&lt;/code&gt; package is the practical choice for running x86 virtual machines with a graphical desktop. &lt;code&gt;dnsmasq&lt;/code&gt; supplies DHCP and DNS for libvirt&apos;s default NAT network.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo pacman -Syu --needed qemu-desktop libvirt virt-manager dnsmasq
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Start libvirt now and automatically at boot:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl enable --now libvirtd.service
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Fedora&lt;/h2&gt;
&lt;p&gt;Fedora&apos;s virtualization package group installs QEMU/KVM, libvirt, Virt-Manager, and the default network configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo dnf install -y @virtualization
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Start libvirt now and automatically at boot:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo systemctl enable --now libvirtd.service
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Allow Your User to Manage Virtual Machines&lt;/h2&gt;
&lt;p&gt;Add your current user to the &lt;code&gt;libvirt&lt;/code&gt; group:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo usermod -aG libvirt &quot;$USER&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Log out and back in so the new group membership takes effect. A reboot works too.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Membership in the &lt;code&gt;libvirt&lt;/code&gt; group grants permission to manage system virtual machines. Do not add your account to broad device-access groups such as &lt;code&gt;disk&lt;/code&gt; or &lt;code&gt;input&lt;/code&gt; for this setup.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Enable the Default Virtual Network&lt;/h2&gt;
&lt;p&gt;First, check the available libvirt networks:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo virsh net-list --all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If &lt;code&gt;default&lt;/code&gt; is listed as inactive, start it and configure it to start at boot:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo virsh net-start default
sudo virsh net-autostart default
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify that &lt;code&gt;default&lt;/code&gt; now shows &lt;code&gt;active&lt;/code&gt; and &lt;code&gt;yes&lt;/code&gt; under Autostart:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo virsh net-list --all
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Verify KVM and Libvirt&lt;/h2&gt;
&lt;p&gt;Check that the KVM kernel modules are loaded. You should see &lt;code&gt;kvm_intel&lt;/code&gt; or &lt;code&gt;kvm_amd&lt;/code&gt;, plus the main &lt;code&gt;kvm&lt;/code&gt; module:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;lsmod | grep kvm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After logging back in, verify that your user can connect to the system libvirt service:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;virsh --connect qemu:///system list --all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;An empty virtual-machine list is normal on a new installation. If the command returns without a connection or permission error, the setup is working.&lt;/p&gt;
&lt;h2&gt;Create Your First Virtual Machine&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Download the ISO for the operating system you want to install.&lt;/li&gt;
&lt;li&gt;Open &lt;strong&gt;Virtual Machine Manager&lt;/strong&gt; from your application menu, or run &lt;code&gt;virt-manager&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Make sure the connection is &lt;strong&gt;QEMU/KVM - System&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Create a new virtual machine&lt;/strong&gt;, choose your ISO, and follow the wizard.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Virt-Manager stores system VM disk images in &lt;code&gt;/var/lib/libvirt/images/&lt;/code&gt; by default.&lt;/p&gt;
&lt;h2&gt;Troubleshooting&lt;/h2&gt;
&lt;h3&gt;The Virtualization Check Returns 0&lt;/h3&gt;
&lt;p&gt;Enable VT-x or AMD-V/SVM in BIOS/UEFI. On a VM host provided by a cloud service or another hypervisor, nested virtualization must also be enabled by that provider or parent hypervisor.&lt;/p&gt;
&lt;h3&gt;The Default Network Does Not Exist&lt;/h3&gt;
&lt;p&gt;Define it from libvirt&apos;s packaged configuration, then start it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo virsh net-define /usr/share/libvirt/networks/default.xml
sudo virsh net-autostart default
sudo virsh net-start default
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Virt-Manager Cannot Connect&lt;/h3&gt;
&lt;p&gt;Confirm that libvirt is running:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;systemctl status libvirtd.service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then confirm that your login session has the &lt;code&gt;libvirt&lt;/code&gt; group:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;groups
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If &lt;code&gt;libvirt&lt;/code&gt; is missing, log out completely and log back in, or reboot.&lt;/p&gt;
&lt;h2&gt;Distribution Documentation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.debian.org/doc/manuals/debian-handbook/sect.virtualization.en.html&quot;&gt;Debian Handbook: Virtualization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.archlinux.org/title/Libvirt&quot;&gt;ArchWiki: libvirt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.fedoraproject.org/en-US/quick-docs/virtualization-getting-started/&quot;&gt;Fedora Docs: Virtualization - Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Walkthrough Video&lt;/h2&gt;
&lt;p&gt;The video below shows the original Debian-focused version of this setup. Package names and screens may differ from the updated commands above.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/Kq849CpGd88&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>Bspwm on KDE</title><link>https://christitus.com/bspwm-on-KDE/</link><guid isPermaLink="true">https://christitus.com/bspwm-on-KDE/</guid><description>&lt;p&gt;This goes over switching the window manager of KDE to bspwm.&lt;/p&gt;

&lt;h2&gt;Dependency Installs&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install bspwm
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Create three files with the following contents&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ~/.config/bspwm
mkdir -p ~/.config/sxhkd
wget -O ~/.config/bspwm/bspwmrc https://raw.githubusercontent.com/ChrisTitusTech/BSPWM-on-KDE/main/bspwmrc
wget -O ~/.config/sxhkd/sxhkdrc https://raw.githubusercontent.com/ChrisTitusTech/BSPWM-on-KDE/main/sxhkdrc
chmod +x ~/.config/bspwm/bspwmrc
chmod +x ~/.config/sxhkd/sxhkdrc
sudo wget -O /usr/share/xsessions/plasma-bspwm.desktop https://raw.githubusercontent.com/ChrisTitusTech/BSPWM-on-KDE/main/plasma-bspwm.desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Documentation&lt;/h2&gt;
&lt;p&gt;/usr/share/xsessions/plasma-bspwm.desktop&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Desktop Entry]          
Type=XSession              
Exec=env KDEWM=/usr/bin/bspwm /usr/bin/startplasma-x11
TryExec=/usr/bin/startplasma-x11
DesktopNames=KDE         
Name=Plasma bspwm 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;bspwmrc and sxhkdrc are using both the stock example files @ &lt;code&gt;/usr/share/doc/bspwm/examples&lt;/code&gt;&lt;/p&gt;
</description><pubDate>Tue, 20 Jul 2021 19:46:40 GMT</pubDate><content:encoded>&lt;p&gt;This goes over switching the window manager of KDE to bspwm.&lt;/p&gt;

&lt;h2&gt;Dependency Installs&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install bspwm
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Create three files with the following contents&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ~/.config/bspwm
mkdir -p ~/.config/sxhkd
wget -O ~/.config/bspwm/bspwmrc https://raw.githubusercontent.com/ChrisTitusTech/BSPWM-on-KDE/main/bspwmrc
wget -O ~/.config/sxhkd/sxhkdrc https://raw.githubusercontent.com/ChrisTitusTech/BSPWM-on-KDE/main/sxhkdrc
chmod +x ~/.config/bspwm/bspwmrc
chmod +x ~/.config/sxhkd/sxhkdrc
sudo wget -O /usr/share/xsessions/plasma-bspwm.desktop https://raw.githubusercontent.com/ChrisTitusTech/BSPWM-on-KDE/main/plasma-bspwm.desktop
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Documentation&lt;/h2&gt;
&lt;p&gt;/usr/share/xsessions/plasma-bspwm.desktop&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Desktop Entry]          
Type=XSession              
Exec=env KDEWM=/usr/bin/bspwm /usr/bin/startplasma-x11
TryExec=/usr/bin/startplasma-x11
DesktopNames=KDE         
Name=Plasma bspwm 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;bspwmrc and sxhkdrc are using both the stock example files @ &lt;code&gt;/usr/share/doc/bspwm/examples&lt;/code&gt;&lt;/p&gt;
</content:encoded></item><item><title>Rocky Linux</title><link>https://christitus.com/rocky-linux/</link><guid isPermaLink="true">https://christitus.com/rocky-linux/</guid><description>&lt;p&gt;This guide goes over setting up KDE on Rocky Linux from a base server install with no GUI.&lt;/p&gt;

&lt;h2&gt;Download and Install Server Setup&lt;/h2&gt;
&lt;p&gt;Download the Rocky Linux ISO from: &lt;a href=&quot;https://rockylinux.org/download/&quot;&gt;https://rockylinux.org/download/&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;Note: I downloaded DVD 8GB, which is offline and no downloading&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;During Setup, I recommend a dedicated drive and choosing only SERVER with NO GUI!&lt;/p&gt;
&lt;p&gt;Go ahead and walkthrough the rest of the install&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;h3&gt;Enable PowerTools and RPMFusion Repositories&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf upgrade -y
sudo dnf install --nogpgcheck https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm
sudo dnf config-manager --set-enabled PowerTools
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: If you can&apos;t install PowerTools with config-manager, you can manually enable it through the repo file in &lt;code&gt;/etc/yum.repos.d&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Dependencies&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf update -y
sudo dnf install xorg-x11-server-Xorg xorg-x11-xauth xorg-x11-apps -y
sudo dnf install plasma-desktop kscreen sddm kde-gtk-config dolphin konsole kate -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Set Graphical Interface on Startup&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl set-default graphical.target
sudo systemctl enable sddm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: If using GTK Apps, I highly recommend building and installing &lt;code&gt;Kvantum&lt;/code&gt; from &lt;code&gt;git clone https://github.com/tsujan/Kvantum.git&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;NVIDIA Cards ONLY&lt;/h4&gt;
&lt;p&gt;If you have an nvidia card it can be tricky to install so I recommend doing it before Xorg is started and you have a GUI.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First install Dev tools below with dkms and kernel-devel&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf groupinstall &quot;Development Tools&quot;
sudo dnf install kernel-devel epel-release
sudo dnf install dkms
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download NVIDIA Drivers from &lt;a href=&quot;https://www.nvidia.com/en-us/drivers/unix/&quot;&gt;https://www.nvidia.com/en-us/drivers/unix/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Disable nouveau by editing &lt;code&gt;/etc/default/grub&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;GRUB_CMDLINE_LINUX=&quot;crashkernel=auto rhgb quiet nouveau.modeset=0&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Write out the changes (Note Choose BIOS OR EFI... NOT BOTH!)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;BIOS:
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
EFI:
$ sudo grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;(GUI Only) If you booted into KDE or GUI interface from TTY2 (Ctrl+Alt+F2) login and type &lt;code&gt;sudo systemctl isolate multi-user.target&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now Install NVIDIA and reboot &lt;code&gt;sudo bash NVIDIA-Linux-x86_64-*&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Setup your Development Tools for Builds&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf groupinstall &quot;Development Tools&quot;
sudo dnf install cmake gcc-c++ libX11-devel libXext-devel qt5-qtx11extras-devel qt5-qtbase-devel qt5-qtsvg-devel qt5-qttools-devel kf5-kwindowsystem-devel make procps-ng curl file git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Homebrew&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;p&gt;&lt;em&gt;Note: Installer messed up and put it in &lt;code&gt;/home/linuxbrew/.linuxbrew&lt;/code&gt; I moved this to my home folder and linked the brew executable to &lt;code&gt;~/bin&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Add Homebrew to the end bash or zsh rc file&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;eval $(~/.linuxbrew/bin/brew shellenv)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Install Tools of your Choice&lt;/h3&gt;
&lt;p&gt;This is a base install so you will need a file explorer, terminal, browser, etc.&lt;/p&gt;
&lt;p&gt;Choose whatever you want!&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf install terminator firefox zsh
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;VSCodium on Rocky Linux&lt;/h4&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/VSCodium/vscodium&quot;&gt;https://github.com/VSCodium/vscodium&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo rpm --import https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg
printf &quot;[gitlab.com_paulcarroty_vscodium_repo]\nname=gitlab.com_paulcarroty_vscodium_repo\nbaseurl=https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/rpms/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg&quot; |sudo tee -a /etc/yum.repos.d/vscodium.repo
sudo dnf install codium
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;New Packages with AppImage or Flatpak&lt;/h4&gt;
&lt;p&gt;Install flatpak with &lt;code&gt;sudo dnf install flatpak&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;See What package are availiable: &lt;a href=&quot;https://flathub.org/home&quot;&gt;https://flathub.org/home&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install the flathub repo on Rocky Linux &lt;code&gt;flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;GIMP 2.10 &lt;code&gt;sudo flatpak install https://flathub.org/repo/appstream/org.gimp.GIMP.flatpakref&lt;/code&gt;&lt;br /&gt;
Steam &lt;code&gt;sudo flatpak install flathub com.valvesoftware.Steam&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;The Rocky Difference&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Security by default&lt;/em&gt; - Be aware this uses Enforced SELinux and Firewalld on install. This means applications will more often than not be sandboxed and will block all incoming traffic&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Stability in mind&lt;/em&gt; Yes, the packages are old by default but it means they stable&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Productivity Machine&lt;/em&gt; No constant updates, it just works...&lt;/p&gt;
</description><pubDate>Mon, 03 May 2021 17:12:16 GMT</pubDate><content:encoded>&lt;p&gt;This guide goes over setting up KDE on Rocky Linux from a base server install with no GUI.&lt;/p&gt;

&lt;h2&gt;Download and Install Server Setup&lt;/h2&gt;
&lt;p&gt;Download the Rocky Linux ISO from: &lt;a href=&quot;https://rockylinux.org/download/&quot;&gt;https://rockylinux.org/download/&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;Note: I downloaded DVD 8GB, which is offline and no downloading&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;During Setup, I recommend a dedicated drive and choosing only SERVER with NO GUI!&lt;/p&gt;
&lt;p&gt;Go ahead and walkthrough the rest of the install&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;h3&gt;Enable PowerTools and RPMFusion Repositories&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf upgrade -y
sudo dnf install --nogpgcheck https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf install --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm
sudo dnf config-manager --set-enabled PowerTools
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: If you can&apos;t install PowerTools with config-manager, you can manually enable it through the repo file in &lt;code&gt;/etc/yum.repos.d&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Dependencies&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf update -y
sudo dnf install xorg-x11-server-Xorg xorg-x11-xauth xorg-x11-apps -y
sudo dnf install plasma-desktop kscreen sddm kde-gtk-config dolphin konsole kate -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Set Graphical Interface on Startup&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl set-default graphical.target
sudo systemctl enable sddm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: If using GTK Apps, I highly recommend building and installing &lt;code&gt;Kvantum&lt;/code&gt; from &lt;code&gt;git clone https://github.com/tsujan/Kvantum.git&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;NVIDIA Cards ONLY&lt;/h4&gt;
&lt;p&gt;If you have an nvidia card it can be tricky to install so I recommend doing it before Xorg is started and you have a GUI.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First install Dev tools below with dkms and kernel-devel&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf groupinstall &quot;Development Tools&quot;
sudo dnf install kernel-devel epel-release
sudo dnf install dkms
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Download NVIDIA Drivers from &lt;a href=&quot;https://www.nvidia.com/en-us/drivers/unix/&quot;&gt;https://www.nvidia.com/en-us/drivers/unix/&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Disable nouveau by editing &lt;code&gt;/etc/default/grub&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;GRUB_CMDLINE_LINUX=&quot;crashkernel=auto rhgb quiet nouveau.modeset=0&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Write out the changes (Note Choose BIOS OR EFI... NOT BOTH!)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;BIOS:
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
EFI:
$ sudo grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;(GUI Only) If you booted into KDE or GUI interface from TTY2 (Ctrl+Alt+F2) login and type &lt;code&gt;sudo systemctl isolate multi-user.target&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Now Install NVIDIA and reboot &lt;code&gt;sudo bash NVIDIA-Linux-x86_64-*&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Setup your Development Tools for Builds&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf groupinstall &quot;Development Tools&quot;
sudo dnf install cmake gcc-c++ libX11-devel libXext-devel qt5-qtx11extras-devel qt5-qtbase-devel qt5-qtsvg-devel qt5-qttools-devel kf5-kwindowsystem-devel make procps-ng curl file git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Homebrew&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;p&gt;&lt;em&gt;Note: Installer messed up and put it in &lt;code&gt;/home/linuxbrew/.linuxbrew&lt;/code&gt; I moved this to my home folder and linked the brew executable to &lt;code&gt;~/bin&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Add Homebrew to the end bash or zsh rc file&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;eval $(~/.linuxbrew/bin/brew shellenv)
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Install Tools of your Choice&lt;/h3&gt;
&lt;p&gt;This is a base install so you will need a file explorer, terminal, browser, etc.&lt;/p&gt;
&lt;p&gt;Choose whatever you want!&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf install terminator firefox zsh
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;VSCodium on Rocky Linux&lt;/h4&gt;
&lt;p&gt;Source: &lt;a href=&quot;https://github.com/VSCodium/vscodium&quot;&gt;https://github.com/VSCodium/vscodium&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo rpm --import https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg
printf &quot;[gitlab.com_paulcarroty_vscodium_repo]\nname=gitlab.com_paulcarroty_vscodium_repo\nbaseurl=https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/rpms/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/-/raw/master/pub.gpg&quot; |sudo tee -a /etc/yum.repos.d/vscodium.repo
sudo dnf install codium
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;New Packages with AppImage or Flatpak&lt;/h4&gt;
&lt;p&gt;Install flatpak with &lt;code&gt;sudo dnf install flatpak&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;See What package are availiable: &lt;a href=&quot;https://flathub.org/home&quot;&gt;https://flathub.org/home&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Install the flathub repo on Rocky Linux &lt;code&gt;flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;GIMP 2.10 &lt;code&gt;sudo flatpak install https://flathub.org/repo/appstream/org.gimp.GIMP.flatpakref&lt;/code&gt;&lt;br /&gt;
Steam &lt;code&gt;sudo flatpak install flathub com.valvesoftware.Steam&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;The Rocky Difference&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Security by default&lt;/em&gt; - Be aware this uses Enforced SELinux and Firewalld on install. This means applications will more often than not be sandboxed and will block all incoming traffic&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Stability in mind&lt;/em&gt; Yes, the packages are old by default but it means they stable&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Productivity Machine&lt;/em&gt; No constant updates, it just works...&lt;/p&gt;
</content:encoded></item><item><title>Creating a Website on Raspberry Pi</title><link>https://christitus.com/pi-website/</link><guid isPermaLink="true">https://christitus.com/pi-website/</guid><description>&lt;p&gt;This is a guide on how to create a website on a Raspberry Pi. This will teach you the basics of using a LAMP stack.&lt;/p&gt;

&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;This is perfect for setting up your first website and learning not only administering a wordpress site, but learning Linux. You will need a Raspberry Pi, a couple hours, and a computer to download the image on. The Raspberry Pi (RPI) is a perfect device for learning these things.&lt;/p&gt;
&lt;p&gt;Also check out the official projects site from RaspberryPi
Source: &lt;a href=&quot;https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress&quot;&gt;https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Downloading the RPI Imager&lt;/h2&gt;
&lt;p&gt;Download the Imager for your operating system. This supports all three OS&apos;s (Windows, Mac, and Linux).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.raspberrypi.org/downloads/&quot;&gt;https://www.raspberrypi.org/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run and Install the Imager&lt;/li&gt;
&lt;li&gt;Select Raspberry Pi OS (other) -&amp;gt; Raspberry Pi OS Lite (32-bit)
&lt;ul&gt;
&lt;li&gt;Note: This is the one with NO Desktop Environment&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Insert the SD Card into your Computer&lt;/li&gt;
&lt;li&gt;Click Write&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Install Dependencies&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install apache2 php mariadb-server php-mysql -y
sudo service apache2 restart
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Install Wordpress&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;cd /var/www/html/
sudo rm *
sudo wget http://wordpress.org/latest.tar.gz
sudo tar xzf latest.tar.gz
sudo mv wordpress/* .
sudo rm -rf wordpress latest.tar.gz
sudo chown -R www-data: .
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Setup WordPress Database&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo mysql_secure_installation
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;You will be asked Enter current password for root (enter for none): — press Enter.&lt;/li&gt;
&lt;li&gt;Type in Y and press Enter to Set root password?.&lt;/li&gt;
&lt;li&gt;Type in a password at the New password: prompt, and press Enter. Important: remember this root password, as you will need it later to set up WordPress.&lt;/li&gt;
&lt;li&gt;Type in Y to Remove anonymous users.&lt;/li&gt;
&lt;li&gt;Type in Y to Disallow root login remotely.&lt;/li&gt;
&lt;li&gt;Type in Y to Remove test database and access to it.&lt;/li&gt;
&lt;li&gt;Type in Y to Reload privilege tables now.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;When complete, you will see the message All done! and Thanks for using MariaDB!.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Login to MySQL with &lt;code&gt;sudo mysql -uroot -p&lt;/code&gt; and enter the password you set above.&lt;/p&gt;
&lt;p&gt;You will see the terminal prompt change and you can enter the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;create database wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO &apos;root&apos;@&apos;localhost&apos; IDENTIFIED BY &apos;YOURPASSWORD&apos;;
FLUSH PRIVILEGES;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;IMPORTANT: Exit SQL Prompt with &lt;code&gt;Ctrl + D&lt;/code&gt; and change &lt;code&gt;YOURPASSWORD&lt;/code&gt; above to your password!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Reboot with &lt;code&gt;sudo reboot&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Wordpress Configuration&lt;/h2&gt;
&lt;p&gt;Remote Access can be done with SSH from any system. Find your Raspberry Pi IP with &lt;code&gt;ip a&lt;/code&gt;. This IP is only your Local IP and not accessible from the outside world.&lt;/p&gt;
&lt;p&gt;Initial setup can be done from any computer in the same network as the RPI. Type your pi ip address from above into your browsers address bar.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example: &lt;a href=&quot;https://192.168.1.123&quot;&gt;https://192.168.1.123&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Remote Login after initial setup append &lt;code&gt;/wp-admin&lt;/code&gt; to the address&lt;/p&gt;
&lt;p&gt;_Example: &lt;a href=&quot;https://192.168.1.123/wp-admin_&quot;&gt;https://192.168.1.123/wp-admin_&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Recommended Server settings&lt;/h2&gt;
&lt;p&gt;Finally we need to make some quality of life improvements so you don&apos;t have weird looking addresses. This is called &quot;Friendly Permalinks&quot;.&lt;/p&gt;
&lt;p&gt;In the &lt;em&gt;WP Admin Portal&lt;/em&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to &lt;em&gt;Setting&lt;/em&gt;, then &lt;em&gt;Permalinks&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Select the &lt;em&gt;Post name&lt;/em&gt; option and click &lt;em&gt;Save Changes&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From &lt;em&gt;SSH or Terminal on the RPI&lt;/em&gt; you need to enter the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo a2enmod rewrite
sudo nano /etc/apache2/sites-available/000-default.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;000-default.conf edits (Add this midway in the file)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;Directory &quot;/var/www/html&quot;&amp;gt;
    AllowOverride All
&amp;lt;/Directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the File by press Ctrl + O and Exit with Ctrl + X&lt;/p&gt;
&lt;p&gt;Now restart Apache Web with &lt;code&gt;sudo service apache2 restart&lt;/code&gt;&lt;/p&gt;
</description><pubDate>Tue, 20 Apr 2021 15:02:56 GMT</pubDate><content:encoded>&lt;p&gt;This is a guide on how to create a website on a Raspberry Pi. This will teach you the basics of using a LAMP stack.&lt;/p&gt;

&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;This is perfect for setting up your first website and learning not only administering a wordpress site, but learning Linux. You will need a Raspberry Pi, a couple hours, and a computer to download the image on. The Raspberry Pi (RPI) is a perfect device for learning these things.&lt;/p&gt;
&lt;p&gt;Also check out the official projects site from RaspberryPi
Source: &lt;a href=&quot;https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress&quot;&gt;https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Downloading the RPI Imager&lt;/h2&gt;
&lt;p&gt;Download the Imager for your operating system. This supports all three OS&apos;s (Windows, Mac, and Linux).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.raspberrypi.org/downloads/&quot;&gt;https://www.raspberrypi.org/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run and Install the Imager&lt;/li&gt;
&lt;li&gt;Select Raspberry Pi OS (other) -&amp;gt; Raspberry Pi OS Lite (32-bit)
&lt;ul&gt;
&lt;li&gt;Note: This is the one with NO Desktop Environment&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Insert the SD Card into your Computer&lt;/li&gt;
&lt;li&gt;Click Write&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Install Dependencies&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install apache2 php mariadb-server php-mysql -y
sudo service apache2 restart
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Install Wordpress&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;cd /var/www/html/
sudo rm *
sudo wget http://wordpress.org/latest.tar.gz
sudo tar xzf latest.tar.gz
sudo mv wordpress/* .
sudo rm -rf wordpress latest.tar.gz
sudo chown -R www-data: .
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Setup WordPress Database&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo mysql_secure_installation
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;You will be asked Enter current password for root (enter for none): — press Enter.&lt;/li&gt;
&lt;li&gt;Type in Y and press Enter to Set root password?.&lt;/li&gt;
&lt;li&gt;Type in a password at the New password: prompt, and press Enter. Important: remember this root password, as you will need it later to set up WordPress.&lt;/li&gt;
&lt;li&gt;Type in Y to Remove anonymous users.&lt;/li&gt;
&lt;li&gt;Type in Y to Disallow root login remotely.&lt;/li&gt;
&lt;li&gt;Type in Y to Remove test database and access to it.&lt;/li&gt;
&lt;li&gt;Type in Y to Reload privilege tables now.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;When complete, you will see the message All done! and Thanks for using MariaDB!.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Login to MySQL with &lt;code&gt;sudo mysql -uroot -p&lt;/code&gt; and enter the password you set above.&lt;/p&gt;
&lt;p&gt;You will see the terminal prompt change and you can enter the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;create database wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO &apos;root&apos;@&apos;localhost&apos; IDENTIFIED BY &apos;YOURPASSWORD&apos;;
FLUSH PRIVILEGES;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;IMPORTANT: Exit SQL Prompt with &lt;code&gt;Ctrl + D&lt;/code&gt; and change &lt;code&gt;YOURPASSWORD&lt;/code&gt; above to your password!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Reboot with &lt;code&gt;sudo reboot&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Wordpress Configuration&lt;/h2&gt;
&lt;p&gt;Remote Access can be done with SSH from any system. Find your Raspberry Pi IP with &lt;code&gt;ip a&lt;/code&gt;. This IP is only your Local IP and not accessible from the outside world.&lt;/p&gt;
&lt;p&gt;Initial setup can be done from any computer in the same network as the RPI. Type your pi ip address from above into your browsers address bar.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example: &lt;a href=&quot;https://192.168.1.123&quot;&gt;https://192.168.1.123&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Remote Login after initial setup append &lt;code&gt;/wp-admin&lt;/code&gt; to the address&lt;/p&gt;
&lt;p&gt;_Example: &lt;a href=&quot;https://192.168.1.123/wp-admin_&quot;&gt;https://192.168.1.123/wp-admin_&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Recommended Server settings&lt;/h2&gt;
&lt;p&gt;Finally we need to make some quality of life improvements so you don&apos;t have weird looking addresses. This is called &quot;Friendly Permalinks&quot;.&lt;/p&gt;
&lt;p&gt;In the &lt;em&gt;WP Admin Portal&lt;/em&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Go to &lt;em&gt;Setting&lt;/em&gt;, then &lt;em&gt;Permalinks&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Select the &lt;em&gt;Post name&lt;/em&gt; option and click &lt;em&gt;Save Changes&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From &lt;em&gt;SSH or Terminal on the RPI&lt;/em&gt; you need to enter the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo a2enmod rewrite
sudo nano /etc/apache2/sites-available/000-default.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;000-default.conf edits (Add this midway in the file)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;Directory &quot;/var/www/html&quot;&amp;gt;
    AllowOverride All
&amp;lt;/Directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Save the File by press Ctrl + O and Exit with Ctrl + X&lt;/p&gt;
&lt;p&gt;Now restart Apache Web with &lt;code&gt;sudo service apache2 restart&lt;/code&gt;&lt;/p&gt;
</content:encoded></item><item><title>GRUB Bootloader Themes</title><link>https://christitus.com/bootloader-themes/</link><guid isPermaLink="true">https://christitus.com/bootloader-themes/</guid><description>&lt;p&gt;Give the GRUB boot menu a complete visual overhaul with eight themes ranging from clean and minimal to retro games and hacker-inspired interfaces.&lt;/p&gt;

&lt;h2&gt;Quick install&lt;/h2&gt;
&lt;p&gt;This collection is for Linux systems that already use GRUB 2. You need Git, &lt;code&gt;sudo&lt;/code&gt; access, and a working internet connection.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/christitustech/bootloader-themes
cd bootloader-themes
sudo ./install.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Choose a theme from the interactive menu, let the installer rebuild the GRUB configuration, and reboot to see it. You can rerun &lt;code&gt;sudo ./install.sh&lt;/code&gt; whenever you want to switch themes.&lt;/p&gt;
&lt;p&gt;The project and current installer are available at &lt;a href=&quot;https://github.com/christitustech/bootloader-themes&quot;&gt;ChrisTitusTech/bootloader-themes&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The installer runs as root and changes bootloader configuration. Confirm that your system uses GRUB, review &lt;code&gt;install.sh&lt;/code&gt;, and keep bootable recovery media available before changing any boot configuration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;What the installer changes&lt;/h2&gt;
&lt;p&gt;The script does more than copy a background image. It:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creates an initial backup at &lt;code&gt;/etc/default/grub.bak&lt;/code&gt; if one does not already exist.&lt;/li&gt;
&lt;li&gt;Copies the selected theme into &lt;code&gt;/boot/grub/themes/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Sets &lt;code&gt;GRUB_TIMEOUT_STYLE&lt;/code&gt; to &lt;code&gt;menu&lt;/code&gt; and the timeout to 60 seconds.&lt;/li&gt;
&lt;li&gt;Points &lt;code&gt;GRUB_THEME&lt;/code&gt; at the selected theme and sets &lt;code&gt;GRUB_GFXMODE&lt;/code&gt; to &lt;code&gt;auto&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Regenerates the GRUB configuration with the command available on your distribution.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The collection contains snapshots of community themes. Check each linked upstream project when you want the newest version or theme-specific customization options.&lt;/p&gt;
&lt;h2&gt;Included themes&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Theme&lt;/th&gt;
&lt;th&gt;Style&lt;/th&gt;
&lt;th&gt;Good choice when you want&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CyberRe&lt;/td&gt;
&lt;td&gt;Red and cyan futuristic HUD&lt;/td&gt;
&lt;td&gt;A bold, high-contrast boot screen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cyberpunk&lt;/td&gt;
&lt;td&gt;Neon game-inspired interface&lt;/td&gt;
&lt;td&gt;Colorful menus with operating-system icons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fallout&lt;/td&gt;
&lt;td&gt;Green retro terminal&lt;/td&gt;
&lt;td&gt;A Pip-Boy-style boot experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vimix&lt;/td&gt;
&lt;td&gt;Clean dark minimalism&lt;/td&gt;
&lt;td&gt;A polished theme that stays out of the way&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shodan&lt;/td&gt;
&lt;td&gt;Dark data-stream interface&lt;/td&gt;
&lt;td&gt;A minimal hacker and terminal aesthetic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DedSec&lt;/td&gt;
&lt;td&gt;Watch Dogs-inspired hacker UI&lt;/td&gt;
&lt;td&gt;A detailed 1080p menu and broad icon support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Minegrub&lt;/td&gt;
&lt;td&gt;Minecraft main menu&lt;/td&gt;
&lt;td&gt;A playful, game-inspired boot screen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BSOL&lt;/td&gt;
&lt;td&gt;Blue Screen of Life&lt;/td&gt;
&lt;td&gt;A Windows blue-screen parody with modern fonts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;CyberRe&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2021/02-bootloader/cyberre.webp&quot; alt=&quot;CyberRe GRUB theme with a red and cyan futuristic interface&quot; /&gt;&lt;/p&gt;
&lt;p&gt;CyberRe frames the operating-system list inside a futuristic control panel. Its red highlights, cyan system details, and large selection area make it one of the most visually dramatic options in the collection.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://www.gnome-look.org/p/1420727/&quot;&gt;CyberRe on GNOME-Look&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Cyberpunk&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2021/02-bootloader/cyberpunk.webp&quot; alt=&quot;Cyberpunk GRUB theme with a neon operating-system menu&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Cyberpunk uses a neon yellow selection bar, a blue menu frame, and game-inspired background art. The included icon set covers many Linux distributions as well as Windows, macOS, recovery tools, and other boot entries.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://www.gnome-look.org/p/1429443/&quot;&gt;Cyberpunk on GNOME-Look&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Fallout&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2021/02-bootloader/fallout.webp&quot; alt=&quot;Fallout GRUB theme styled like a green monochrome terminal&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Fallout recreates the green monochrome look of a Vault-Tec terminal, complete with scan lines, a Vault Boy graphic, and distribution-specific icons. It is easy to read while still looking completely different from stock GRUB.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://www.gnome-look.org/p/1230882/&quot;&gt;Fallout on GNOME-Look&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Vimix&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2021/02-bootloader/vimix.webp&quot; alt=&quot;Vimix GRUB theme with a clean dark laptop interface&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vimix is the understated option. It combines a dark centered menu, subtle geometric artwork, and recognizable operating-system icons without making the boot screen feel busy.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://www.gnome-look.org/p/1009236/&quot;&gt;Vimix on GNOME-Look&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Shodan&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2021/02-bootloader/shodan.webp&quot; alt=&quot;Shodan GRUB theme with a dark data-stream background&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Shodan places a compact green terminal menu over a dark data-stream background. It works well for anyone who wants a Matrix-like or cybersecurity aesthetic with a simple text-focused menu.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://www.gnome-look.org/p/1251112/&quot;&gt;Shodan on GNOME-Look&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;DedSec&lt;/h3&gt;
&lt;p&gt;DedSec is inspired by the fictional hacker collective from the Watch Dogs games. The bundled 1080p layout includes a dark menu, custom fonts, a progress bar, and icons for a wide range of Linux distributions and boot tools.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://github.com/VandalByte/dedsec-grub2-theme&quot;&gt;VandalByte/dedsec-grub2-theme&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Minegrub&lt;/h3&gt;
&lt;p&gt;Minegrub recreates the Minecraft main menu with block textures, Minecraft-style fonts, splash text, and a &quot;Joining world&quot; boot countdown. The bundled layout is tuned for four boot entries; if its bottom bar overlaps your menu, adjust the documented position in the installed &lt;code&gt;theme.txt&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://github.com/Lxtharia/minegrub-theme&quot;&gt;Lxtharia/minegrub-theme&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;BSOL&lt;/h3&gt;
&lt;p&gt;BSOL stands for Blue Screen of Life. It turns the familiar Windows blue-screen visual language into a clean GRUB menu with Victor Mono fonts, a large countdown, and extensive operating-system icon coverage.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://github.com/harishnkr/bsol&quot;&gt;harishnkr/bsol&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Restore the previous GRUB configuration&lt;/h2&gt;
&lt;p&gt;If you need to undo the configuration changes, first confirm that the installer-created backup exists, then restore it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo cp /etc/default/grub.bak /etc/default/grub
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Regenerate the boot configuration with the command for your distribution:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Debian and Ubuntu
sudo update-grub

# Arch and distributions using /boot/grub
sudo grub-mkconfig -o /boot/grub/grub.cfg

# Fedora, openSUSE, and distributions using /boot/grub2
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reboot after the command completes successfully. If your distribution stores &lt;code&gt;grub.cfg&lt;/code&gt; somewhere else, use its documented path instead of guessing.&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/BAyzHP1Cqb0&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 Mar 2021 20:53:09 GMT</pubDate><content:encoded>&lt;p&gt;Give the GRUB boot menu a complete visual overhaul with eight themes ranging from clean and minimal to retro games and hacker-inspired interfaces.&lt;/p&gt;

&lt;h2&gt;Quick install&lt;/h2&gt;
&lt;p&gt;This collection is for Linux systems that already use GRUB 2. You need Git, &lt;code&gt;sudo&lt;/code&gt; access, and a working internet connection.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/christitustech/bootloader-themes
cd bootloader-themes
sudo ./install.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Choose a theme from the interactive menu, let the installer rebuild the GRUB configuration, and reboot to see it. You can rerun &lt;code&gt;sudo ./install.sh&lt;/code&gt; whenever you want to switch themes.&lt;/p&gt;
&lt;p&gt;The project and current installer are available at &lt;a href=&quot;https://github.com/christitustech/bootloader-themes&quot;&gt;ChrisTitusTech/bootloader-themes&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The installer runs as root and changes bootloader configuration. Confirm that your system uses GRUB, review &lt;code&gt;install.sh&lt;/code&gt;, and keep bootable recovery media available before changing any boot configuration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;What the installer changes&lt;/h2&gt;
&lt;p&gt;The script does more than copy a background image. It:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creates an initial backup at &lt;code&gt;/etc/default/grub.bak&lt;/code&gt; if one does not already exist.&lt;/li&gt;
&lt;li&gt;Copies the selected theme into &lt;code&gt;/boot/grub/themes/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Sets &lt;code&gt;GRUB_TIMEOUT_STYLE&lt;/code&gt; to &lt;code&gt;menu&lt;/code&gt; and the timeout to 60 seconds.&lt;/li&gt;
&lt;li&gt;Points &lt;code&gt;GRUB_THEME&lt;/code&gt; at the selected theme and sets &lt;code&gt;GRUB_GFXMODE&lt;/code&gt; to &lt;code&gt;auto&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Regenerates the GRUB configuration with the command available on your distribution.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The collection contains snapshots of community themes. Check each linked upstream project when you want the newest version or theme-specific customization options.&lt;/p&gt;
&lt;h2&gt;Included themes&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Theme&lt;/th&gt;
&lt;th&gt;Style&lt;/th&gt;
&lt;th&gt;Good choice when you want&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CyberRe&lt;/td&gt;
&lt;td&gt;Red and cyan futuristic HUD&lt;/td&gt;
&lt;td&gt;A bold, high-contrast boot screen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cyberpunk&lt;/td&gt;
&lt;td&gt;Neon game-inspired interface&lt;/td&gt;
&lt;td&gt;Colorful menus with operating-system icons&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fallout&lt;/td&gt;
&lt;td&gt;Green retro terminal&lt;/td&gt;
&lt;td&gt;A Pip-Boy-style boot experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vimix&lt;/td&gt;
&lt;td&gt;Clean dark minimalism&lt;/td&gt;
&lt;td&gt;A polished theme that stays out of the way&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shodan&lt;/td&gt;
&lt;td&gt;Dark data-stream interface&lt;/td&gt;
&lt;td&gt;A minimal hacker and terminal aesthetic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DedSec&lt;/td&gt;
&lt;td&gt;Watch Dogs-inspired hacker UI&lt;/td&gt;
&lt;td&gt;A detailed 1080p menu and broad icon support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Minegrub&lt;/td&gt;
&lt;td&gt;Minecraft main menu&lt;/td&gt;
&lt;td&gt;A playful, game-inspired boot screen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BSOL&lt;/td&gt;
&lt;td&gt;Blue Screen of Life&lt;/td&gt;
&lt;td&gt;A Windows blue-screen parody with modern fonts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;CyberRe&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2021/02-bootloader/cyberre.webp&quot; alt=&quot;CyberRe GRUB theme with a red and cyan futuristic interface&quot; /&gt;&lt;/p&gt;
&lt;p&gt;CyberRe frames the operating-system list inside a futuristic control panel. Its red highlights, cyan system details, and large selection area make it one of the most visually dramatic options in the collection.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://www.gnome-look.org/p/1420727/&quot;&gt;CyberRe on GNOME-Look&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Cyberpunk&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2021/02-bootloader/cyberpunk.webp&quot; alt=&quot;Cyberpunk GRUB theme with a neon operating-system menu&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Cyberpunk uses a neon yellow selection bar, a blue menu frame, and game-inspired background art. The included icon set covers many Linux distributions as well as Windows, macOS, recovery tools, and other boot entries.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://www.gnome-look.org/p/1429443/&quot;&gt;Cyberpunk on GNOME-Look&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Fallout&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2021/02-bootloader/fallout.webp&quot; alt=&quot;Fallout GRUB theme styled like a green monochrome terminal&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Fallout recreates the green monochrome look of a Vault-Tec terminal, complete with scan lines, a Vault Boy graphic, and distribution-specific icons. It is easy to read while still looking completely different from stock GRUB.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://www.gnome-look.org/p/1230882/&quot;&gt;Fallout on GNOME-Look&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Vimix&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2021/02-bootloader/vimix.webp&quot; alt=&quot;Vimix GRUB theme with a clean dark laptop interface&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Vimix is the understated option. It combines a dark centered menu, subtle geometric artwork, and recognizable operating-system icons without making the boot screen feel busy.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://www.gnome-look.org/p/1009236/&quot;&gt;Vimix on GNOME-Look&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Shodan&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2021/02-bootloader/shodan.webp&quot; alt=&quot;Shodan GRUB theme with a dark data-stream background&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Shodan places a compact green terminal menu over a dark data-stream background. It works well for anyone who wants a Matrix-like or cybersecurity aesthetic with a simple text-focused menu.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://www.gnome-look.org/p/1251112/&quot;&gt;Shodan on GNOME-Look&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;DedSec&lt;/h3&gt;
&lt;p&gt;DedSec is inspired by the fictional hacker collective from the Watch Dogs games. The bundled 1080p layout includes a dark menu, custom fonts, a progress bar, and icons for a wide range of Linux distributions and boot tools.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://github.com/VandalByte/dedsec-grub2-theme&quot;&gt;VandalByte/dedsec-grub2-theme&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Minegrub&lt;/h3&gt;
&lt;p&gt;Minegrub recreates the Minecraft main menu with block textures, Minecraft-style fonts, splash text, and a &quot;Joining world&quot; boot countdown. The bundled layout is tuned for four boot entries; if its bottom bar overlaps your menu, adjust the documented position in the installed &lt;code&gt;theme.txt&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://github.com/Lxtharia/minegrub-theme&quot;&gt;Lxtharia/minegrub-theme&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;BSOL&lt;/h3&gt;
&lt;p&gt;BSOL stands for Blue Screen of Life. It turns the familiar Windows blue-screen visual language into a clean GRUB menu with Victor Mono fonts, a large countdown, and extensive operating-system icon coverage.&lt;/p&gt;
&lt;p&gt;Upstream theme: &lt;a href=&quot;https://github.com/harishnkr/bsol&quot;&gt;harishnkr/bsol&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Restore the previous GRUB configuration&lt;/h2&gt;
&lt;p&gt;If you need to undo the configuration changes, first confirm that the installer-created backup exists, then restore it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo cp /etc/default/grub.bak /etc/default/grub
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Regenerate the boot configuration with the command for your distribution:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Debian and Ubuntu
sudo update-grub

# Arch and distributions using /boot/grub
sudo grub-mkconfig -o /boot/grub/grub.cfg

# Fedora, openSUSE, and distributions using /boot/grub2
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Reboot after the command completes successfully. If your distribution stores &lt;code&gt;grub.cfg&lt;/code&gt; somewhere else, use its documented path instead of guessing.&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/BAyzHP1Cqb0&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>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>Disable Snaps</title><link>https://christitus.com/disable-snaps/</link><guid isPermaLink="true">https://christitus.com/disable-snaps/</guid><description>&lt;p&gt;This goes over how to Disable Snaps and making sure it doesn&apos;t automatically reinstall.&lt;/p&gt;

&lt;h2&gt;List and Uninstall Snaps&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;snap list # This shows you what snaps are installed
sudo snap remove program # Fill in all snaps listed above
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Purge Snaps and Block Reinstall&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt purge snapd
sudo apt-mark hold snapd
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Verify Uninstall&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;apt list --install | grep snap
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check your Output for any snap packages&lt;/p&gt;
</description><pubDate>Tue, 08 Sep 2020 18:44:58 GMT</pubDate><content:encoded>&lt;p&gt;This goes over how to Disable Snaps and making sure it doesn&apos;t automatically reinstall.&lt;/p&gt;

&lt;h2&gt;List and Uninstall Snaps&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;snap list # This shows you what snaps are installed
sudo snap remove program # Fill in all snaps listed above
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Purge Snaps and Block Reinstall&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt purge snapd
sudo apt-mark hold snapd
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Verify Uninstall&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;apt list --install | grep snap
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Check your Output for any snap packages&lt;/p&gt;
</content:encoded></item><item><title>How to Use SSH with Github</title><link>https://christitus.com/ssh-github/</link><guid isPermaLink="true">https://christitus.com/ssh-github/</guid><description>&lt;p&gt;Setting Up SSH Authentication with GitHub for Secure Access with 2FA GitHub Accounts&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ssh.webp&quot; alt=&quot;ssh&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Creating SSH Keys&lt;/h2&gt;
&lt;p&gt;Type this in to create GitHub Keys for your computer&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh-keygen -t rsa -b 4096 -C &quot;your_email@example.com&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I typically save this in ~/.ssh/github&lt;/li&gt;
&lt;li&gt;You don&apos;t have to put a password if you aren&apos;t worried about security&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Adding the New Key to GitHub and Local SSH-Agent&lt;/h2&gt;
&lt;p&gt;Type the following on the local machine to add your key to the agent.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;eval &quot;$(ssh-agent -s)&quot;
ssh-add ~/.ssh/github
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Copy the contents of &lt;code&gt;~/.ssh/github.pub&lt;/code&gt; to the new key field in GitHub. If you have xclip installed type this &lt;code&gt;cat ~/.ssh/github.pub | xclip -sel clip&lt;/code&gt; to copy the contents.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/github-ssh.webp&quot; alt=&quot;github-pub&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Test GitHub SSH Access&lt;/h2&gt;
&lt;p&gt;Type the following to verify you have completed the setup properly&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -T git@github.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;SSH GitHub Clone Syntax and Updating Repositories&lt;/h2&gt;
&lt;p&gt;Here is how to clone new repositories instead of using https://&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone git@github.com:USERNAME/Repo.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Update existing repositories to use SSH instead of https&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote set-url origin git@github.com:USERNAME/Repo.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is the best way to clone and push updates to repositories if you have 2-Factor enabled on your GitHub account.&lt;/p&gt;
</description><pubDate>Thu, 03 Sep 2020 15:57:46 GMT</pubDate><content:encoded>&lt;p&gt;Setting Up SSH Authentication with GitHub for Secure Access with 2FA GitHub Accounts&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/ssh.webp&quot; alt=&quot;ssh&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Creating SSH Keys&lt;/h2&gt;
&lt;p&gt;Type this in to create GitHub Keys for your computer&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh-keygen -t rsa -b 4096 -C &quot;your_email@example.com&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I typically save this in ~/.ssh/github&lt;/li&gt;
&lt;li&gt;You don&apos;t have to put a password if you aren&apos;t worried about security&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Adding the New Key to GitHub and Local SSH-Agent&lt;/h2&gt;
&lt;p&gt;Type the following on the local machine to add your key to the agent.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;eval &quot;$(ssh-agent -s)&quot;
ssh-add ~/.ssh/github
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Copy the contents of &lt;code&gt;~/.ssh/github.pub&lt;/code&gt; to the new key field in GitHub. If you have xclip installed type this &lt;code&gt;cat ~/.ssh/github.pub | xclip -sel clip&lt;/code&gt; to copy the contents.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/github-ssh.webp&quot; alt=&quot;github-pub&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Test GitHub SSH Access&lt;/h2&gt;
&lt;p&gt;Type the following to verify you have completed the setup properly&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh -T git@github.com
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;SSH GitHub Clone Syntax and Updating Repositories&lt;/h2&gt;
&lt;p&gt;Here is how to clone new repositories instead of using https://&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone git@github.com:USERNAME/Repo.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Update existing repositories to use SSH instead of https&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote set-url origin git@github.com:USERNAME/Repo.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is the best way to clone and push updates to repositories if you have 2-Factor enabled on your GitHub account.&lt;/p&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>Geforce Now Linux</title><link>https://christitus.com/geforce-now-linux/</link><guid isPermaLink="true">https://christitus.com/geforce-now-linux/</guid><description>&lt;p&gt;You can now use Geforce Now on your Linux machine with this quick little trick.&lt;/p&gt;

&lt;h2&gt;Install User Agent Switcher Extension&lt;/h2&gt;
&lt;p&gt;Install the &lt;a href=&quot;https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg?hl=en-US&quot;&gt;User Agent Switcher extension&lt;/a&gt; for any Chromium-based browser. I used this on Brave and it worked perfectly.&lt;/p&gt;
&lt;p&gt;Install this Extension and launch options!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/geforcenow/options.webp&quot; alt=&quot;options.webp&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Add Chrome OS User Agent&lt;/h2&gt;
&lt;p&gt;Add the User Agent String:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Mozilla/5.0 (X11; CrOS x86_64 13099.85.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.110 Safari/537.36
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/geforcenow/agentid.webp&quot; alt=&quot;agentid.webp&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Switch Agent and Launch&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Click on the Extension icon and select COS or whatever flag you made.&lt;/li&gt;
&lt;li&gt;Then Launch &lt;a href=&quot;https://play.geforcenow.com/&quot;&gt;https://play.geforcenow.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Fri, 21 Aug 2020 19:45:41 GMT</pubDate><content:encoded>&lt;p&gt;You can now use Geforce Now on your Linux machine with this quick little trick.&lt;/p&gt;

&lt;h2&gt;Install User Agent Switcher Extension&lt;/h2&gt;
&lt;p&gt;Install the &lt;a href=&quot;https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg?hl=en-US&quot;&gt;User Agent Switcher extension&lt;/a&gt; for any Chromium-based browser. I used this on Brave and it worked perfectly.&lt;/p&gt;
&lt;p&gt;Install this Extension and launch options!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/geforcenow/options.webp&quot; alt=&quot;options.webp&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Add Chrome OS User Agent&lt;/h2&gt;
&lt;p&gt;Add the User Agent String:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Mozilla/5.0 (X11; CrOS x86_64 13099.85.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.110 Safari/537.36
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/geforcenow/agentid.webp&quot; alt=&quot;agentid.webp&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Switch Agent and Launch&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Click on the Extension icon and select COS or whatever flag you made.&lt;/li&gt;
&lt;li&gt;Then Launch &lt;a href=&quot;https://play.geforcenow.com/&quot;&gt;https://play.geforcenow.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Secure Linux</title><link>https://christitus.com/secure-linux/</link><guid isPermaLink="true">https://christitus.com/secure-linux/</guid><description>&lt;p&gt;This article covers basic security and settings I do with every Linux installation.&lt;/p&gt;

&lt;h2&gt;Check for Drovorub Malware&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/drovorub/drovorub.webp&quot; alt=&quot;drovorub&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;touch testfile
echo “ASDFZXCV:hf:testfile” &amp;gt; /dev/zero
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;If the testfile disappears... you are infected&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Check for unsigned kernel modules&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;for mod in $(lsmod | tail -n +2 | cut -d&apos; &apos; -f1); do modinfo ${mod} | grep -q &quot;signature&quot; || echo &quot;no signature for module: ${mod}&quot; ; done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;If you see vbox or nvidia modules, these are for VirtualBox and NVidia Drivers respectively&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Secure Boot&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/drovorub/secure-boot.webp&quot; alt=&quot;secure-boot&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Secure Boot forces checks for kernel module signatures and is good not only for blocking Drovorub-style malware, but also prevents Evil Maid attacks as well. However, it can be complex and also make using bootable USB drives difficult. &lt;em&gt;Note: UEFI Boot Required... No Legacy/CSM.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Easy Way to Install&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo mokutil --enable-validation # Remember the password!
sudo mokutil --sb-state # Checks if Secure Boot is enabled
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*Note: I used the enable validation on Debian based systems and it worked right out of the box&lt;/p&gt;
&lt;h3&gt;Hard Way to Install&lt;/h3&gt;
&lt;p&gt;Hard way involves signing packages that aren&apos;t stock which you might need on your system or if you dual boot. Check out the following guide from the ArchWiki: &lt;a href=&quot;https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface/Secure_Boot&quot;&gt;https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface/Secure_Boot&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Security Settings for All Linux Installs&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/github.webp&quot; alt=&quot;github&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I created a github script to make this easier but I wanted to break down what this script does. Secure-Linux Project &lt;a href=&quot;https://github.com/ChrisTitusTech/secure-linux/blob/master/secure.sh&quot;&gt;https://github.com/ChrisTitusTech/secure-linux/blob/master/secure.sh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Before running this script install ufw and fail2ban packages&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This script is broken into 3 parts: ufw, sysctl.conf modifications, and fail2ban. Ufw stands for Uncomplicated Firewall and is fantastic for adding to every install. This script opens http and https, while limiting SSH to only a couple connections per second. The sysctl modifications helps harden your system by preventing spoofing and man in the middle attacks. Fail2ban is the final piece and possibly my favorite. This package see any traffic that is failing authentication attempts repeatedly or is malicious in nature (DDoS) and records the IP then blocks it for a period of time.&lt;/p&gt;
&lt;p&gt;Other things I&apos;d recommend not mentioned... SELinux! Look it up because it is amazing. You can also use this on debian if you&apos;d like, but a smaller package called AppArmor is generally used on those types of distributions.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is not a all inclusive guide on securing your Linux system, but it is a good starting point that I do on pretty much every computer. I highly recommend you take these instructions and expand them to suit your needs.&lt;/p&gt;
</description><pubDate>Tue, 18 Aug 2020 18:02:25 GMT</pubDate><content:encoded>&lt;p&gt;This article covers basic security and settings I do with every Linux installation.&lt;/p&gt;

&lt;h2&gt;Check for Drovorub Malware&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/drovorub/drovorub.webp&quot; alt=&quot;drovorub&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;touch testfile
echo “ASDFZXCV:hf:testfile” &amp;gt; /dev/zero
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;If the testfile disappears... you are infected&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Check for unsigned kernel modules&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;for mod in $(lsmod | tail -n +2 | cut -d&apos; &apos; -f1); do modinfo ${mod} | grep -q &quot;signature&quot; || echo &quot;no signature for module: ${mod}&quot; ; done
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;If you see vbox or nvidia modules, these are for VirtualBox and NVidia Drivers respectively&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Secure Boot&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/drovorub/secure-boot.webp&quot; alt=&quot;secure-boot&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Secure Boot forces checks for kernel module signatures and is good not only for blocking Drovorub-style malware, but also prevents Evil Maid attacks as well. However, it can be complex and also make using bootable USB drives difficult. &lt;em&gt;Note: UEFI Boot Required... No Legacy/CSM.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Easy Way to Install&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo mokutil --enable-validation # Remember the password!
sudo mokutil --sb-state # Checks if Secure Boot is enabled
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*Note: I used the enable validation on Debian based systems and it worked right out of the box&lt;/p&gt;
&lt;h3&gt;Hard Way to Install&lt;/h3&gt;
&lt;p&gt;Hard way involves signing packages that aren&apos;t stock which you might need on your system or if you dual boot. Check out the following guide from the ArchWiki: &lt;a href=&quot;https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface/Secure_Boot&quot;&gt;https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface/Secure_Boot&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Security Settings for All Linux Installs&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/github.webp&quot; alt=&quot;github&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I created a github script to make this easier but I wanted to break down what this script does. Secure-Linux Project &lt;a href=&quot;https://github.com/ChrisTitusTech/secure-linux/blob/master/secure.sh&quot;&gt;https://github.com/ChrisTitusTech/secure-linux/blob/master/secure.sh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Before running this script install ufw and fail2ban packages&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This script is broken into 3 parts: ufw, sysctl.conf modifications, and fail2ban. Ufw stands for Uncomplicated Firewall and is fantastic for adding to every install. This script opens http and https, while limiting SSH to only a couple connections per second. The sysctl modifications helps harden your system by preventing spoofing and man in the middle attacks. Fail2ban is the final piece and possibly my favorite. This package see any traffic that is failing authentication attempts repeatedly or is malicious in nature (DDoS) and records the IP then blocks it for a period of time.&lt;/p&gt;
&lt;p&gt;Other things I&apos;d recommend not mentioned... SELinux! Look it up because it is amazing. You can also use this on debian if you&apos;d like, but a smaller package called AppArmor is generally used on those types of distributions.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;This is not a all inclusive guide on securing your Linux system, but it is a good starting point that I do on pretty much every computer. I highly recommend you take these instructions and expand them to suit your needs.&lt;/p&gt;
</content:encoded></item><item><title>Raspberry Pi Laptop</title><link>https://christitus.com/raspberry-pi-laptop/</link><guid isPermaLink="true">https://christitus.com/raspberry-pi-laptop/</guid><description>&lt;p&gt;This post goes over the CrowPi 2 Laptop. This is a modular laptop for the raspberry pi that is simply amazing and showcases all that you can do with the pi.&lt;/p&gt;

&lt;h2&gt;Using Elecrow CrowPi Image&lt;/h2&gt;
&lt;p&gt;The original custom Raspbian image that CrowPi used is no longer available from Elecrow.&lt;/p&gt;
&lt;h2&gt;Programming Lessons&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/crowpi/learning.webp&quot; alt=&quot;learning&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The interface for learning both Python and Scratch operate portions of the CrowPi such as making a sound or turning on one of the LEDs. While you can load the CrowPi 2 image on regular pi&apos;s without the laptop a lot of lessons would not be meaningful. That said the Minecraft section was fantastic no matter if you were using the CrowPi or not.&lt;/p&gt;
&lt;p&gt;Other interfaces such as Arduino or Microbit do require that component which isn&apos;t included. Since both these products can operating pretty much anything you can think up in the real world, it makes sense that you&apos;d want to purchase these parts separately as they will vary widely from project to project. I mentioned in my YouTube I wanted to do automated door locks in a future project which I&apos;d use Arduino parts to accomplish.&lt;/p&gt;
&lt;p&gt;As far as starting to learn and understand python, I thought this wasn&apos;t the best starting spot. If you or your student has never touched or seen python, I&apos;d highly recommend intro lessons from &lt;a href=&quot;https://codecombat.com/&quot;&gt;https://codecombat.com/&lt;/a&gt; which are free and a great way to get your feet wet with Python before trying something like CrowPi 2 Python lessons.&lt;/p&gt;
&lt;h2&gt;Retro Gaming&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/crowpi/retro.webp&quot; alt=&quot;retro&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The retro gaming aspect is something that is very familiar to the pi. I went ahead and did a custom RetroPie install only compiling SNES with Emulation Station and put that directly on the crow pi. If I were going to play a LOT of games on this, I&apos;d highly recommend using a dedicated SD card for Retro pi so you can get maximum performance as running the crow pi desktop and applications along with the emulators will take away from some of the performance when emulating newer hardware like N64 / PS1 games. However, If you are just doing old school games like NES and SNES you won&apos;t need to. The one thing I noticed was that it wasn&apos;t already integrated and if you aren&apos;t already familiar with RetroPi this can be a challenging thing to add if you don&apos;t know Linux.&lt;/p&gt;
&lt;p&gt;Learn more about RetroPie here: &lt;a href=&quot;https://retropie.org.uk/&quot;&gt;https://retropie.org.uk/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Overall Impressions&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/crowpi/crowpi2.webp&quot; alt=&quot;crowpi2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I love this laptop and am looking forward to making some lesson plans for the upcoming school year to teach my kids about it. This is the perfect product to experiment and learn about a variety of things in technology. Ever since the Raspberry Pi came out, I have been looking for this type of laptop to fill this need of showcasing all that the pi is capable of and the Crow Pi 2 exceeded all my expectations.&lt;/p&gt;
&lt;p&gt;Learn more about the CrowPi 2 here: &lt;a href=&quot;https://www.kickstarter.com/projects/elecrow/crowpi2-steam-education-platformand-raspberry-pi-laptop&quot;&gt;Kickstarter Page&lt;/a&gt; and &lt;a href=&quot;https://www.elecrow.com/development-kit.html&quot;&gt;Official Site&lt;/a&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/uZmiWQbOBDw&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, 12 Aug 2020 15:19:20 GMT</pubDate><content:encoded>&lt;p&gt;This post goes over the CrowPi 2 Laptop. This is a modular laptop for the raspberry pi that is simply amazing and showcases all that you can do with the pi.&lt;/p&gt;

&lt;h2&gt;Using Elecrow CrowPi Image&lt;/h2&gt;
&lt;p&gt;The original custom Raspbian image that CrowPi used is no longer available from Elecrow.&lt;/p&gt;
&lt;h2&gt;Programming Lessons&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/crowpi/learning.webp&quot; alt=&quot;learning&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The interface for learning both Python and Scratch operate portions of the CrowPi such as making a sound or turning on one of the LEDs. While you can load the CrowPi 2 image on regular pi&apos;s without the laptop a lot of lessons would not be meaningful. That said the Minecraft section was fantastic no matter if you were using the CrowPi or not.&lt;/p&gt;
&lt;p&gt;Other interfaces such as Arduino or Microbit do require that component which isn&apos;t included. Since both these products can operating pretty much anything you can think up in the real world, it makes sense that you&apos;d want to purchase these parts separately as they will vary widely from project to project. I mentioned in my YouTube I wanted to do automated door locks in a future project which I&apos;d use Arduino parts to accomplish.&lt;/p&gt;
&lt;p&gt;As far as starting to learn and understand python, I thought this wasn&apos;t the best starting spot. If you or your student has never touched or seen python, I&apos;d highly recommend intro lessons from &lt;a href=&quot;https://codecombat.com/&quot;&gt;https://codecombat.com/&lt;/a&gt; which are free and a great way to get your feet wet with Python before trying something like CrowPi 2 Python lessons.&lt;/p&gt;
&lt;h2&gt;Retro Gaming&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/crowpi/retro.webp&quot; alt=&quot;retro&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The retro gaming aspect is something that is very familiar to the pi. I went ahead and did a custom RetroPie install only compiling SNES with Emulation Station and put that directly on the crow pi. If I were going to play a LOT of games on this, I&apos;d highly recommend using a dedicated SD card for Retro pi so you can get maximum performance as running the crow pi desktop and applications along with the emulators will take away from some of the performance when emulating newer hardware like N64 / PS1 games. However, If you are just doing old school games like NES and SNES you won&apos;t need to. The one thing I noticed was that it wasn&apos;t already integrated and if you aren&apos;t already familiar with RetroPi this can be a challenging thing to add if you don&apos;t know Linux.&lt;/p&gt;
&lt;p&gt;Learn more about RetroPie here: &lt;a href=&quot;https://retropie.org.uk/&quot;&gt;https://retropie.org.uk/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Overall Impressions&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/crowpi/crowpi2.webp&quot; alt=&quot;crowpi2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I love this laptop and am looking forward to making some lesson plans for the upcoming school year to teach my kids about it. This is the perfect product to experiment and learn about a variety of things in technology. Ever since the Raspberry Pi came out, I have been looking for this type of laptop to fill this need of showcasing all that the pi is capable of and the Crow Pi 2 exceeded all my expectations.&lt;/p&gt;
&lt;p&gt;Learn more about the CrowPi 2 here: &lt;a href=&quot;https://www.kickstarter.com/projects/elecrow/crowpi2-steam-education-platformand-raspberry-pi-laptop&quot;&gt;Kickstarter Page&lt;/a&gt; and &lt;a href=&quot;https://www.elecrow.com/development-kit.html&quot;&gt;Official Site&lt;/a&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/uZmiWQbOBDw&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 Ultimate Linux Gaming Guide</title><link>https://christitus.com/ultimate-linux-gaming-guide/</link><guid isPermaLink="true">https://christitus.com/ultimate-linux-gaming-guide/</guid><description>&lt;p&gt;This guide goes over setting up your Linux system for gaming. I will include multiple setup instructions for various Linux distributions.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2020/gaming-guide/gaming.webp&quot; alt=&quot;gaming&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This guide will broken into parts that you will need to verify on your system. Each part, should be checked to guarantee an optimal experience.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Video Drivers&lt;/h2&gt;
&lt;p&gt;Just like any operating system, having the latest drivers helps with performance in most games.&lt;/p&gt;
&lt;h3&gt;Ubuntu Based Distributions&lt;/h3&gt;
&lt;p&gt;Enable 32-bit libraries&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dpkg --add-architecture i386 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/amd-title.webp&quot; alt=&quot;AMD&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;AMD Mesa Driver Install&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:kisak/kisak-mesa -y
sudo apt update
sudo apt install libgl1-mesa-dri:i386 mesa-vulkan-drivers mesa-vulkan-drivers:i386 -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Did you run into an error? Make sure you are running Ubuntu 20, Linux Mint 20, or Pop OS 20! - Older versions are not recommended&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/nvidia-title.webp&quot; alt=&quot;nVidia&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;Nvidia Proprietary Driver Install&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update
sudo apt install nvidia-driver-495 libnvidia-gl-495 libnvidia-gl-495:i386 libvulkan1 libvulkan1:i386 -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*Note: Not working? Are you using a recent nVidia card? I recommend at least GTX 900 Series or Above!&lt;/p&gt;
&lt;h3&gt;Arch Based Distributions&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Enable Multilib for 32- bit support&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;/etc/pacman.conf&lt;/code&gt; &lt;em&gt;Note: you can remove the # to enable multilib shown below&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[multilib]
Include = /etc/pacman.d/mirrorlist
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sudo pacman -S lib32-mesa vulkan-radeon lib32-vulkan-radeon vulkan-icd-loader lib32-vulkan-icd-loader -y
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;Custom Linux Kernel Benchmarks&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/gaming-guide/custom-kernel.svg&quot; alt=&quot;custom-kernel&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Xanmod (Debian-based Only)&lt;/h3&gt;
&lt;p&gt;Official Site: &lt;a href=&quot;https://xanmod.org&quot;&gt;https://xanmod.org&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &apos;deb http://deb.xanmod.org releases main&apos; | sudo tee /etc/apt/sources.list.d/xanmod-kernel.list &amp;amp;&amp;amp; wget -qO - https://dl.xanmod.org/gpg.key | sudo apt-key add -
sudo apt update &amp;amp;&amp;amp; sudo apt install linux-xanmod -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Liquorix (Debian-based Only)&lt;/h3&gt;
&lt;p&gt;Official Site: &lt;a href=&quot;https://liquorix.net&quot;&gt;https://liquorix.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Debian Prerequisites (No PPA)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;codename=&quot;$(find /etc/apt -type f -name &apos;*.list&apos; | xargs grep -E &apos;^deb&apos; | awk &apos;{print $3}&apos; | grep -Eo &apos;^[a-z]+&apos; | sort | uniq -c | sort -n | tail -n1 | grep -Eo &apos;[a-z]+$&apos;)&quot; &amp;amp;&amp;amp; sudo apt-get install apt-transport-https curl &amp;amp;&amp;amp; echo -e &quot;deb http://liquorix.net/debian $codename main\ndeb-src http://liquorix.net/debian $codename main\n\n# Mirrors:\n#\n# Unit193 - France\n# deb http://mirror.unit193.net/liquorix $codename main\n# deb-src http://mirror.unit193.net/liquorix $codename main&quot; | sudo tee /etc/apt/sources.list.d/liquorix.list &amp;amp;&amp;amp; curl &apos;https://liquorix.net/linux-liquorix.pub&apos; | sudo apt-key add - &amp;amp;&amp;amp; sudo apt-get update -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ubuntu based Prerequisites (PPA):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:damentz/liquorix &amp;amp;&amp;amp; sudo apt-get update -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;64-bit Install:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64 -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Zen (Arch-based Only)&lt;/h3&gt;
&lt;p&gt;Built into Arch Linux and part of the official pacman repositories. This does a lot of the same tweaks as Liquorix but for Arch based distributions.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacman -S linux-zen -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Mainline (Debian Bleeding Edge)&lt;/h3&gt;
&lt;p&gt;Source Project: &lt;a href=&quot;https://github.com/pimlie/ubuntu-mainline-kernel.sh&quot;&gt;https://github.com/pimlie/ubuntu-mainline-kernel.sh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This will update a debian stable release to the latest official kernel.&lt;/p&gt;
&lt;h4&gt;Installation&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;apt install wget -y
wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh
chmod +x ubuntu-mainline-kernel.sh
sudo mv ubuntu-mainline-kernel.sh /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Usage&lt;/h4&gt;
&lt;p&gt;From terminal type any of the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ubuntu-mainline-kernel.sh -c # Check if Newer Kernel available
ubuntu-mainline-kernel.sh -i # Install latest kernel
ubuntu-mainline-kernel.sh -l # List locally installed kernels
ubuntu-mainline-kernel.sh -u # Uninstall mainline kernel
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;ACO - Faster Compiling (AMD Only)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/gaming-guide/aco.webp&quot; alt=&quot;aco&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is where Linus Tech Tips recently covered - Linux gaming is BETTER than windows? on June 17, 2020 &lt;a href=&quot;https://youtu.be/6T_-HMkgxt0&quot;&gt;https://youtu.be/6T_-HMkgxt0&lt;/a&gt; and I covered last year - Mesa ACO Linux | The Future is Now! on November 20, 2019 &lt;a href=&quot;https://youtu.be/fm_mzPBnWB0&quot;&gt;https://youtu.be/fm_mzPBnWB0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Basically this changes the compiling from LLVM to ACO which is considerably faster. The installation process is quite a bit easier now as well compared to my video. You do need up-to-date drivers mesa 20+ and edit &lt;code&gt;/etc/environment&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Add this to &lt;code&gt;/etc/environment&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RADV_PERFTEST=aco
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;/images/wine.webp&quot; alt=&quot;wine&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Wine Dependancies and Lutris&lt;/h2&gt;
&lt;p&gt;There are several packages that wine, proton and lutris game installs need. I recommend installing all the dependancies before installing lutris.&lt;/p&gt;
&lt;h3&gt;Ubuntu/Mint/Pop OS! 20&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;wget -nc https://dl.winehq.org/wine-builds/winehq.key
sudo apt-key add winehq.key
sudo add-apt-repository &apos;deb https://dl.winehq.org/wine-builds/ubuntu/ focal main&apos; -y
sudo add-apt-repository ppa:lutris-team/lutris -y
sudo apt update
sudo apt-get install --install-recommends winehq-staging -y
sudo apt-get install libgnutls30:i386 libldap-2.4-2:i386 libgpg-error0:i386 libxml2:i386 libasound2-plugins:i386 libsdl2-2.0-0:i386 libfreetype6:i386 libdbus-1-3:i386 libsqlite3-0:i386 -y
sudo apt-get install lutris -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Arch-Based Distros&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo pacman -S wine-staging giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap gnutls lib32-gnutls mpg123 lib32-mpg123 openal lib32-openal v4l-utils lib32-v4l-utils libpulse lib32-libpulse libgpg-error lib32-libgpg-error alsa-plugins lib32-alsa-plugins alsa-lib lib32-alsa-lib libjpeg-turbo lib32-libjpeg-turbo sqlite lib32-sqlite libxcomposite lib32-libxcomposite libxinerama lib32-libgcrypt libgcrypt lib32-libxinerama ncurses lib32-ncurses opencl-icd-loader lib32-opencl-icd-loader libxslt lib32-libxslt libva lib32-libva gtk3 lib32-gtk3 gst-plugins-base-libs lib32-gst-plugins-base-libs vulkan-icd-loader lib32-vulkan-icd-loader lutris -y
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;ESync - Helps Game Overhead&lt;/h2&gt;
&lt;p&gt;Check to see if esync is enabled already (most distributions do by default)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ulimit -Hn
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If this returns more than 500,000 than ESYNC IS ENABLED! If not, proceed with these instructions:&lt;br /&gt;
Change the following files and add this line to the bottom&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/systemd/system.conf&lt;/code&gt; &amp;amp; &lt;code&gt;/etc/systemd/user.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DefaultLimitNOFILE=524288
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;/etc/security/limits.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;username hard nofile 524288
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Change username to your username!!!&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/gaming-guide/gamemode.webp&quot; alt=&quot;gamemode&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;GameMode - No CPU Throttling&lt;/h2&gt;
&lt;p&gt;GitHub Source Project: &lt;a href=&quot;https://github.com/FeralInteractive/gamemode&quot;&gt;https://github.com/FeralInteractive/gamemode&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Ubuntu/Debian Dependencies&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;apt install meson libsystemd-dev pkg-config ninja-build git libdbus-1-dev libinih-dev dbus-user-session -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Arch Dependencies&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;pacman -S meson systemd git dbus -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Build and Install GameMode&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/FeralInteractive/gamemode.git
cd gamemode
git checkout 1.5.1 # omit to build the master branch
./bootstrap.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Uninstall GameMode&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;systemctl --user stop gamemoded.service
ninja uninstall -C builddir
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;GameMode Usage&lt;/h3&gt;
&lt;p&gt;There are multiple ways to Use GameMode&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lutris&lt;/strong&gt; - Under settings you can enable GameMode for all games you launch&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Steam&lt;/strong&gt; - Go to Launch options for the game of choice and type in &lt;code&gt;gamemoderun %command%&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminal&lt;/strong&gt; - type &lt;code&gt;gamemoderun ./game&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gnome Tool&lt;/strong&gt; - If you use GNOME Desktop Environment install this extension: &lt;a href=&quot;https://extensions.gnome.org/extension/1852/gamemode/&quot;&gt;https://extensions.gnome.org/extension/1852/gamemode/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/gaming-guide/proton.webp&quot; alt=&quot;proton&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Custom Proton&lt;/h2&gt;
&lt;p&gt;The stock steam proton is rather old and behind the Wine team. Which means there are a lot of performance tweaks and improvements that you aren&apos;t getting yet. This is why I recommend everyone install Custom proton as I find the releases a considerable improvement when gaming in Steam.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note: DO NOT USE STEAM IN A FLATPAK! You will lose some performance and modifications are more difficult!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Source Project: &lt;a href=&quot;https://github.com/GloriousEggroll/proton-ge-custom#manual&quot;&gt;https://github.com/GloriousEggroll/proton-ge-custom#manual&lt;/a&gt;&lt;br /&gt;
Auto-Install Project: &lt;a href=&quot;https://github.com/Termuellinator/ProtonUpdater&quot;&gt;https://github.com/Termuellinator/ProtonUpdater&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For Installation, we will use the ProtonUpdater script on GitHub.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~
wget https://raw.githubusercontent.com/Termuellinator/ProtonUpdater/master/cproton.sh
sudo chmod +x cproton.sh
./cproton.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&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/xvrft9ULvho&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;Doing these tweaks or just some of them will make a drastic difference when it comes to Gaming on Linux. I personally use all of the tweaks, but sometimes I end up not using the Custom kernel if I have issues with drivers like nvidia sometimes does not like it.&lt;/p&gt;
</description><pubDate>Tue, 14 Jul 2020 19:27:23 GMT</pubDate><content:encoded>&lt;p&gt;This guide goes over setting up your Linux system for gaming. I will include multiple setup instructions for various Linux distributions.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/2020/gaming-guide/gaming.webp&quot; alt=&quot;gaming&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This guide will broken into parts that you will need to verify on your system. Each part, should be checked to guarantee an optimal experience.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Video Drivers&lt;/h2&gt;
&lt;p&gt;Just like any operating system, having the latest drivers helps with performance in most games.&lt;/p&gt;
&lt;h3&gt;Ubuntu Based Distributions&lt;/h3&gt;
&lt;p&gt;Enable 32-bit libraries&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dpkg --add-architecture i386 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/amd-title.webp&quot; alt=&quot;AMD&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;AMD Mesa Driver Install&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:kisak/kisak-mesa -y
sudo apt update
sudo apt install libgl1-mesa-dri:i386 mesa-vulkan-drivers mesa-vulkan-drivers:i386 -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Did you run into an error? Make sure you are running Ubuntu 20, Linux Mint 20, or Pop OS 20! - Older versions are not recommended&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/nvidia-title.webp&quot; alt=&quot;nVidia&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;Nvidia Proprietary Driver Install&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update
sudo apt install nvidia-driver-495 libnvidia-gl-495 libnvidia-gl-495:i386 libvulkan1 libvulkan1:i386 -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*Note: Not working? Are you using a recent nVidia card? I recommend at least GTX 900 Series or Above!&lt;/p&gt;
&lt;h3&gt;Arch Based Distributions&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Enable Multilib for 32- bit support&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;/etc/pacman.conf&lt;/code&gt; &lt;em&gt;Note: you can remove the # to enable multilib shown below&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[multilib]
Include = /etc/pacman.d/mirrorlist
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sudo pacman -S lib32-mesa vulkan-radeon lib32-vulkan-radeon vulkan-icd-loader lib32-vulkan-icd-loader -y
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;Custom Linux Kernel Benchmarks&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/gaming-guide/custom-kernel.svg&quot; alt=&quot;custom-kernel&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Xanmod (Debian-based Only)&lt;/h3&gt;
&lt;p&gt;Official Site: &lt;a href=&quot;https://xanmod.org&quot;&gt;https://xanmod.org&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &apos;deb http://deb.xanmod.org releases main&apos; | sudo tee /etc/apt/sources.list.d/xanmod-kernel.list &amp;amp;&amp;amp; wget -qO - https://dl.xanmod.org/gpg.key | sudo apt-key add -
sudo apt update &amp;amp;&amp;amp; sudo apt install linux-xanmod -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Liquorix (Debian-based Only)&lt;/h3&gt;
&lt;p&gt;Official Site: &lt;a href=&quot;https://liquorix.net&quot;&gt;https://liquorix.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Debian Prerequisites (No PPA)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;codename=&quot;$(find /etc/apt -type f -name &apos;*.list&apos; | xargs grep -E &apos;^deb&apos; | awk &apos;{print $3}&apos; | grep -Eo &apos;^[a-z]+&apos; | sort | uniq -c | sort -n | tail -n1 | grep -Eo &apos;[a-z]+$&apos;)&quot; &amp;amp;&amp;amp; sudo apt-get install apt-transport-https curl &amp;amp;&amp;amp; echo -e &quot;deb http://liquorix.net/debian $codename main\ndeb-src http://liquorix.net/debian $codename main\n\n# Mirrors:\n#\n# Unit193 - France\n# deb http://mirror.unit193.net/liquorix $codename main\n# deb-src http://mirror.unit193.net/liquorix $codename main&quot; | sudo tee /etc/apt/sources.list.d/liquorix.list &amp;amp;&amp;amp; curl &apos;https://liquorix.net/linux-liquorix.pub&apos; | sudo apt-key add - &amp;amp;&amp;amp; sudo apt-get update -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ubuntu based Prerequisites (PPA):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:damentz/liquorix &amp;amp;&amp;amp; sudo apt-get update -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;64-bit Install:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64 -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Zen (Arch-based Only)&lt;/h3&gt;
&lt;p&gt;Built into Arch Linux and part of the official pacman repositories. This does a lot of the same tweaks as Liquorix but for Arch based distributions.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pacman -S linux-zen -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Mainline (Debian Bleeding Edge)&lt;/h3&gt;
&lt;p&gt;Source Project: &lt;a href=&quot;https://github.com/pimlie/ubuntu-mainline-kernel.sh&quot;&gt;https://github.com/pimlie/ubuntu-mainline-kernel.sh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This will update a debian stable release to the latest official kernel.&lt;/p&gt;
&lt;h4&gt;Installation&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;apt install wget -y
wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh
chmod +x ubuntu-mainline-kernel.sh
sudo mv ubuntu-mainline-kernel.sh /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Usage&lt;/h4&gt;
&lt;p&gt;From terminal type any of the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ubuntu-mainline-kernel.sh -c # Check if Newer Kernel available
ubuntu-mainline-kernel.sh -i # Install latest kernel
ubuntu-mainline-kernel.sh -l # List locally installed kernels
ubuntu-mainline-kernel.sh -u # Uninstall mainline kernel
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;ACO - Faster Compiling (AMD Only)&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/gaming-guide/aco.webp&quot; alt=&quot;aco&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is where Linus Tech Tips recently covered - Linux gaming is BETTER than windows? on June 17, 2020 &lt;a href=&quot;https://youtu.be/6T_-HMkgxt0&quot;&gt;https://youtu.be/6T_-HMkgxt0&lt;/a&gt; and I covered last year - Mesa ACO Linux | The Future is Now! on November 20, 2019 &lt;a href=&quot;https://youtu.be/fm_mzPBnWB0&quot;&gt;https://youtu.be/fm_mzPBnWB0&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Basically this changes the compiling from LLVM to ACO which is considerably faster. The installation process is quite a bit easier now as well compared to my video. You do need up-to-date drivers mesa 20+ and edit &lt;code&gt;/etc/environment&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Add this to &lt;code&gt;/etc/environment&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RADV_PERFTEST=aco
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;/images/wine.webp&quot; alt=&quot;wine&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Wine Dependancies and Lutris&lt;/h2&gt;
&lt;p&gt;There are several packages that wine, proton and lutris game installs need. I recommend installing all the dependancies before installing lutris.&lt;/p&gt;
&lt;h3&gt;Ubuntu/Mint/Pop OS! 20&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;wget -nc https://dl.winehq.org/wine-builds/winehq.key
sudo apt-key add winehq.key
sudo add-apt-repository &apos;deb https://dl.winehq.org/wine-builds/ubuntu/ focal main&apos; -y
sudo add-apt-repository ppa:lutris-team/lutris -y
sudo apt update
sudo apt-get install --install-recommends winehq-staging -y
sudo apt-get install libgnutls30:i386 libldap-2.4-2:i386 libgpg-error0:i386 libxml2:i386 libasound2-plugins:i386 libsdl2-2.0-0:i386 libfreetype6:i386 libdbus-1-3:i386 libsqlite3-0:i386 -y
sudo apt-get install lutris -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Arch-Based Distros&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo pacman -S wine-staging giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap gnutls lib32-gnutls mpg123 lib32-mpg123 openal lib32-openal v4l-utils lib32-v4l-utils libpulse lib32-libpulse libgpg-error lib32-libgpg-error alsa-plugins lib32-alsa-plugins alsa-lib lib32-alsa-lib libjpeg-turbo lib32-libjpeg-turbo sqlite lib32-sqlite libxcomposite lib32-libxcomposite libxinerama lib32-libgcrypt libgcrypt lib32-libxinerama ncurses lib32-ncurses opencl-icd-loader lib32-opencl-icd-loader libxslt lib32-libxslt libva lib32-libva gtk3 lib32-gtk3 gst-plugins-base-libs lib32-gst-plugins-base-libs vulkan-icd-loader lib32-vulkan-icd-loader lutris -y
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;ESync - Helps Game Overhead&lt;/h2&gt;
&lt;p&gt;Check to see if esync is enabled already (most distributions do by default)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ulimit -Hn
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If this returns more than 500,000 than ESYNC IS ENABLED! If not, proceed with these instructions:&lt;br /&gt;
Change the following files and add this line to the bottom&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/systemd/system.conf&lt;/code&gt; &amp;amp; &lt;code&gt;/etc/systemd/user.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DefaultLimitNOFILE=524288
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;/etc/security/limits.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;username hard nofile 524288
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: Change username to your username!!!&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/gaming-guide/gamemode.webp&quot; alt=&quot;gamemode&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;GameMode - No CPU Throttling&lt;/h2&gt;
&lt;p&gt;GitHub Source Project: &lt;a href=&quot;https://github.com/FeralInteractive/gamemode&quot;&gt;https://github.com/FeralInteractive/gamemode&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Ubuntu/Debian Dependencies&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;apt install meson libsystemd-dev pkg-config ninja-build git libdbus-1-dev libinih-dev dbus-user-session -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Arch Dependencies&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;pacman -S meson systemd git dbus -y
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Build and Install GameMode&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/FeralInteractive/gamemode.git
cd gamemode
git checkout 1.5.1 # omit to build the master branch
./bootstrap.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Uninstall GameMode&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;systemctl --user stop gamemoded.service
ninja uninstall -C builddir
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;GameMode Usage&lt;/h3&gt;
&lt;p&gt;There are multiple ways to Use GameMode&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lutris&lt;/strong&gt; - Under settings you can enable GameMode for all games you launch&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Steam&lt;/strong&gt; - Go to Launch options for the game of choice and type in &lt;code&gt;gamemoderun %command%&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminal&lt;/strong&gt; - type &lt;code&gt;gamemoderun ./game&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gnome Tool&lt;/strong&gt; - If you use GNOME Desktop Environment install this extension: &lt;a href=&quot;https://extensions.gnome.org/extension/1852/gamemode/&quot;&gt;https://extensions.gnome.org/extension/1852/gamemode/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;/images/2020/gaming-guide/proton.webp&quot; alt=&quot;proton&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Custom Proton&lt;/h2&gt;
&lt;p&gt;The stock steam proton is rather old and behind the Wine team. Which means there are a lot of performance tweaks and improvements that you aren&apos;t getting yet. This is why I recommend everyone install Custom proton as I find the releases a considerable improvement when gaming in Steam.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note: DO NOT USE STEAM IN A FLATPAK! You will lose some performance and modifications are more difficult!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Source Project: &lt;a href=&quot;https://github.com/GloriousEggroll/proton-ge-custom#manual&quot;&gt;https://github.com/GloriousEggroll/proton-ge-custom#manual&lt;/a&gt;&lt;br /&gt;
Auto-Install Project: &lt;a href=&quot;https://github.com/Termuellinator/ProtonUpdater&quot;&gt;https://github.com/Termuellinator/ProtonUpdater&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For Installation, we will use the ProtonUpdater script on GitHub.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~
wget https://raw.githubusercontent.com/Termuellinator/ProtonUpdater/master/cproton.sh
sudo chmod +x cproton.sh
./cproton.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&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/xvrft9ULvho&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;Doing these tweaks or just some of them will make a drastic difference when it comes to Gaming on Linux. I personally use all of the tweaks, but sometimes I end up not using the Custom kernel if I have issues with drivers like nvidia sometimes does not like it.&lt;/p&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>Custom Vim</title><link>https://christitus.com/custom-vim/</link><guid isPermaLink="true">https://christitus.com/custom-vim/</guid><description>&lt;p&gt;This article originally documented my Vim setup and the retired &lt;code&gt;myvim&lt;/code&gt;
repository. I no longer use Vim and have moved my editor workflow to Neovim.&lt;/p&gt;

&lt;h2&gt;My current editor setup&lt;/h2&gt;
&lt;p&gt;My maintained configuration now lives in the
&lt;a href=&quot;https://github.com/ChrisTitusTech/neovim&quot;&gt;ChrisTitusTech/neovim&lt;/a&gt; project. It
is a Lua-based setup built on kickstart.nvim with LSP support, completion,
formatting, project search, file navigation, and writing tools.&lt;/p&gt;
&lt;p&gt;For the full setup and current feature overview, read
&lt;a href=&quot;/vim-the-ultimate-editor/&quot;&gt;Neovim: The Ultimate Editor&lt;/a&gt; and
&lt;a href=&quot;/neovim-the-elite-editor/&quot;&gt;Neovim the Elite Editor&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Quick installation&lt;/h2&gt;
&lt;p&gt;On Linux, clone the project to a normal directory and run its dependency
repair script:&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 first launch, Neovim installs the configured plugins. Use &lt;code&gt;:checkhealth&lt;/code&gt; to
check the environment, &lt;code&gt;:Lazy&lt;/code&gt; to manage plugins, and &lt;code&gt;:Mason&lt;/code&gt; to manage
language servers and development tools.&lt;/p&gt;
&lt;p&gt;The old &lt;code&gt;.vimrc&lt;/code&gt; and Vim-plug instructions are intentionally no longer
included because the configuration they referenced no longer exists.&lt;/p&gt;
</description><pubDate>Thu, 04 Jun 2020 20:05:41 GMT</pubDate><content:encoded>&lt;p&gt;This article originally documented my Vim setup and the retired &lt;code&gt;myvim&lt;/code&gt;
repository. I no longer use Vim and have moved my editor workflow to Neovim.&lt;/p&gt;

&lt;h2&gt;My current editor setup&lt;/h2&gt;
&lt;p&gt;My maintained configuration now lives in the
&lt;a href=&quot;https://github.com/ChrisTitusTech/neovim&quot;&gt;ChrisTitusTech/neovim&lt;/a&gt; project. It
is a Lua-based setup built on kickstart.nvim with LSP support, completion,
formatting, project search, file navigation, and writing tools.&lt;/p&gt;
&lt;p&gt;For the full setup and current feature overview, read
&lt;a href=&quot;/vim-the-ultimate-editor/&quot;&gt;Neovim: The Ultimate Editor&lt;/a&gt; and
&lt;a href=&quot;/neovim-the-elite-editor/&quot;&gt;Neovim the Elite Editor&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Quick installation&lt;/h2&gt;
&lt;p&gt;On Linux, clone the project to a normal directory and run its dependency
repair script:&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 first launch, Neovim installs the configured plugins. Use &lt;code&gt;:checkhealth&lt;/code&gt; to
check the environment, &lt;code&gt;:Lazy&lt;/code&gt; to manage plugins, and &lt;code&gt;:Mason&lt;/code&gt; to manage
language servers and development tools.&lt;/p&gt;
&lt;p&gt;The old &lt;code&gt;.vimrc&lt;/code&gt; and Vim-plug instructions are intentionally no longer
included because the configuration they referenced no longer exists.&lt;/p&gt;
</content:encoded></item><item><title>Install Wine Libfaudio0 Error</title><link>https://christitus.com/install-wine-libfaudio0-error/</link><guid isPermaLink="true">https://christitus.com/install-wine-libfaudio0-error/</guid><description>&lt;p&gt;This article helps you fix the Libfaudio0 error that you run into when installing Wine on an older Linux debian-based distribution like Linux Mint 19 or Ubuntu 18.&lt;/p&gt;

&lt;p&gt;Fix the dependancy error by downloading the following packages&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_18.04/amd64/libfaudio0_19.07-0~bionic_amd64.deb
wget https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_18.04/i386/libfaudio0_19.07-0~bionic_i386.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once these are downloaded you need to installed them with&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dpkg -i libfaudio0_19.07-0~bionic_amd64.deb libfaudio0_19.07-0~bionic_i386.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now that we have fixed the dependency error you can proceed with your wine-staging installation. Not this is mainly an error for bleeding edge version of wine from the WineHQ PPA.&lt;/p&gt;
</description><pubDate>Mon, 25 May 2020 18:14:23 GMT</pubDate><content:encoded>&lt;p&gt;This article helps you fix the Libfaudio0 error that you run into when installing Wine on an older Linux debian-based distribution like Linux Mint 19 or Ubuntu 18.&lt;/p&gt;

&lt;p&gt;Fix the dependancy error by downloading the following packages&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_18.04/amd64/libfaudio0_19.07-0~bionic_amd64.deb
wget https://download.opensuse.org/repositories/Emulators:/Wine:/Debian/xUbuntu_18.04/i386/libfaudio0_19.07-0~bionic_i386.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once these are downloaded you need to installed them with&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo dpkg -i libfaudio0_19.07-0~bionic_amd64.deb libfaudio0_19.07-0~bionic_i386.deb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now that we have fixed the dependency error you can proceed with your wine-staging installation. Not this is mainly an error for bleeding edge version of wine from the WineHQ PPA.&lt;/p&gt;
</content:encoded></item><item><title>Emoji</title><link>https://christitus.com/emoji/</link><guid isPermaLink="true">https://christitus.com/emoji/</guid><description>&lt;p&gt;This article goes over installing emoji support in Linux.&lt;/p&gt;

&lt;h2&gt;Install Packages for Emoji Support&lt;/h2&gt;
&lt;p&gt;There are a couple packages that you need to install by default in Linux to get proper emoji support and getting them to display properly. Without this support you will pull up sites and just see blocks instead of the emoji that should be there.&lt;/p&gt;
&lt;p&gt;Install the following package &lt;code&gt;noto-fonts-emoji&lt;/code&gt;&lt;br /&gt;
Arch Install: &lt;code&gt;yay -S noto-fonts-emoji&lt;/code&gt;&lt;br /&gt;
Debian Install &lt;code&gt;sudo apt install noto-fonts-emoji&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Create Font Config File&lt;/h2&gt;
&lt;p&gt;While just having the above package will give most emoji support there are some sites that still won&apos;t display properly add the following file to the fontsconfig files in your config. &lt;em&gt;Note: If ~/.config/fontsconfig doesn&apos;t exists create the folder&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Minimal Install with only emoji fonts&lt;br /&gt;
&lt;code&gt;~/.config/fontconfig/conf.d/01-emoji.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!DOCTYPE fontconfig SYSTEM &quot;fonts.dtd&quot;&amp;gt;
&amp;lt;fontconfig&amp;gt;
  &amp;lt;!-- Use Google Emojis --&amp;gt;
  &amp;lt;match target=&quot;pattern&quot;&amp;gt;
    &amp;lt;test qual=&quot;any&quot; name=&quot;family&quot;&amp;gt;&amp;lt;string&amp;gt;Segoe UI Emoji&amp;lt;/string&amp;gt;&amp;lt;/test&amp;gt;
    &amp;lt;edit name=&quot;family&quot; mode=&quot;assign&quot; binding=&quot;same&quot;&amp;gt;&amp;lt;string&amp;gt;Noto Color Emoji&amp;lt;/string&amp;gt;&amp;lt;/edit&amp;gt;
  &amp;lt;/match&amp;gt;
&amp;lt;/fontconfig&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Big Install with sans-serif, serif, and monospace replaced System-wide&lt;br /&gt;
&lt;code&gt;/etc/fonts/conf.d/02-emoji.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
  &amp;lt;!DOCTYPE fontconfig SYSTEM &quot;fonts.dtd&quot;&amp;gt;
  &amp;lt;fontconfig&amp;gt;

   &amp;lt;alias&amp;gt;
     &amp;lt;family&amp;gt;sans-serif&amp;lt;/family&amp;gt;
     &amp;lt;prefer&amp;gt;
       &amp;lt;family&amp;gt;Your favorite sans-serif font name&amp;lt;/family&amp;gt;
       &amp;lt;family&amp;gt;Noto Color Emoji&amp;lt;/family&amp;gt;
       &amp;lt;family&amp;gt;Noto Emoji&amp;lt;/family&amp;gt;
     &amp;lt;/prefer&amp;gt; 
   &amp;lt;/alias&amp;gt;

   &amp;lt;alias&amp;gt;
     &amp;lt;family&amp;gt;serif&amp;lt;/family&amp;gt;
     &amp;lt;prefer&amp;gt;
       &amp;lt;family&amp;gt;Your favorite serif font name&amp;lt;/family&amp;gt;
       &amp;lt;family&amp;gt;Noto Color Emoji&amp;lt;/family&amp;gt;
       &amp;lt;family&amp;gt;Noto Emoji&amp;lt;/family&amp;gt;
     &amp;lt;/prefer&amp;gt;
   &amp;lt;/alias&amp;gt;

   &amp;lt;alias&amp;gt;
    &amp;lt;family&amp;gt;monospace&amp;lt;/family&amp;gt;
    &amp;lt;prefer&amp;gt;
      &amp;lt;family&amp;gt;Your favorite monospace font name&amp;lt;/family&amp;gt;
      &amp;lt;family&amp;gt;Noto Color Emoji&amp;lt;/family&amp;gt;
      &amp;lt;family&amp;gt;Noto Emoji&amp;lt;/family&amp;gt;
     &amp;lt;/prefer&amp;gt;
   &amp;lt;/alias&amp;gt;

  &amp;lt;/fontconfig&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Using Emoji Keyboard&lt;/h2&gt;
&lt;p&gt;First install the ibus-uniemoji package or the GNOME extension if you use that Desktop Environment.&lt;br /&gt;
Arch Install: &lt;code&gt;yay -S ibus-uniemoji&lt;/code&gt;&lt;br /&gt;
Debian Users: &lt;em&gt;(Compile from source)&lt;/em&gt; &lt;a href=&quot;https://github.com/salty-horse/ibus-uniemoji&quot;&gt;https://github.com/salty-horse/ibus-uniemoji&lt;/a&gt;&lt;br /&gt;
Emoji &lt;a href=&quot;https://extensions.gnome.org/extension/1162/emoji-selector/&quot;&gt;Gnome Extension Link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then simply keybind the package or extension using your settings menu or manually launch it using your launcher.&lt;br /&gt;
Launch by typing: &lt;code&gt;ibus emoji&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: I have mine bound to Meta Key + a&lt;/em&gt;&lt;/p&gt;
</description><pubDate>Thu, 09 Apr 2020 20:35:07 GMT</pubDate><content:encoded>&lt;p&gt;This article goes over installing emoji support in Linux.&lt;/p&gt;

&lt;h2&gt;Install Packages for Emoji Support&lt;/h2&gt;
&lt;p&gt;There are a couple packages that you need to install by default in Linux to get proper emoji support and getting them to display properly. Without this support you will pull up sites and just see blocks instead of the emoji that should be there.&lt;/p&gt;
&lt;p&gt;Install the following package &lt;code&gt;noto-fonts-emoji&lt;/code&gt;&lt;br /&gt;
Arch Install: &lt;code&gt;yay -S noto-fonts-emoji&lt;/code&gt;&lt;br /&gt;
Debian Install &lt;code&gt;sudo apt install noto-fonts-emoji&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Create Font Config File&lt;/h2&gt;
&lt;p&gt;While just having the above package will give most emoji support there are some sites that still won&apos;t display properly add the following file to the fontsconfig files in your config. &lt;em&gt;Note: If ~/.config/fontsconfig doesn&apos;t exists create the folder&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Minimal Install with only emoji fonts&lt;br /&gt;
&lt;code&gt;~/.config/fontconfig/conf.d/01-emoji.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;!DOCTYPE fontconfig SYSTEM &quot;fonts.dtd&quot;&amp;gt;
&amp;lt;fontconfig&amp;gt;
  &amp;lt;!-- Use Google Emojis --&amp;gt;
  &amp;lt;match target=&quot;pattern&quot;&amp;gt;
    &amp;lt;test qual=&quot;any&quot; name=&quot;family&quot;&amp;gt;&amp;lt;string&amp;gt;Segoe UI Emoji&amp;lt;/string&amp;gt;&amp;lt;/test&amp;gt;
    &amp;lt;edit name=&quot;family&quot; mode=&quot;assign&quot; binding=&quot;same&quot;&amp;gt;&amp;lt;string&amp;gt;Noto Color Emoji&amp;lt;/string&amp;gt;&amp;lt;/edit&amp;gt;
  &amp;lt;/match&amp;gt;
&amp;lt;/fontconfig&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Big Install with sans-serif, serif, and monospace replaced System-wide&lt;br /&gt;
&lt;code&gt;/etc/fonts/conf.d/02-emoji.conf&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
  &amp;lt;!DOCTYPE fontconfig SYSTEM &quot;fonts.dtd&quot;&amp;gt;
  &amp;lt;fontconfig&amp;gt;

   &amp;lt;alias&amp;gt;
     &amp;lt;family&amp;gt;sans-serif&amp;lt;/family&amp;gt;
     &amp;lt;prefer&amp;gt;
       &amp;lt;family&amp;gt;Your favorite sans-serif font name&amp;lt;/family&amp;gt;
       &amp;lt;family&amp;gt;Noto Color Emoji&amp;lt;/family&amp;gt;
       &amp;lt;family&amp;gt;Noto Emoji&amp;lt;/family&amp;gt;
     &amp;lt;/prefer&amp;gt; 
   &amp;lt;/alias&amp;gt;

   &amp;lt;alias&amp;gt;
     &amp;lt;family&amp;gt;serif&amp;lt;/family&amp;gt;
     &amp;lt;prefer&amp;gt;
       &amp;lt;family&amp;gt;Your favorite serif font name&amp;lt;/family&amp;gt;
       &amp;lt;family&amp;gt;Noto Color Emoji&amp;lt;/family&amp;gt;
       &amp;lt;family&amp;gt;Noto Emoji&amp;lt;/family&amp;gt;
     &amp;lt;/prefer&amp;gt;
   &amp;lt;/alias&amp;gt;

   &amp;lt;alias&amp;gt;
    &amp;lt;family&amp;gt;monospace&amp;lt;/family&amp;gt;
    &amp;lt;prefer&amp;gt;
      &amp;lt;family&amp;gt;Your favorite monospace font name&amp;lt;/family&amp;gt;
      &amp;lt;family&amp;gt;Noto Color Emoji&amp;lt;/family&amp;gt;
      &amp;lt;family&amp;gt;Noto Emoji&amp;lt;/family&amp;gt;
     &amp;lt;/prefer&amp;gt;
   &amp;lt;/alias&amp;gt;

  &amp;lt;/fontconfig&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Using Emoji Keyboard&lt;/h2&gt;
&lt;p&gt;First install the ibus-uniemoji package or the GNOME extension if you use that Desktop Environment.&lt;br /&gt;
Arch Install: &lt;code&gt;yay -S ibus-uniemoji&lt;/code&gt;&lt;br /&gt;
Debian Users: &lt;em&gt;(Compile from source)&lt;/em&gt; &lt;a href=&quot;https://github.com/salty-horse/ibus-uniemoji&quot;&gt;https://github.com/salty-horse/ibus-uniemoji&lt;/a&gt;&lt;br /&gt;
Emoji &lt;a href=&quot;https://extensions.gnome.org/extension/1162/emoji-selector/&quot;&gt;Gnome Extension Link&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then simply keybind the package or extension using your settings menu or manually launch it using your launcher.&lt;br /&gt;
Launch by typing: &lt;code&gt;ibus emoji&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: I have mine bound to Meta Key + a&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>Doom Eternal Linux</title><link>https://christitus.com/doom-eternal-linux/</link><guid isPermaLink="true">https://christitus.com/doom-eternal-linux/</guid><description>&lt;p&gt;This post is here to help guide you through setting up doom eternal on Linux.&lt;/p&gt;

&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;p&gt;We will be using Glorious Eggroll&apos;s version of proton which is very easy to install and update with an update script. You can manually install this if you don&apos;t want to do the &quot;easy way&quot;.&lt;/p&gt;
&lt;h2&gt;Custom Proton GE Edition Install&lt;/h2&gt;
&lt;p&gt;Run the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://raw.githubusercontent.com/flubberding/ProtonUpdater/master/cproton.sh
sudo chmod a+x cproton.sh
sh cproton.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will be prompted if you want to update it just type yes.&lt;br /&gt;
This will install the new GE proton into the ~/.steam/root/compatibility.d (arch) and ~/.steam/compatibility.d (debian) respectively.&lt;/p&gt;
&lt;h2&gt;Modifying Steam Launch Options&lt;/h2&gt;
&lt;p&gt;By default, the default settings will still make it so you are unable to launch the game. I found using the following in steam launch options not only fixes the problems but makes it perform better and get you to the title screen faster.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RADV_PERFTEST=llvm PROTON_NO_ESYNC=1 %command% +in_terminal 1 +com_skipIntroVideo 1 +com_skipKeyPressOnLoadScreens 1 +com_skipSignInManager 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you still encounter issues install the AMDVLK package &lt;a href=&quot;https://github.com/GPUOpen-Drivers/AMDVLK&quot;&gt;https://github.com/GPUOpen-Drivers/AMDVLK&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;Note: Nvidia card users can&apos;t use this package and are currently having issues with Doom&lt;/em&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/g3UPxd8iUsU&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;All testing was done with a Linux box using an AMD Radeon RX580. Refer to the video above for a look at the performance. I have noticed a lot of people online complaining that they are still having performance problems, but all of them seem to be nVidia users.&lt;br /&gt;
All these fixes should be merged in to the official version of proton in a couple months and you shouldn&apos;t need to do any of this once this is done.&lt;/p&gt;
&lt;p&gt;Have Fun and Game On!&lt;/p&gt;
</description><pubDate>Mon, 23 Mar 2020 01:50:39 GMT</pubDate><content:encoded>&lt;p&gt;This post is here to help guide you through setting up doom eternal on Linux.&lt;/p&gt;

&lt;h2&gt;Requirements&lt;/h2&gt;
&lt;p&gt;We will be using Glorious Eggroll&apos;s version of proton which is very easy to install and update with an update script. You can manually install this if you don&apos;t want to do the &quot;easy way&quot;.&lt;/p&gt;
&lt;h2&gt;Custom Proton GE Edition Install&lt;/h2&gt;
&lt;p&gt;Run the following commands:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://raw.githubusercontent.com/flubberding/ProtonUpdater/master/cproton.sh
sudo chmod a+x cproton.sh
sh cproton.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will be prompted if you want to update it just type yes.&lt;br /&gt;
This will install the new GE proton into the ~/.steam/root/compatibility.d (arch) and ~/.steam/compatibility.d (debian) respectively.&lt;/p&gt;
&lt;h2&gt;Modifying Steam Launch Options&lt;/h2&gt;
&lt;p&gt;By default, the default settings will still make it so you are unable to launch the game. I found using the following in steam launch options not only fixes the problems but makes it perform better and get you to the title screen faster.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RADV_PERFTEST=llvm PROTON_NO_ESYNC=1 %command% +in_terminal 1 +com_skipIntroVideo 1 +com_skipKeyPressOnLoadScreens 1 +com_skipSignInManager 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you still encounter issues install the AMDVLK package &lt;a href=&quot;https://github.com/GPUOpen-Drivers/AMDVLK&quot;&gt;https://github.com/GPUOpen-Drivers/AMDVLK&lt;/a&gt;&lt;br /&gt;
&lt;em&gt;Note: Nvidia card users can&apos;t use this package and are currently having issues with Doom&lt;/em&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/g3UPxd8iUsU&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;All testing was done with a Linux box using an AMD Radeon RX580. Refer to the video above for a look at the performance. I have noticed a lot of people online complaining that they are still having performance problems, but all of them seem to be nVidia users.&lt;br /&gt;
All these fixes should be merged in to the official version of proton in a couple months and you shouldn&apos;t need to do any of this once this is done.&lt;/p&gt;
&lt;p&gt;Have Fun and Game On!&lt;/p&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>Lcars Screensaver</title><link>https://christitus.com/lcars-screensaver/</link><guid isPermaLink="true">https://christitus.com/lcars-screensaver/</guid><description>&lt;p&gt;This article goes over getting the LCARS screensaver by mewho working in Linux. This Screensaver was originally intended for Windows 9x and this is for fun!&lt;/p&gt;
&lt;h2&gt;Installation and Testing&lt;/h2&gt;
&lt;p&gt;First download the System47 Screensaver from &lt;a href=&quot;http://mewho.com&quot;&gt;mewho.com&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://mewho.com/system47/download1.htm&quot;&gt;LCARS Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Unzip the system47.zip&lt;/p&gt;
&lt;p&gt;Create a WINE bottle for the Screensaver to run in from terminal:&lt;br /&gt;
&lt;code&gt;WINEARCH=win32 WINEPREFIX=/home/$USER/.lcars winecfg&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Change the Windows Version to Windows XP&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Run the System47.exe in wine to install the screensaver&lt;br /&gt;
&lt;code&gt;WINEPREFIX=~/.lcars wine &apos;~/Downloads/system47 v2.2_setup.exe.exe&apos;&lt;/code&gt;&lt;br /&gt;
Install the Screen saver and quit&lt;/p&gt;
&lt;p&gt;Test the Screensaver in wine&lt;br /&gt;
&lt;code&gt;WINEPREFIX=~/.lcars wine &apos;/home/$USER/.lcars/drive_c/windows/system32/System47.scr&apos; /s&lt;/code&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Creating Screensaver Service&lt;/h2&gt;
&lt;p&gt;Creating the screensaver service is done in three sections: service dependencies installation, script creation, and systemd service.&lt;/p&gt;
&lt;h3&gt;Dependencies to install&lt;/h3&gt;
&lt;p&gt;Arch-based Installs &lt;code&gt;yay -S xscreensaver xprintidle&lt;/code&gt;&lt;br /&gt;
Debian-based Installs &lt;code&gt;apt install xscreensaver xprintidle&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Script Creation&lt;/h4&gt;
&lt;p&gt;Create &lt;a href=&quot;http://lcars.sh&quot;&gt;lcars.sh&lt;/a&gt; in your home directory (&lt;em&gt;replace titus with your user&lt;/em&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/sh

export DISPLAY=:0
# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((5*60*1000))

# Sequence to execute when timeout triggers.
trigger_cmd() {
    WINEPREFIX=/home/titus/.lcars wine &apos;/home/titus/.lcars/drive_c/windows/system32/System47.scr&apos; /s
}

sleep_time=$IDLE_TIME
triggered=false

# ceil() instead of floor()
while sleep $(((sleep_time+999)/1000)); do
    idle=$(xprintidle)
    if [ $idle -ge $IDLE_TIME ]; then
        if ! $triggered; then
            trigger_cmd
            triggered=true
            sleep_time=$IDLE_TIME
        fi
    else
        triggered=false
        # Give 100 ms buffer to avoid frantic loops shortly before triggers.
        sleep_time=$((IDLE_TIME-idle+100))
    fi
done
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Service Creation&lt;/h4&gt;
&lt;p&gt;Create lcars.service (&lt;code&gt;sudo nano /etc/systemd/system/lcars.service&lt;/code&gt;)
&lt;em&gt;change titus to your user&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Screensaver

[Service]
User=titus
Type=simple
ExecStart=/bin/bash /home/titus/lcars.sh

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Reload service daemon &lt;code&gt;sudo systemctl daemon-reload&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start lcars service to test &lt;code&gt;sudo systemctl start lcars&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Verify service is running &lt;code&gt;sudo systemctl status lcars&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Enable on startup &lt;code&gt;sudo systemctl enable lcars&lt;/code&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/J2zasJz5vuA&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, 17 Jan 2020 23:43:17 GMT</pubDate><content:encoded>&lt;p&gt;This article goes over getting the LCARS screensaver by mewho working in Linux. This Screensaver was originally intended for Windows 9x and this is for fun!&lt;/p&gt;
&lt;h2&gt;Installation and Testing&lt;/h2&gt;
&lt;p&gt;First download the System47 Screensaver from &lt;a href=&quot;http://mewho.com&quot;&gt;mewho.com&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://mewho.com/system47/download1.htm&quot;&gt;LCARS Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Unzip the system47.zip&lt;/p&gt;
&lt;p&gt;Create a WINE bottle for the Screensaver to run in from terminal:&lt;br /&gt;
&lt;code&gt;WINEARCH=win32 WINEPREFIX=/home/$USER/.lcars winecfg&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Change the Windows Version to Windows XP&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Run the System47.exe in wine to install the screensaver&lt;br /&gt;
&lt;code&gt;WINEPREFIX=~/.lcars wine &apos;~/Downloads/system47 v2.2_setup.exe.exe&apos;&lt;/code&gt;&lt;br /&gt;
Install the Screen saver and quit&lt;/p&gt;
&lt;p&gt;Test the Screensaver in wine&lt;br /&gt;
&lt;code&gt;WINEPREFIX=~/.lcars wine &apos;/home/$USER/.lcars/drive_c/windows/system32/System47.scr&apos; /s&lt;/code&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Creating Screensaver Service&lt;/h2&gt;
&lt;p&gt;Creating the screensaver service is done in three sections: service dependencies installation, script creation, and systemd service.&lt;/p&gt;
&lt;h3&gt;Dependencies to install&lt;/h3&gt;
&lt;p&gt;Arch-based Installs &lt;code&gt;yay -S xscreensaver xprintidle&lt;/code&gt;&lt;br /&gt;
Debian-based Installs &lt;code&gt;apt install xscreensaver xprintidle&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Script Creation&lt;/h4&gt;
&lt;p&gt;Create &lt;a href=&quot;http://lcars.sh&quot;&gt;lcars.sh&lt;/a&gt; in your home directory (&lt;em&gt;replace titus with your user&lt;/em&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/sh

export DISPLAY=:0
# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((5*60*1000))

# Sequence to execute when timeout triggers.
trigger_cmd() {
    WINEPREFIX=/home/titus/.lcars wine &apos;/home/titus/.lcars/drive_c/windows/system32/System47.scr&apos; /s
}

sleep_time=$IDLE_TIME
triggered=false

# ceil() instead of floor()
while sleep $(((sleep_time+999)/1000)); do
    idle=$(xprintidle)
    if [ $idle -ge $IDLE_TIME ]; then
        if ! $triggered; then
            trigger_cmd
            triggered=true
            sleep_time=$IDLE_TIME
        fi
    else
        triggered=false
        # Give 100 ms buffer to avoid frantic loops shortly before triggers.
        sleep_time=$((IDLE_TIME-idle+100))
    fi
done
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Service Creation&lt;/h4&gt;
&lt;p&gt;Create lcars.service (&lt;code&gt;sudo nano /etc/systemd/system/lcars.service&lt;/code&gt;)
&lt;em&gt;change titus to your user&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Unit]
Description=Screensaver

[Service]
User=titus
Type=simple
ExecStart=/bin/bash /home/titus/lcars.sh

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Reload service daemon &lt;code&gt;sudo systemctl daemon-reload&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Start lcars service to test &lt;code&gt;sudo systemctl start lcars&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Verify service is running &lt;code&gt;sudo systemctl status lcars&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Enable on startup &lt;code&gt;sudo systemctl enable lcars&lt;/code&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/J2zasJz5vuA&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>BTRFS Guide - Basic Commands, Snapshots, and RAID</title><link>https://christitus.com/btrfs-guide/</link><guid isPermaLink="true">https://christitus.com/btrfs-guide/</guid><description>&lt;p&gt;This guide goes over everything you need to know to get started on BTRFS. With that said we will be going over the basic structure of BTRFS and the things you should and should not do. &lt;/p&gt;
&lt;h2&gt;Creating a BTRFS Filesystem&lt;/h2&gt;
&lt;p&gt;Create the file system on an empty btrfs partition&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;mkfs.btrfs /dev/sda1&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: You will need to mount this file system after&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now we need to make a subvolume &lt;em&gt;before&lt;/em&gt; we add data to the device&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;btrfs subvolume create /mnt/sda1&lt;/code&gt; &lt;em&gt;/mnt/sda1 is the mount point!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After this is complete you can now write data to your BTRFS volume and use all it capabilities.&lt;/p&gt;
&lt;p&gt;Basic BTRFS Layout&lt;br /&gt;
&lt;em&gt;Note: Top Level 5 is root and isn&apos;t a btrfs subvolume that can do snapshots and other btrfs features and therefore should not be mounted&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;toplevel root level 5
  +-- root\@ level 256 (subvolume root mounted at / id varies)
  +-- root\.snapshots level 256 (typical snapshot subvolume)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Basic Commands&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Disk free&lt;br /&gt;
&lt;code&gt;sudo btrfs fi show&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Output:&lt;br /&gt;
&lt;img src=&quot;/images/2020/btrfs/fishow.webp&quot; alt=&quot;File System Output&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Disk Usage&lt;br /&gt;
&lt;code&gt;sudo btrfs fi du /&lt;/code&gt; &lt;em&gt;Note: you can make / any other mount point&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Scrub SubVolume &lt;em&gt;Recommended running every week!&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo btrfs scrub start /&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Balance Subvolume for Performance&lt;br /&gt;
&lt;code&gt;sudo btrfs balance start -musage=50 -dusage=50 /&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: Use the musgae and dusage filters to only balance used blocks above 50 percent utilization&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo btrfs balance cancel /&lt;/code&gt; &lt;em&gt;Stops running balance&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;List Subvolumes &lt;em&gt;based on mountpoint&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo btrfs subv list /home&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Output:&lt;br /&gt;
&lt;img src=&quot;/images/2020/btrfs/subv-list.webp&quot; alt=&quot;Subvolume Output&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Mount Subvolume&lt;br /&gt;
&lt;code&gt;sudo mount -o subvolid=267 /dev/sda1 /media/games&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;OR add this to&lt;/em&gt; &lt;code&gt;/etc/fstab&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;UUID=IDGOESHERE /media/games rw,exec,subvolid=267 0 0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Snapshots&lt;/h2&gt;
&lt;p&gt;Snapshots are one of the best things about BTRFS and I absolutely love them. They are incredible powerful and beneficial.&lt;/p&gt;
&lt;p&gt;So Lets run through some scenarios when you use Snapshots.&lt;/p&gt;
&lt;h3&gt;Create Snapshot&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;sudo btrfs subv snapshot /home /home/.snapshots/2020-01-13&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Using this you can revert the snapshot by simply editing the &lt;code&gt;/etc/fstab&lt;/code&gt; and changing the subvol=2020-01-13 or the corresponding subvolid you get from &lt;code&gt;sudo btrfs subv list /home&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Restore Snapshot&lt;/h4&gt;
&lt;p&gt;Restore Snapshot after reboot and successful rollback&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;sudo btrfs subv delete /home&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo btrfs subv snapshot /home/.snapshots/2020-01-13 /home&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now simply restore your fstab and reboot to be back on the /home subvolume.&lt;/p&gt;
&lt;p&gt;The reason to do it using this method is to verify the data first. If it doesn&apos;t work out you can simply change the &lt;code&gt;/etc/fstab&lt;/code&gt; back and you will be back to where you started.&lt;/p&gt;
&lt;h2&gt;Multiple disks and RAID&lt;/h2&gt;
&lt;p&gt;Oh boy, here we go. This is such a badly misunderstood subject and if you aren&apos;t careful you will be causing more problems than you are looking to solve. So with that let&apos;s get into RAID. I will &lt;em&gt;NOT&lt;/em&gt; be cover RAID 5 as it is &lt;em&gt;unstable&lt;/em&gt; and SHOULD NOT BE USED!&lt;/p&gt;
&lt;p&gt;Must know commands for multiple disks:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Add Disks before creating subvolume: &lt;code&gt;sudo btrfs device add /dev/sda1 /dev/sdb1&lt;/code&gt;&lt;br /&gt;
Add Disk to existing subvolume: &lt;code&gt;sudo btrfs device add /dev/sdb1 /home&lt;/code&gt;&lt;br /&gt;
Delete Disk from subvolume: &lt;code&gt;sudo btrfs device delete /dev/sdb1 /home&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Creating the RAID File System:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;RAID 1: &lt;code&gt;sudo btrfs -m raid1 -d raid1 /dev/sda1 /dev/sdb1&lt;/code&gt;&lt;br /&gt;
RAID 10: &lt;code&gt;sudo btrfs -m raid10 -d raid10 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Convert to to RAID 1 after adding disk to existing subvolume&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;btrfs balance start -mconvert=raid1 -dconvert=raid1 /home&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I could put RAID 0 here... but honestly you should just use EXT4 or XFS if you are looking for performance. It would be better than using BTRFS!&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/J2QP4onqJKI&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, 13 Jan 2020 22:36:18 GMT</pubDate><content:encoded>&lt;p&gt;This guide goes over everything you need to know to get started on BTRFS. With that said we will be going over the basic structure of BTRFS and the things you should and should not do. &lt;/p&gt;
&lt;h2&gt;Creating a BTRFS Filesystem&lt;/h2&gt;
&lt;p&gt;Create the file system on an empty btrfs partition&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;mkfs.btrfs /dev/sda1&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: You will need to mount this file system after&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now we need to make a subvolume &lt;em&gt;before&lt;/em&gt; we add data to the device&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;btrfs subvolume create /mnt/sda1&lt;/code&gt; &lt;em&gt;/mnt/sda1 is the mount point!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After this is complete you can now write data to your BTRFS volume and use all it capabilities.&lt;/p&gt;
&lt;p&gt;Basic BTRFS Layout&lt;br /&gt;
&lt;em&gt;Note: Top Level 5 is root and isn&apos;t a btrfs subvolume that can do snapshots and other btrfs features and therefore should not be mounted&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;toplevel root level 5
  +-- root\@ level 256 (subvolume root mounted at / id varies)
  +-- root\.snapshots level 256 (typical snapshot subvolume)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Basic Commands&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Disk free&lt;br /&gt;
&lt;code&gt;sudo btrfs fi show&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Output:&lt;br /&gt;
&lt;img src=&quot;/images/2020/btrfs/fishow.webp&quot; alt=&quot;File System Output&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Disk Usage&lt;br /&gt;
&lt;code&gt;sudo btrfs fi du /&lt;/code&gt; &lt;em&gt;Note: you can make / any other mount point&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Scrub SubVolume &lt;em&gt;Recommended running every week!&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo btrfs scrub start /&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Balance Subvolume for Performance&lt;br /&gt;
&lt;code&gt;sudo btrfs balance start -musage=50 -dusage=50 /&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: Use the musgae and dusage filters to only balance used blocks above 50 percent utilization&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo btrfs balance cancel /&lt;/code&gt; &lt;em&gt;Stops running balance&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;List Subvolumes &lt;em&gt;based on mountpoint&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo btrfs subv list /home&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Output:&lt;br /&gt;
&lt;img src=&quot;/images/2020/btrfs/subv-list.webp&quot; alt=&quot;Subvolume Output&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Mount Subvolume&lt;br /&gt;
&lt;code&gt;sudo mount -o subvolid=267 /dev/sda1 /media/games&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;OR add this to&lt;/em&gt; &lt;code&gt;/etc/fstab&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;UUID=IDGOESHERE /media/games rw,exec,subvolid=267 0 0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Snapshots&lt;/h2&gt;
&lt;p&gt;Snapshots are one of the best things about BTRFS and I absolutely love them. They are incredible powerful and beneficial.&lt;/p&gt;
&lt;p&gt;So Lets run through some scenarios when you use Snapshots.&lt;/p&gt;
&lt;h3&gt;Create Snapshot&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;sudo btrfs subv snapshot /home /home/.snapshots/2020-01-13&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Using this you can revert the snapshot by simply editing the &lt;code&gt;/etc/fstab&lt;/code&gt; and changing the subvol=2020-01-13 or the corresponding subvolid you get from &lt;code&gt;sudo btrfs subv list /home&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Restore Snapshot&lt;/h4&gt;
&lt;p&gt;Restore Snapshot after reboot and successful rollback&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;sudo btrfs subv delete /home&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo btrfs subv snapshot /home/.snapshots/2020-01-13 /home&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now simply restore your fstab and reboot to be back on the /home subvolume.&lt;/p&gt;
&lt;p&gt;The reason to do it using this method is to verify the data first. If it doesn&apos;t work out you can simply change the &lt;code&gt;/etc/fstab&lt;/code&gt; back and you will be back to where you started.&lt;/p&gt;
&lt;h2&gt;Multiple disks and RAID&lt;/h2&gt;
&lt;p&gt;Oh boy, here we go. This is such a badly misunderstood subject and if you aren&apos;t careful you will be causing more problems than you are looking to solve. So with that let&apos;s get into RAID. I will &lt;em&gt;NOT&lt;/em&gt; be cover RAID 5 as it is &lt;em&gt;unstable&lt;/em&gt; and SHOULD NOT BE USED!&lt;/p&gt;
&lt;p&gt;Must know commands for multiple disks:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Add Disks before creating subvolume: &lt;code&gt;sudo btrfs device add /dev/sda1 /dev/sdb1&lt;/code&gt;&lt;br /&gt;
Add Disk to existing subvolume: &lt;code&gt;sudo btrfs device add /dev/sdb1 /home&lt;/code&gt;&lt;br /&gt;
Delete Disk from subvolume: &lt;code&gt;sudo btrfs device delete /dev/sdb1 /home&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Creating the RAID File System:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;RAID 1: &lt;code&gt;sudo btrfs -m raid1 -d raid1 /dev/sda1 /dev/sdb1&lt;/code&gt;&lt;br /&gt;
RAID 10: &lt;code&gt;sudo btrfs -m raid10 -d raid10 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Convert to to RAID 1 after adding disk to existing subvolume&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;btrfs balance start -mconvert=raid1 -dconvert=raid1 /home&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I could put RAID 0 here... but honestly you should just use EXT4 or XFS if you are looking for performance. It would be better than using BTRFS!&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/J2QP4onqJKI&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>Hugo Static Site Guide</title><link>https://christitus.com/hugo-guide/</link><guid isPermaLink="true">https://christitus.com/hugo-guide/</guid><description>&lt;p&gt;This article goes over the basics of hugo and guides you through the process of using a static site generator.&lt;/p&gt;

&lt;h2&gt;Installing Hugo&lt;/h2&gt;
&lt;p&gt;Arch-Based Users: &lt;code&gt;yay -S hugo&lt;/code&gt;&lt;br /&gt;
Debian-Based Users: &lt;code&gt;sudo apt install hugo&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: Debian packages are old and I recommend downloading the latest version of hugo from github&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Github Repo for Hugo (Latest Versions and Notes)&lt;br /&gt;
&lt;a href=&quot;https://github.com/gohugoio/hugo&quot;&gt;Hugo GitHub&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://gohugo.io&quot;&gt;Official Site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Create your first site and install a theme using the &lt;a href=&quot;https://gohugo.io/getting-started/quick-start/&quot;&gt;Quick Start&lt;/a&gt; Page.&lt;/p&gt;
&lt;h2&gt;Common Hugo Commands&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hugo&lt;/code&gt; - builds static files in the &lt;code&gt;siteroot/public&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hugo server&lt;/code&gt; - runs a test site so you can login to &lt;a href=&quot;http://127.0.0.1:1313&quot;&gt;http://127.0.0.1:1313&lt;/a&gt; and see your changes before pushing live&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hugo new posts/dir/newpost.md&lt;/code&gt; - you can make new posts on the fly with all your templates (see below)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The First Changes&lt;/h2&gt;
&lt;p&gt;I made several changes when I first switched to HUGO and these were the changes I made.&lt;/p&gt;
&lt;h3&gt;Theme Modification&lt;/h3&gt;
&lt;p&gt;I downloaded the the &lt;a href=&quot;https://github.com/vimux/mainroad&quot;&gt;Mainroad&lt;/a&gt; Theme and installed it during the Quick Start. &lt;em&gt;Note: My Debian system had an old version of HUGO 0.40 and I had to update before the theme worked.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;Changing Theme Widgets&lt;/h4&gt;
&lt;h5&gt;Social Widget&lt;/h5&gt;
&lt;p&gt;I first started to change the &lt;em&gt;social widget&lt;/em&gt; by adding YouTube and Twitch from the following file &lt;code&gt;siteroot/themes/mainroad/layouts/partials/widgets/social.html&lt;/code&gt;.&lt;br /&gt;
The Most challengeing Part of this was the SVG files used by mainroad. However, once I figured out the SVG format can be edited in a simple text editor and I mirrored the size and types from the existing SVG files they showed up.&lt;/p&gt;
&lt;p&gt;Here are the Edits I made to &lt;em&gt;social.html&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{- with .Site.Params.widgets.social.twitch }}
  &amp;lt;div class=&quot;widget-social__item widget__item&quot;&amp;gt;
   &amp;lt;a class=&quot;widget-social__link widget__link btn&quot; title=&quot;Twitch&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://twitch.tv/{{ . }}&quot; target=&quot;_blank&quot;&amp;gt;
    {{ partial &quot;svg/twitch.svg&quot; (dict &quot;class&quot; &quot;widget-social__link-icon&quot;) }}
    &amp;lt;span&amp;gt;Twitch Live Streams&amp;lt;/span&amp;gt;
   &amp;lt;/a&amp;gt;
  &amp;lt;/div&amp;gt;
  {{- end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Basically after getting the SVG setup and putting the twitch.svg and youtube.svg in this path &lt;code&gt;siteroot/mainroad/layouts/partials/svg&lt;/code&gt; I was able to get the Social widget exactly how I wanted.&lt;/p&gt;
&lt;h5&gt;Tags Widget&lt;/h5&gt;
&lt;p&gt;Next up was fixing the tags on the sidebar. They were blocky and quite ugly, where I wanted a traditional tag cloud that you see on many other sites to help users navigate your content. So I began looking at other projects that had the proper code. I found the following code snippit:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ if not (eq (len $.Site.Taxonomies.tags) 0) }}
    {{ $fontUnit := &quot;rem&quot; }}
    {{ $largestFontSize := 2.0 }}
    {{ $largestFontSize := 2.5 }}
    {{ $smallestFontSize := 1.0 }}
    {{ $fontSpread := sub $largestFontSize $smallestFontSize }}
    {{ $max := add (len (index $.Site.Taxonomies.tags.ByCount 0).Pages) 1 }}
    {{ $min := len (index $.Site.Taxonomies.tags.ByCount.Reverse 0).Pages }}
    {{ $spread := sub $max $min }}
    {{ $fontStep := div $fontSpread $spread }}
&amp;lt;div class=&quot;widget-taglist widget&quot;&amp;gt;
  &amp;lt;h4 class=&quot;widget__title&quot;&amp;gt;{{ T &quot;tags_title&quot; }}&amp;lt;/h4&amp;gt;
   &amp;lt;div class=&quot;widget__content&quot;&amp;gt;
    &amp;lt;div id=&quot;tag-cloud&quot; style=&quot;padding: 5px 15px&quot;&amp;gt;
        {{ range $name, $taxonomy := $.Site.Taxonomies.tags }}
            {{ $currentTagCount := len $taxonomy.Pages }}
            {{ $currentFontSize := (add $smallestFontSize (mul (sub $currentTagCount $min) $fontStep) ) }}
            {{ $count := len $taxonomy.Pages }}
            {{ $weigth := div (sub (math.Log $count) (math.Log $min)) (sub (math.Log $max) (math.Log $min)) }}
            {{ $currentFontSize := (add $smallestFontSize (mul (sub $largestFontSize $smallestFontSize) $weigth) ) }}
            &amp;lt;!--Current font size: {{$currentFontSize}}--&amp;gt;
            &amp;lt;a href=&quot;{{ &quot;/tags/&quot; | relLangURL }}{{ $name | urlize }}&quot; style=&quot;font-size:{{$currentFontSize}}{{$fontUnit}}&quot;&amp;gt;{{ $name }}&amp;lt;/a&amp;gt;
        {{ end }}
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After replacing &lt;code&gt;siteroot/themes/mainroad/layouts/partials/widgets/taglist.html&lt;/code&gt; with the following code. The tag cloud was complete.&lt;/p&gt;
&lt;h4&gt;Header/Footer Modification&lt;/h4&gt;
&lt;p&gt;Replacing the Header and footer was extremely easy as it is just plain HTML. The files are located in &lt;code&gt;siteroot/themes/mainroad/layouts/partials/header.html or footer.html&lt;/code&gt;. You can leave the stock, but I wanted to add a privacy policy and terms of service to be compliant.&lt;/p&gt;
&lt;h4&gt;Table of Contents Changes&lt;/h4&gt;
&lt;p&gt;I replaced the title &quot;PAGE CONTENTS&quot; with share buttons using a share-buttons.html I created. This could all be done in the post-toc.html file, but I wanted to keep it modular and not make too many edits to the theme. Here were my changes:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;siteroot/themes/mainroad/layouts/partials/post-toc.html&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ if .Param &quot;toc&quot; }}
&amp;lt;div class=&quot;post__toc toc&quot;&amp;gt;
 &amp;lt;div class=&quot;toc__title&quot;&amp;gt;{{ partial &quot;share-buttons.html&quot; . }}&amp;lt;/div&amp;gt;
 &amp;lt;div class=&quot;toc__menu&quot;&amp;gt;
  {{ .TableOfContents }}
 &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: I added the &lt;code&gt;{{ partial &quot;share-buttons.html&quot; . }}&lt;/code&gt; to this and removed PAGE CONTENTS text&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;/siteroot/layouts/partials/share-buttons.html&lt;/em&gt; - NEW FILE&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ $pageurl := .Permalink }}

&amp;lt;style&amp;gt;
#share-buttons {display: inline-block; vertical-align: middle; }
#share-buttons:after {content: &quot;&quot;; display: block; clear: both;}
#share-buttons &amp;gt; div {
position: relative;
text-align: left; 
height: 36px; 
width: 32px; 
float: left; 
text-align: center;
}
#share-buttons &amp;gt; div &amp;gt; svg {height: 16px; fill: #d5d5d5; margin-top: 10px;}
#share-buttons &amp;gt; div:hover {cursor: pointer;}
#share-buttons &amp;gt; div.facebook:hover &amp;gt; svg {fill: #3B5998;}
#share-buttons &amp;gt; div.twitter:hover &amp;gt; svg {fill: #55ACEE;}
#share-buttons &amp;gt; div.linkedin:hover &amp;gt; svg {fill: #0077b5;}
#share-buttons &amp;gt; div.pinterest:hover &amp;gt; svg {fill: #CB2027;}
#share-buttons &amp;gt; div.mail:hover &amp;gt; svg {fill: #7D7D7D;}
#share-buttons &amp;gt; div.instagram:hover &amp;gt; svg {fill: #C73B92;}
#share-buttons &amp;gt; div.facebook &amp;gt; svg {height: 18px; margin-top: 9px;}
#share-buttons &amp;gt; div.twitter &amp;gt; svg {height: 20px; margin-top: 8px;}
#share-buttons &amp;gt; div.linkedin &amp;gt; svg {height: 19px; margin-top: 7px;}
#share-buttons &amp;gt; div.pinterest &amp;gt; svg {height: 20px; margin-top: 9px;}
#share-buttons &amp;gt; div.mail &amp;gt; svg {height: 14px; margin-top: 11px;}
&amp;lt;/style&amp;gt;

&amp;lt;span style=&quot;color: silver;&quot;&amp;gt;Share on: &amp;lt;/span&amp;gt;&amp;lt;div id=&quot;share-buttons&quot;&amp;gt;
&amp;lt;div class=&quot;facebook&quot; title=&quot;Share this on Facebook&quot; onclick=&quot;window.open(&apos;http://www.facebook.com/share.php?u={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1343 12v264h-157q-86 0-116 36t-30 108v189h293l-39 296h-254v759h-306v-759h-255v-296h255v-218q0-186 104-288.5t277-102.5q147 0 228 12z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;twitter&quot; title=&quot;Share this on Twitter&quot; onclick=&quot;window.open(&apos;http://twitter.com/home?status={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1684 408q-67 98-162 167 1 14 1 42 0 130-38 259.5t-115.5 248.5-184.5 210.5-258 146-323 54.5q-271 0-496-145 35 4 78 4 225 0 401-138-105-2-188-64.5t-114-159.5q33 5 61 5 43 0 85-11-112-23-185.5-111.5t-73.5-205.5v-4q68 38 146 41-66-44-105-115t-39-154q0-88 44-163 121 149 294.5 238.5t371.5 99.5q-8-38-8-74 0-134 94.5-228.5t228.5-94.5q140 0 236 102 109-21 205-78-37 115-142 178 93-10 186-50z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;linkedin&quot; title=&quot;Share this on Linkedin&quot; onclick=&quot;window.open(&apos;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url={{ $pageurl }}&amp;amp;title=&amp;amp;summary=&amp;amp;source=&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M477 625v991h-330v-991h330zm21-306q1 73-50.5 122t-135.5 49h-2q-82 0-132-49t-50-122q0-74 51.5-122.5t134.5-48.5 133 48.5 51 122.5zm1166 729v568h-329v-530q0-105-40.5-164.5t-126.5-59.5q-63 0-105.5 34.5t-63.5 85.5q-11 30-11 81v553h-329q2-399 2-647t-1-296l-1-48h329v144h-2q20-32 41-56t56.5-52 87-43.5 114.5-15.5q171 0 275 113.5t104 332.5z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
{{ if .Params.image }}&amp;lt;div class=&quot;pinterest&quot; title=&quot;Share this on Pinterest&quot; onclick=&quot;window.open(&apos;https://pinterest.com/pin/create/button/?url=&amp;amp;media={{ .Params.image }}&amp;amp;description=&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M256 597q0-108 37.5-203.5t103.5-166.5 152-123 185-78 202-26q158 0 294 66.5t221 193.5 85 287q0 96-19 188t-60 177-100 149.5-145 103-189 38.5q-68 0-135-32t-96-88q-10 39-28 112.5t-23.5 95-20.5 71-26 71-32 62.5-46 77.5-62 86.5l-14 5-9-10q-15-157-15-188 0-92 21.5-206.5t66.5-287.5 52-203q-32-65-32-169 0-83 52-156t132-73q61 0 95 40.5t34 102.5q0 66-44 191t-44 187q0 63 45 104.5t109 41.5q55 0 102-25t78.5-68 56-95 38-110.5 20-111 6.5-99.5q0-173-109.5-269.5t-285.5-96.5q-200 0-334 129.5t-134 328.5q0 44 12.5 85t27 65 27 45.5 12.5 30.5q0 28-15 73t-37 45q-2 0-17-3-51-15-90.5-56t-61-94.5-32.5-108-11-106.5z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;{{ end }}
&amp;lt;div class=&quot;mail&quot; title=&quot;Share this through Email&quot; onclick=&quot;window.open(&apos;mailto:?&amp;amp;body={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1792 710v794q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-794q44 49 101 87 362 246 497 345 57 42 92.5 65.5t94.5 48 110 24.5h2q51 0 110-24.5t94.5-48 92.5-65.5q170-123 498-345 57-39 100-87zm0-294q0 79-49 151t-122 123q-376 261-468 325-10 7-42.5 30.5t-54 38-52 32.5-57.5 27-50 9h-2q-23 0-50-9t-57.5-27-52-32.5-54-38-42.5-30.5q-91-64-262-182.5t-205-142.5q-62-42-117-115.5t-55-136.5q0-78 41.5-130t118.5-52h1472q65 0 112.5 47t47.5 113z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adding AdSense and Custom Scripts to All Pages&lt;/h4&gt;
&lt;p&gt;To add specific scripts to all pages, such as AdSense, you will need to modify &lt;code&gt;siteroot/themes/mainroad/_defaults/baseof.html&lt;/code&gt;. I added the following before the &lt;code&gt;&amp;lt;/head&amp;gt;&lt;/code&gt; of this file to populate AdSense. You could put Analytics in here as well, but it isn&apos;t needed since mainroad theme has the option in &lt;code&gt;config.toml&lt;/code&gt;. Here are my modifications:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;baseof.html&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{- if not .Site.IsServer }}
  {{ template &quot;_internal/google_analytics_async.html&quot; . }}
  {{ partial &quot;adsense-auto.html&quot; . }}
 {{- end }}
&amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*siteroot/layouts/partials/adsense-auto.html_ - NEW FILE&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script data-ad-client=&quot;ca-pub-000000000000000&quot; async src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;_Note: Make sure to use your &lt;em&gt;ca-pub-IDGOESHERE&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Configuration of config.toml&lt;/h3&gt;
&lt;p&gt;In your siteroot you will see this file that you will need to configure. Most users will simply edit this and away they go. Everything in this file worked pretty darn well. There was a couple spots that tripped me up which I will go over now.&lt;/p&gt;
&lt;h4&gt;BaseURL&lt;/h4&gt;
&lt;p&gt;Make sure you fill this out completely. I messed up the automated sitemap.xml because I simply put / instead of my entire address. This is what I have in the file now: &lt;code&gt;baseURL = &quot;https://christitus.com/&quot;&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Analytics, Social, and Title/Description&lt;/h4&gt;
&lt;p&gt;All of these options worked perfectly and I had no issues.&lt;/p&gt;
&lt;h4&gt;Menu&lt;/h4&gt;
&lt;p&gt;The last problem I had was the menu at the top of my theme. I soon learned there was a syntax to the config.toml file that I missed. I simply added this to the bottom and changed the weight to sort the menu properly. Here is that code snippit:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[menu]

  [[menu.main]]
    identifier = &quot;home&quot;
    name = &quot;Home&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-heart&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;/&quot;
    weight = -110

  [[menu.main]]
    name = &quot;Donate&quot;
    post = &quot;&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-road&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;https://www.patreon.com/christitustech&quot;
    weight = -105

  [[menu.main]]
    name = &quot;Remote Support&quot;
    post = &quot;&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-road&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;https://download.teamviewer.com/download/TeamViewerQS.exe&quot;
    weight = -100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: I added external site links and a proper home button&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Templates to Optimze My Workflow&lt;/h3&gt;
&lt;p&gt;This is where HUGO really shines and saves me a TON of time compared to WordPress and the like. Simply modifying the &lt;code&gt;siteroot/archetypes/default.md&lt;/code&gt; file to put all the things I normally have in a post. Here is what I use:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://default.md&quot;&gt;default.md&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;{{ replace .Name &quot;-&quot; &quot; &quot; | title }}&quot;

date: {{ .Date }}
url: /{{ .Name }}/
image: images/2020-thumbs/{{ .Name }}.webp
categories:
  - Linux
  - Windows
  - Networking
tags:
  - Ubuntu
draft: true
---
&amp;lt;!--more--&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now everytime I run &lt;code&gt;hugo new posts/newpost.md&lt;/code&gt; it will fill in the Title, date, custom url, thumbnail, add the more directive for list view, and my closing phrase.&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/6JaBian3vgI&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;This has changed my life and has made it so I can make posts like this one for people to follow. This entire post took me about an hour to write and would have take twice as long if I were to do it in WordPress.&lt;/p&gt;
</description><pubDate>Wed, 08 Jan 2020 21:59:19 GMT</pubDate><content:encoded>&lt;p&gt;This article goes over the basics of hugo and guides you through the process of using a static site generator.&lt;/p&gt;

&lt;h2&gt;Installing Hugo&lt;/h2&gt;
&lt;p&gt;Arch-Based Users: &lt;code&gt;yay -S hugo&lt;/code&gt;&lt;br /&gt;
Debian-Based Users: &lt;code&gt;sudo apt install hugo&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: Debian packages are old and I recommend downloading the latest version of hugo from github&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Github Repo for Hugo (Latest Versions and Notes)&lt;br /&gt;
&lt;a href=&quot;https://github.com/gohugoio/hugo&quot;&gt;Hugo GitHub&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://gohugo.io&quot;&gt;Official Site&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Create your first site and install a theme using the &lt;a href=&quot;https://gohugo.io/getting-started/quick-start/&quot;&gt;Quick Start&lt;/a&gt; Page.&lt;/p&gt;
&lt;h2&gt;Common Hugo Commands&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hugo&lt;/code&gt; - builds static files in the &lt;code&gt;siteroot/public&lt;/code&gt; folder&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hugo server&lt;/code&gt; - runs a test site so you can login to &lt;a href=&quot;http://127.0.0.1:1313&quot;&gt;http://127.0.0.1:1313&lt;/a&gt; and see your changes before pushing live&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hugo new posts/dir/newpost.md&lt;/code&gt; - you can make new posts on the fly with all your templates (see below)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The First Changes&lt;/h2&gt;
&lt;p&gt;I made several changes when I first switched to HUGO and these were the changes I made.&lt;/p&gt;
&lt;h3&gt;Theme Modification&lt;/h3&gt;
&lt;p&gt;I downloaded the the &lt;a href=&quot;https://github.com/vimux/mainroad&quot;&gt;Mainroad&lt;/a&gt; Theme and installed it during the Quick Start. &lt;em&gt;Note: My Debian system had an old version of HUGO 0.40 and I had to update before the theme worked.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;Changing Theme Widgets&lt;/h4&gt;
&lt;h5&gt;Social Widget&lt;/h5&gt;
&lt;p&gt;I first started to change the &lt;em&gt;social widget&lt;/em&gt; by adding YouTube and Twitch from the following file &lt;code&gt;siteroot/themes/mainroad/layouts/partials/widgets/social.html&lt;/code&gt;.&lt;br /&gt;
The Most challengeing Part of this was the SVG files used by mainroad. However, once I figured out the SVG format can be edited in a simple text editor and I mirrored the size and types from the existing SVG files they showed up.&lt;/p&gt;
&lt;p&gt;Here are the Edits I made to &lt;em&gt;social.html&lt;/em&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{- with .Site.Params.widgets.social.twitch }}
  &amp;lt;div class=&quot;widget-social__item widget__item&quot;&amp;gt;
   &amp;lt;a class=&quot;widget-social__link widget__link btn&quot; title=&quot;Twitch&quot; rel=&quot;noopener noreferrer&quot; href=&quot;https://twitch.tv/{{ . }}&quot; target=&quot;_blank&quot;&amp;gt;
    {{ partial &quot;svg/twitch.svg&quot; (dict &quot;class&quot; &quot;widget-social__link-icon&quot;) }}
    &amp;lt;span&amp;gt;Twitch Live Streams&amp;lt;/span&amp;gt;
   &amp;lt;/a&amp;gt;
  &amp;lt;/div&amp;gt;
  {{- end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Basically after getting the SVG setup and putting the twitch.svg and youtube.svg in this path &lt;code&gt;siteroot/mainroad/layouts/partials/svg&lt;/code&gt; I was able to get the Social widget exactly how I wanted.&lt;/p&gt;
&lt;h5&gt;Tags Widget&lt;/h5&gt;
&lt;p&gt;Next up was fixing the tags on the sidebar. They were blocky and quite ugly, where I wanted a traditional tag cloud that you see on many other sites to help users navigate your content. So I began looking at other projects that had the proper code. I found the following code snippit:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ if not (eq (len $.Site.Taxonomies.tags) 0) }}
    {{ $fontUnit := &quot;rem&quot; }}
    {{ $largestFontSize := 2.0 }}
    {{ $largestFontSize := 2.5 }}
    {{ $smallestFontSize := 1.0 }}
    {{ $fontSpread := sub $largestFontSize $smallestFontSize }}
    {{ $max := add (len (index $.Site.Taxonomies.tags.ByCount 0).Pages) 1 }}
    {{ $min := len (index $.Site.Taxonomies.tags.ByCount.Reverse 0).Pages }}
    {{ $spread := sub $max $min }}
    {{ $fontStep := div $fontSpread $spread }}
&amp;lt;div class=&quot;widget-taglist widget&quot;&amp;gt;
  &amp;lt;h4 class=&quot;widget__title&quot;&amp;gt;{{ T &quot;tags_title&quot; }}&amp;lt;/h4&amp;gt;
   &amp;lt;div class=&quot;widget__content&quot;&amp;gt;
    &amp;lt;div id=&quot;tag-cloud&quot; style=&quot;padding: 5px 15px&quot;&amp;gt;
        {{ range $name, $taxonomy := $.Site.Taxonomies.tags }}
            {{ $currentTagCount := len $taxonomy.Pages }}
            {{ $currentFontSize := (add $smallestFontSize (mul (sub $currentTagCount $min) $fontStep) ) }}
            {{ $count := len $taxonomy.Pages }}
            {{ $weigth := div (sub (math.Log $count) (math.Log $min)) (sub (math.Log $max) (math.Log $min)) }}
            {{ $currentFontSize := (add $smallestFontSize (mul (sub $largestFontSize $smallestFontSize) $weigth) ) }}
            &amp;lt;!--Current font size: {{$currentFontSize}}--&amp;gt;
            &amp;lt;a href=&quot;{{ &quot;/tags/&quot; | relLangURL }}{{ $name | urlize }}&quot; style=&quot;font-size:{{$currentFontSize}}{{$fontUnit}}&quot;&amp;gt;{{ $name }}&amp;lt;/a&amp;gt;
        {{ end }}
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After replacing &lt;code&gt;siteroot/themes/mainroad/layouts/partials/widgets/taglist.html&lt;/code&gt; with the following code. The tag cloud was complete.&lt;/p&gt;
&lt;h4&gt;Header/Footer Modification&lt;/h4&gt;
&lt;p&gt;Replacing the Header and footer was extremely easy as it is just plain HTML. The files are located in &lt;code&gt;siteroot/themes/mainroad/layouts/partials/header.html or footer.html&lt;/code&gt;. You can leave the stock, but I wanted to add a privacy policy and terms of service to be compliant.&lt;/p&gt;
&lt;h4&gt;Table of Contents Changes&lt;/h4&gt;
&lt;p&gt;I replaced the title &quot;PAGE CONTENTS&quot; with share buttons using a share-buttons.html I created. This could all be done in the post-toc.html file, but I wanted to keep it modular and not make too many edits to the theme. Here were my changes:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;siteroot/themes/mainroad/layouts/partials/post-toc.html&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ if .Param &quot;toc&quot; }}
&amp;lt;div class=&quot;post__toc toc&quot;&amp;gt;
 &amp;lt;div class=&quot;toc__title&quot;&amp;gt;{{ partial &quot;share-buttons.html&quot; . }}&amp;lt;/div&amp;gt;
 &amp;lt;div class=&quot;toc__menu&quot;&amp;gt;
  {{ .TableOfContents }}
 &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: I added the &lt;code&gt;{{ partial &quot;share-buttons.html&quot; . }}&lt;/code&gt; to this and removed PAGE CONTENTS text&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;/siteroot/layouts/partials/share-buttons.html&lt;/em&gt; - NEW FILE&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{ $pageurl := .Permalink }}

&amp;lt;style&amp;gt;
#share-buttons {display: inline-block; vertical-align: middle; }
#share-buttons:after {content: &quot;&quot;; display: block; clear: both;}
#share-buttons &amp;gt; div {
position: relative;
text-align: left; 
height: 36px; 
width: 32px; 
float: left; 
text-align: center;
}
#share-buttons &amp;gt; div &amp;gt; svg {height: 16px; fill: #d5d5d5; margin-top: 10px;}
#share-buttons &amp;gt; div:hover {cursor: pointer;}
#share-buttons &amp;gt; div.facebook:hover &amp;gt; svg {fill: #3B5998;}
#share-buttons &amp;gt; div.twitter:hover &amp;gt; svg {fill: #55ACEE;}
#share-buttons &amp;gt; div.linkedin:hover &amp;gt; svg {fill: #0077b5;}
#share-buttons &amp;gt; div.pinterest:hover &amp;gt; svg {fill: #CB2027;}
#share-buttons &amp;gt; div.mail:hover &amp;gt; svg {fill: #7D7D7D;}
#share-buttons &amp;gt; div.instagram:hover &amp;gt; svg {fill: #C73B92;}
#share-buttons &amp;gt; div.facebook &amp;gt; svg {height: 18px; margin-top: 9px;}
#share-buttons &amp;gt; div.twitter &amp;gt; svg {height: 20px; margin-top: 8px;}
#share-buttons &amp;gt; div.linkedin &amp;gt; svg {height: 19px; margin-top: 7px;}
#share-buttons &amp;gt; div.pinterest &amp;gt; svg {height: 20px; margin-top: 9px;}
#share-buttons &amp;gt; div.mail &amp;gt; svg {height: 14px; margin-top: 11px;}
&amp;lt;/style&amp;gt;

&amp;lt;span style=&quot;color: silver;&quot;&amp;gt;Share on: &amp;lt;/span&amp;gt;&amp;lt;div id=&quot;share-buttons&quot;&amp;gt;
&amp;lt;div class=&quot;facebook&quot; title=&quot;Share this on Facebook&quot; onclick=&quot;window.open(&apos;http://www.facebook.com/share.php?u={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1343 12v264h-157q-86 0-116 36t-30 108v189h293l-39 296h-254v759h-306v-759h-255v-296h255v-218q0-186 104-288.5t277-102.5q147 0 228 12z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;twitter&quot; title=&quot;Share this on Twitter&quot; onclick=&quot;window.open(&apos;http://twitter.com/home?status={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1684 408q-67 98-162 167 1 14 1 42 0 130-38 259.5t-115.5 248.5-184.5 210.5-258 146-323 54.5q-271 0-496-145 35 4 78 4 225 0 401-138-105-2-188-64.5t-114-159.5q33 5 61 5 43 0 85-11-112-23-185.5-111.5t-73.5-205.5v-4q68 38 146 41-66-44-105-115t-39-154q0-88 44-163 121 149 294.5 238.5t371.5 99.5q-8-38-8-74 0-134 94.5-228.5t228.5-94.5q140 0 236 102 109-21 205-78-37 115-142 178 93-10 186-50z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;div class=&quot;linkedin&quot; title=&quot;Share this on Linkedin&quot; onclick=&quot;window.open(&apos;https://www.linkedin.com/shareArticle?mini=true&amp;amp;url={{ $pageurl }}&amp;amp;title=&amp;amp;summary=&amp;amp;source=&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M477 625v991h-330v-991h330zm21-306q1 73-50.5 122t-135.5 49h-2q-82 0-132-49t-50-122q0-74 51.5-122.5t134.5-48.5 133 48.5 51 122.5zm1166 729v568h-329v-530q0-105-40.5-164.5t-126.5-59.5q-63 0-105.5 34.5t-63.5 85.5q-11 30-11 81v553h-329q2-399 2-647t-1-296l-1-48h329v144h-2q20-32 41-56t56.5-52 87-43.5 114.5-15.5q171 0 275 113.5t104 332.5z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
{{ if .Params.image }}&amp;lt;div class=&quot;pinterest&quot; title=&quot;Share this on Pinterest&quot; onclick=&quot;window.open(&apos;https://pinterest.com/pin/create/button/?url=&amp;amp;media={{ .Params.image }}&amp;amp;description=&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M256 597q0-108 37.5-203.5t103.5-166.5 152-123 185-78 202-26q158 0 294 66.5t221 193.5 85 287q0 96-19 188t-60 177-100 149.5-145 103-189 38.5q-68 0-135-32t-96-88q-10 39-28 112.5t-23.5 95-20.5 71-26 71-32 62.5-46 77.5-62 86.5l-14 5-9-10q-15-157-15-188 0-92 21.5-206.5t66.5-287.5 52-203q-32-65-32-169 0-83 52-156t132-73q61 0 95 40.5t34 102.5q0 66-44 191t-44 187q0 63 45 104.5t109 41.5q55 0 102-25t78.5-68 56-95 38-110.5 20-111 6.5-99.5q0-173-109.5-269.5t-285.5-96.5q-200 0-334 129.5t-134 328.5q0 44 12.5 85t27 65 27 45.5 12.5 30.5q0 28-15 73t-37 45q-2 0-17-3-51-15-90.5-56t-61-94.5-32.5-108-11-106.5z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;{{ end }}
&amp;lt;div class=&quot;mail&quot; title=&quot;Share this through Email&quot; onclick=&quot;window.open(&apos;mailto:?&amp;amp;body={{ $pageurl }}&apos;);&quot;&amp;gt;&amp;lt;svg viewBox=&quot;0 0 1792 1792&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&amp;gt;&amp;lt;path d=&quot;M1792 710v794q0 66-47 113t-113 47h-1472q-66 0-113-47t-47-113v-794q44 49 101 87 362 246 497 345 57 42 92.5 65.5t94.5 48 110 24.5h2q51 0 110-24.5t94.5-48 92.5-65.5q170-123 498-345 57-39 100-87zm0-294q0 79-49 151t-122 123q-376 261-468 325-10 7-42.5 30.5t-54 38-52 32.5-57.5 27-50 9h-2q-23 0-50-9t-57.5-27-52-32.5-54-38-42.5-30.5q-91-64-262-182.5t-205-142.5q-62-42-117-115.5t-55-136.5q0-78 41.5-130t118.5-52h1472q65 0 112.5 47t47.5 113z&quot;/&amp;gt;&amp;lt;/svg&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Adding AdSense and Custom Scripts to All Pages&lt;/h4&gt;
&lt;p&gt;To add specific scripts to all pages, such as AdSense, you will need to modify &lt;code&gt;siteroot/themes/mainroad/_defaults/baseof.html&lt;/code&gt;. I added the following before the &lt;code&gt;&amp;lt;/head&amp;gt;&lt;/code&gt; of this file to populate AdSense. You could put Analytics in here as well, but it isn&apos;t needed since mainroad theme has the option in &lt;code&gt;config.toml&lt;/code&gt;. Here are my modifications:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;baseof.html&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{{- if not .Site.IsServer }}
  {{ template &quot;_internal/google_analytics_async.html&quot; . }}
  {{ partial &quot;adsense-auto.html&quot; . }}
 {{- end }}
&amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;*siteroot/layouts/partials/adsense-auto.html_ - NEW FILE&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script data-ad-client=&quot;ca-pub-000000000000000&quot; async src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;_Note: Make sure to use your &lt;em&gt;ca-pub-IDGOESHERE&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Configuration of config.toml&lt;/h3&gt;
&lt;p&gt;In your siteroot you will see this file that you will need to configure. Most users will simply edit this and away they go. Everything in this file worked pretty darn well. There was a couple spots that tripped me up which I will go over now.&lt;/p&gt;
&lt;h4&gt;BaseURL&lt;/h4&gt;
&lt;p&gt;Make sure you fill this out completely. I messed up the automated sitemap.xml because I simply put / instead of my entire address. This is what I have in the file now: &lt;code&gt;baseURL = &quot;https://christitus.com/&quot;&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Analytics, Social, and Title/Description&lt;/h4&gt;
&lt;p&gt;All of these options worked perfectly and I had no issues.&lt;/p&gt;
&lt;h4&gt;Menu&lt;/h4&gt;
&lt;p&gt;The last problem I had was the menu at the top of my theme. I soon learned there was a syntax to the config.toml file that I missed. I simply added this to the bottom and changed the weight to sort the menu properly. Here is that code snippit:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[menu]

  [[menu.main]]
    identifier = &quot;home&quot;
    name = &quot;Home&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-heart&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;/&quot;
    weight = -110

  [[menu.main]]
    name = &quot;Donate&quot;
    post = &quot;&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-road&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;https://www.patreon.com/christitustech&quot;
    weight = -105

  [[menu.main]]
    name = &quot;Remote Support&quot;
    post = &quot;&quot;
    pre = &quot;&amp;lt;i class=&apos;fa fa-road&apos;&amp;gt;&amp;lt;/i&amp;gt;&quot;
    url = &quot;https://download.teamviewer.com/download/TeamViewerQS.exe&quot;
    weight = -100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Note: I added external site links and a proper home button&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Templates to Optimze My Workflow&lt;/h3&gt;
&lt;p&gt;This is where HUGO really shines and saves me a TON of time compared to WordPress and the like. Simply modifying the &lt;code&gt;siteroot/archetypes/default.md&lt;/code&gt; file to put all the things I normally have in a post. Here is what I use:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://default.md&quot;&gt;default.md&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;{{ replace .Name &quot;-&quot; &quot; &quot; | title }}&quot;

date: {{ .Date }}
url: /{{ .Name }}/
image: images/2020-thumbs/{{ .Name }}.webp
categories:
  - Linux
  - Windows
  - Networking
tags:
  - Ubuntu
draft: true
---
&amp;lt;!--more--&amp;gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now everytime I run &lt;code&gt;hugo new posts/newpost.md&lt;/code&gt; it will fill in the Title, date, custom url, thumbnail, add the more directive for list view, and my closing phrase.&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/6JaBian3vgI&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;This has changed my life and has made it so I can make posts like this one for people to follow. This entire post took me about an hour to write and would have take twice as long if I were to do it in WordPress.&lt;/p&gt;
</content:encoded></item><item><title>LightDM Configuration</title><link>https://christitus.com/lightdm-configuration/</link><guid isPermaLink="true">https://christitus.com/lightdm-configuration/</guid><description>&lt;p&gt;In this article I go over lightdm configuration. This will teach you how to modify lightdm to choose a default desktop environment, theme, autologin, and even a VNC connection. &lt;/p&gt;
&lt;p&gt;Reference Articles:&lt;br /&gt;
&lt;a href=&quot;https://wiki.ubuntu.com/LightDM&quot;&gt;Ubuntu Wiki&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://wiki.archlinux.org/index.php/LightDM&quot;&gt;Arch Wiki&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://wiki.debian.org/LightDM&quot;&gt;Debian Wiki&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;For Debian based systems, install LightDM by typing &lt;code&gt;sudo apt install lightdm&lt;/code&gt;&lt;br /&gt;
For Arch based systems, install LightDM by typing &lt;code&gt;sudo pacman -S lightdm&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Activating LightDM on startup&lt;/h3&gt;
&lt;p&gt;Before you can enable the lightdm service you will need to disable your current display manager.&lt;/p&gt;
&lt;p&gt;For disabling SDDM (KDE Systems) type &lt;code&gt;sudo systemctl disable sddm&lt;/code&gt;&lt;br /&gt;
For disabling GDM (Gnome Systems) type &lt;code&gt;sudo systemctl disable gdm&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Start out with opening up your &lt;code&gt;/etc/lightdm/lightdm.conf&lt;/code&gt; and this is where most of the modifications will take place.&lt;/p&gt;
&lt;p&gt;I will go over the 4 sections in the configuration that most will want to change or modify.&lt;/p&gt;
&lt;h3&gt;Changing the Theme&lt;/h3&gt;
&lt;p&gt;lightdm.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Seat:*]
#type=local
#pam-service=lightdm
#pam-autologin-service=lightdm-autologin
#pam-greeter-service=lightdm-greeter
#xserver-command=X
#xmir-command=Xmir
#xserver-config=
#xserver-layout=
#xserver-allow-tcp=false
#xserver-share=true
#xserver-hostname=
#xserver-display-number=
#xdmcp-manager=
#xdmcp-port=177
#xdmcp-key=
greeter-session=lightdm-slick-greeter ### CHANGE THIS 
#greeter-hide-users=false
#greeter-allow-guest=true
#greeter-show-manual-login=false
#greeter-show-remote-login=true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install what ever theme you want, this is called a greeter in lightdm, and then change the line above. After the changes are made you can either reboot or type &lt;code&gt;sudo systemctl restart lightdm&lt;/code&gt; &lt;em&gt;Please Note: This will log you out&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Changing the Default Desktop Environment&lt;/h3&gt;
&lt;p&gt;lightdm.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Seat:*]
#type=local
#pam-service=lightdm
#pam-autologin-service=lightdm-autologin
#pam-greeter-service=lightdm-greeter
#xserver-command=X
#xmir-command=Xmir
#xserver-config=
#xserver-layout=
#xserver-allow-tcp=false
#xserver-share=true
#xserver-hostname=
#xserver-display-number=
#xdmcp-manager=
#xdmcp-port=177
#xdmcp-key=
greeter-session=lightdm-slick-greeter
#greeter-hide-users=false
#greeter-allow-guest=true
#greeter-show-manual-login=false
#greeter-show-remote-login=true
user-session=default ################ CHANGE THIS
#allow-user-switching=true
#allow-guest=true
#guest-session=
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To specify a specific desktop environment you need to change the user-session line to be your desktop environment. For example I use the awesome window manager for mine and I put &lt;code&gt;user-session=awesome&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: If you don&apos;t know the name, the desktop environment list can be found with listing .desktop file from /usr/share/xsessions/*.desktop&lt;/em&gt;&lt;br /&gt;
For complete listing of user sessions type: &lt;code&gt;ls /usr/share/xsessions/*.desktop&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;AutoLogin with LightDM&lt;/h3&gt;
&lt;p&gt;Change the following part of the file to autologin. &lt;em&gt;Note: This does pose a security risk and should never be done in a business&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;lightdm.conf Under &lt;code&gt;[Seat:*]&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;autologin-guest=false
autologin-user=username
autologin-user-timeout=0
autologin-in-background=false
#autologin-session=
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I generally uncomment the following lines above and just change this line &lt;code&gt;autologin-user=username&lt;/code&gt; and then it will autologin that user on the next reboot. &lt;em&gt;Note: You can use the &lt;code&gt;autologin-guest&lt;/code&gt; instead of user to have it autologin as a guest account.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;VNC Connection&lt;/h3&gt;
&lt;p&gt;At the buttom of the lightdm.conf file you will see VNC connection information. This information uses the &lt;code&gt;tigervnc&lt;/code&gt; package and also is done using secure channel. This means you must establish a SSH connection with a portforward before you can connect to VNC. Example: &lt;code&gt;ssh 192.168.69.10 -L 9901:localhost:5901&lt;/code&gt; This establishes ssh and port forwards your local port 9901 to 5901 of the remote machine. Then you could launch VNC viewer with &lt;code&gt;vncviewer localhost:9901&lt;/code&gt;. Even though this says localhost it is forwarding the request through SSH to the remote machine.&lt;/p&gt;
&lt;p&gt;Now with that framework lets look at the conf file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#
# VNC Server configuration
#
# enabled = True if VNC connections should be allowed
# command = Command to run Xvnc server with
# port = TCP/IP port to listen for connections on
# listen-address = Host/address to listen for VNC connections (use all addresses if not present)
# width = Width of display to use
# height = Height of display to use
# depth = Color depth of display to use
#
[VNCServer]
#enabled=false
#command=Xvnc
#port=5900
#listen-address=
#width=1024
#height=768
#depth=8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The main things to change here are &lt;code&gt;enabled=true&lt;/code&gt; &lt;code&gt;width - height - depth&lt;/code&gt; and then you are off. My typical defaults would look like the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[VNCServer]
enabled=true
command=Xvnc
port=5900
#listen-address=
width=1920
height=1080
depth=16
&lt;/code&gt;&lt;/pre&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/_dYqisDIcC0&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, 08 Jan 2020 14:09:34 GMT</pubDate><content:encoded>&lt;p&gt;In this article I go over lightdm configuration. This will teach you how to modify lightdm to choose a default desktop environment, theme, autologin, and even a VNC connection. &lt;/p&gt;
&lt;p&gt;Reference Articles:&lt;br /&gt;
&lt;a href=&quot;https://wiki.ubuntu.com/LightDM&quot;&gt;Ubuntu Wiki&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://wiki.archlinux.org/index.php/LightDM&quot;&gt;Arch Wiki&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://wiki.debian.org/LightDM&quot;&gt;Debian Wiki&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;For Debian based systems, install LightDM by typing &lt;code&gt;sudo apt install lightdm&lt;/code&gt;&lt;br /&gt;
For Arch based systems, install LightDM by typing &lt;code&gt;sudo pacman -S lightdm&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Activating LightDM on startup&lt;/h3&gt;
&lt;p&gt;Before you can enable the lightdm service you will need to disable your current display manager.&lt;/p&gt;
&lt;p&gt;For disabling SDDM (KDE Systems) type &lt;code&gt;sudo systemctl disable sddm&lt;/code&gt;&lt;br /&gt;
For disabling GDM (Gnome Systems) type &lt;code&gt;sudo systemctl disable gdm&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Configuration&lt;/h2&gt;
&lt;p&gt;Start out with opening up your &lt;code&gt;/etc/lightdm/lightdm.conf&lt;/code&gt; and this is where most of the modifications will take place.&lt;/p&gt;
&lt;p&gt;I will go over the 4 sections in the configuration that most will want to change or modify.&lt;/p&gt;
&lt;h3&gt;Changing the Theme&lt;/h3&gt;
&lt;p&gt;lightdm.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Seat:*]
#type=local
#pam-service=lightdm
#pam-autologin-service=lightdm-autologin
#pam-greeter-service=lightdm-greeter
#xserver-command=X
#xmir-command=Xmir
#xserver-config=
#xserver-layout=
#xserver-allow-tcp=false
#xserver-share=true
#xserver-hostname=
#xserver-display-number=
#xdmcp-manager=
#xdmcp-port=177
#xdmcp-key=
greeter-session=lightdm-slick-greeter ### CHANGE THIS 
#greeter-hide-users=false
#greeter-allow-guest=true
#greeter-show-manual-login=false
#greeter-show-remote-login=true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install what ever theme you want, this is called a greeter in lightdm, and then change the line above. After the changes are made you can either reboot or type &lt;code&gt;sudo systemctl restart lightdm&lt;/code&gt; &lt;em&gt;Please Note: This will log you out&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Changing the Default Desktop Environment&lt;/h3&gt;
&lt;p&gt;lightdm.conf&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Seat:*]
#type=local
#pam-service=lightdm
#pam-autologin-service=lightdm-autologin
#pam-greeter-service=lightdm-greeter
#xserver-command=X
#xmir-command=Xmir
#xserver-config=
#xserver-layout=
#xserver-allow-tcp=false
#xserver-share=true
#xserver-hostname=
#xserver-display-number=
#xdmcp-manager=
#xdmcp-port=177
#xdmcp-key=
greeter-session=lightdm-slick-greeter
#greeter-hide-users=false
#greeter-allow-guest=true
#greeter-show-manual-login=false
#greeter-show-remote-login=true
user-session=default ################ CHANGE THIS
#allow-user-switching=true
#allow-guest=true
#guest-session=
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To specify a specific desktop environment you need to change the user-session line to be your desktop environment. For example I use the awesome window manager for mine and I put &lt;code&gt;user-session=awesome&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: If you don&apos;t know the name, the desktop environment list can be found with listing .desktop file from /usr/share/xsessions/*.desktop&lt;/em&gt;&lt;br /&gt;
For complete listing of user sessions type: &lt;code&gt;ls /usr/share/xsessions/*.desktop&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;AutoLogin with LightDM&lt;/h3&gt;
&lt;p&gt;Change the following part of the file to autologin. &lt;em&gt;Note: This does pose a security risk and should never be done in a business&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;lightdm.conf Under &lt;code&gt;[Seat:*]&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;autologin-guest=false
autologin-user=username
autologin-user-timeout=0
autologin-in-background=false
#autologin-session=
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I generally uncomment the following lines above and just change this line &lt;code&gt;autologin-user=username&lt;/code&gt; and then it will autologin that user on the next reboot. &lt;em&gt;Note: You can use the &lt;code&gt;autologin-guest&lt;/code&gt; instead of user to have it autologin as a guest account.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;VNC Connection&lt;/h3&gt;
&lt;p&gt;At the buttom of the lightdm.conf file you will see VNC connection information. This information uses the &lt;code&gt;tigervnc&lt;/code&gt; package and also is done using secure channel. This means you must establish a SSH connection with a portforward before you can connect to VNC. Example: &lt;code&gt;ssh 192.168.69.10 -L 9901:localhost:5901&lt;/code&gt; This establishes ssh and port forwards your local port 9901 to 5901 of the remote machine. Then you could launch VNC viewer with &lt;code&gt;vncviewer localhost:9901&lt;/code&gt;. Even though this says localhost it is forwarding the request through SSH to the remote machine.&lt;/p&gt;
&lt;p&gt;Now with that framework lets look at the conf file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#
# VNC Server configuration
#
# enabled = True if VNC connections should be allowed
# command = Command to run Xvnc server with
# port = TCP/IP port to listen for connections on
# listen-address = Host/address to listen for VNC connections (use all addresses if not present)
# width = Width of display to use
# height = Height of display to use
# depth = Color depth of display to use
#
[VNCServer]
#enabled=false
#command=Xvnc
#port=5900
#listen-address=
#width=1024
#height=768
#depth=8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The main things to change here are &lt;code&gt;enabled=true&lt;/code&gt; &lt;code&gt;width - height - depth&lt;/code&gt; and then you are off. My typical defaults would look like the following:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[VNCServer]
enabled=true
command=Xvnc
port=5900
#listen-address=
width=1920
height=1080
depth=16
&lt;/code&gt;&lt;/pre&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/_dYqisDIcC0&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>How To Setup a VPN Kill Switch Server</title><link>https://christitus.com/vpn-kill-switch/</link><guid isPermaLink="true">https://christitus.com/vpn-kill-switch/</guid><description>&lt;p&gt;This will show you how to set up a VPN Kill Switch so all traffic will come from that server. For this server, I am using CentOS, but you can easily use Ubuntu server if you are more familiar with that. &lt;/p&gt;
&lt;h2&gt;Install packages&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/instal.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt install openvpn ufw -y&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Note: use apt instead of dnf on Ubuntu or Debian Servers&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Set Static IP&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo nmtuisudo nmcli connection down eth0 &amp;amp;&amp;amp; sudo nmcli connection up eth0&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Download OVPN Files&lt;/h2&gt;
&lt;p&gt;My recommendation for a public VPN provider at the time of writing was &lt;a href=&quot;https://www.expressvpn.com/&quot;&gt;ExpressVPN&lt;/a&gt;.
&lt;strong&gt;However, you can use these instructions on ANY VPN that provides ovpn files which any reputable VPN provider has.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mv ~/Downloads/client.ovpn /etc/openvpn/test.conf&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;Service creation&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/sysinstall.webp&quot; alt=&quot;sysinstall image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ls /lib/systemd/system/&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Check for openvpn-client@ or openvpn@&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl start openvpn@test&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Disable ipv6 and Secure System&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/sysctl.webp&quot; alt=&quot;sysctl&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo nano /etc/sysctl.conf&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;sudo sysctl -p&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify Ipv6 is disabled&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;cat /proc/sys/net/ipv6/conf/all/disable_ipv6&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo sysctl --all | grep disable_ipv6&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Firewall ufw blocks – VPN Kill Switch&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/vpnsetup.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo nano /etc/default/ufw&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IPV6=no&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Whitelist Local Area Network&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow in to 192.168.1.0/24&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out to 192.168.1.0/24&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Block All Incoming and Outgoing Traffic by Default&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw default deny outgoing&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw default deny incoming&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Whitelist VPN Port for VPN Establishment&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out to any port 1194 proto udp&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*check port by doing head /etc/openvpn/expressvpn.conf&lt;/em&gt;&lt;br /&gt;
&lt;strong&gt;Whitelist VPN Tunnel&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out on tun0 from any to any&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow in on tun0 from any to any&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Enable Firewall&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw enable&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;External Program Setup on Server&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/transmission.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;X11 Forwarding&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/auePeI8vZA8&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;p&gt;&lt;strong&gt;Transmission daemon&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo apt install transmission-daemon&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl stop transmission-daemon&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo nano /etc/transmission-daemon/settings.json&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*enable rpc and whitelist, add blocklist&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl start transmission-daemon&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Full Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wc-Ti8UoPoA&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, 02 Dec 2019 05:31:59 GMT</pubDate><content:encoded>&lt;p&gt;This will show you how to set up a VPN Kill Switch so all traffic will come from that server. For this server, I am using CentOS, but you can easily use Ubuntu server if you are more familiar with that. &lt;/p&gt;
&lt;h2&gt;Install packages&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/instal.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt install openvpn ufw -y&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Note: use apt instead of dnf on Ubuntu or Debian Servers&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Set Static IP&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo nmtuisudo nmcli connection down eth0 &amp;amp;&amp;amp; sudo nmcli connection up eth0&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Download OVPN Files&lt;/h2&gt;
&lt;p&gt;My recommendation for a public VPN provider at the time of writing was &lt;a href=&quot;https://www.expressvpn.com/&quot;&gt;ExpressVPN&lt;/a&gt;.
&lt;strong&gt;However, you can use these instructions on ANY VPN that provides ovpn files which any reputable VPN provider has.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mv ~/Downloads/client.ovpn /etc/openvpn/test.conf&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;Service creation&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/sysinstall.webp&quot; alt=&quot;sysinstall image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ls /lib/systemd/system/&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Check for openvpn-client@ or openvpn@&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl start openvpn@test&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Disable ipv6 and Secure System&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/sysctl.webp&quot; alt=&quot;sysctl&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo nano /etc/sysctl.conf&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;sudo sysctl -p&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verify Ipv6 is disabled&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;cat /proc/sys/net/ipv6/conf/all/disable_ipv6&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo sysctl --all | grep disable_ipv6&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Firewall ufw blocks – VPN Kill Switch&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/vpnsetup.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo nano /etc/default/ufw&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;IPV6=no&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Whitelist Local Area Network&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow in to 192.168.1.0/24&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out to 192.168.1.0/24&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Block All Incoming and Outgoing Traffic by Default&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw default deny outgoing&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw default deny incoming&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Whitelist VPN Port for VPN Establishment&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out to any port 1194 proto udp&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*check port by doing head /etc/openvpn/expressvpn.conf&lt;/em&gt;&lt;br /&gt;
&lt;strong&gt;Whitelist VPN Tunnel&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow out on tun0 from any to any&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw allow in on tun0 from any to any&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Enable Firewall&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw enable&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;External Program Setup on Server&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/12/transmission.webp&quot; alt=&quot;install image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;X11 Forwarding&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/auePeI8vZA8&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;p&gt;&lt;strong&gt;Transmission daemon&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo apt install transmission-daemon&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl stop transmission-daemon&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo nano /etc/transmission-daemon/settings.json&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*enable rpc and whitelist, add blocklist&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo systemctl start transmission-daemon&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Full Video Walkthrough&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/wc-Ti8UoPoA&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>LVM (Logical Volume Management) – Combine Physical Drives and more!</title><link>https://christitus.com/lvm-guide/</link><guid isPermaLink="true">https://christitus.com/lvm-guide/</guid><description>&lt;p&gt;LVM is a very cool volume management tool. It can be used for a variety of tasks and this guide explains all the things LVM can do. I also do an example video of combining physical hard drives using LVM. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Acronyms you must know!&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;PV&lt;/strong&gt; – Physical Volume&lt;br /&gt;
&lt;strong&gt;VG&lt;/strong&gt; – Volume Group&lt;br /&gt;
&lt;strong&gt;LV&lt;/strong&gt; – Logical Volume&lt;/p&gt;&lt;figure class=&quot;wp-block-image&quot;&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/11/LVM.webp&quot; alt=&quot;lvm-key&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;LVM Commands&lt;/h2&gt;
&lt;h3&gt;LVM Layer 1 – Hard Drives, Partitions, and Physical Volumes&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;lvmdiskscan&lt;/code&gt; – system readout of volumes and partitions&lt;br /&gt;
&lt;code&gt;pvdisplay&lt;/code&gt; – display detailed info on physical volumes&lt;br /&gt;
&lt;code&gt;pvscan&lt;/code&gt; – display disks with physical volumes&lt;br /&gt;
&lt;code&gt;pvcreate /dev/sda1&lt;/code&gt; – create a physical volume from sda1&lt;br /&gt;
&lt;code&gt;pvchange -x n /dev/sda1&lt;/code&gt; – Disallow using a disk partition&lt;br /&gt;
&lt;code&gt;pvresize /dev/sda1&lt;/code&gt; – resize sda1 PV to use all of the partition&lt;br /&gt;
&lt;code&gt;pvresize --setphysicalvolumesize 140G /dev/sda1&lt;/code&gt; – resize sda1 to 140g&lt;br /&gt;
&lt;code&gt;pvmove /dev/sda1&lt;/code&gt; – can move data out of sda1 to other PVs in VG. Note: Free disk space equivalent to data moved is needed elsewhere.
&lt;code&gt;pvremove /dev/sda1&lt;/code&gt; – delete Physical volume&lt;/p&gt;
&lt;h3&gt;LVM Layer 2 – Volume Groups&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;vgcreate vg1 /dev/sda1 /dev/sdb1&lt;/code&gt; – create a volume group from two drives&lt;br /&gt;
&lt;code&gt;vgextend vg1 /dev/sdb1&lt;/code&gt; – add PV to the volume group&lt;br /&gt;
&lt;code&gt;vgdisplay vg1&lt;/code&gt; – Display details on a volume group&lt;br /&gt;
&lt;code&gt;vgscan&lt;/code&gt; – list volume groups&lt;br /&gt;
&lt;code&gt;vgreduce vg1 /dev/sda1&lt;/code&gt; – Removes the drive from vg1&lt;br /&gt;
&lt;em&gt;Note: use pvmove /dev/sda1 before removing the drive from vg1&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;vgchange&lt;/code&gt; – you can activate/deactive and change perameteres&lt;br /&gt;
&lt;code&gt;vgremove vg1&lt;/code&gt; – Remove volume group vg1&lt;br /&gt;
&lt;code&gt;vgsplit&lt;/code&gt; and &lt;code&gt;vgmerge&lt;/code&gt; can split and merge volume groups&lt;br /&gt;
&lt;code&gt;vgrename&lt;/code&gt;– renames a volume group&lt;/p&gt;
&lt;h3&gt;LVM Layer 3 – Logical Volumes and File Systems&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;lvcreate -L 10G vg1&lt;/code&gt; – create a 10 GB logical volume on volume group vg1&lt;br /&gt;
&lt;code&gt;lvchange&lt;/code&gt; and &lt;code&gt;lvreduce&lt;/code&gt; are commands that typically aren’t used&lt;br /&gt;
&lt;code&gt;lvrename&lt;/code&gt;– rename logical volume&lt;br /&gt;
&lt;code&gt;lvremove&lt;/code&gt; – removes a logical volume&lt;br /&gt;
&lt;code&gt;lvscan&lt;/code&gt; – shows logical volumes&lt;br /&gt;
&lt;code&gt;lvdisplay&lt;/code&gt; – shows details on logical volumes&lt;br /&gt;
&lt;code&gt;lvextend -l +100%FREE /dev/vg1/lv1&lt;/code&gt;– One of the most common commands used to extend logical volume lv1 that takes up ALL of the remaining free space on the volume group vg1.&lt;br /&gt;
&lt;code&gt;resize2fs /dev/vg1/lv1&lt;/code&gt; – resize the file system to the size of the logical volume lv1.&lt;/p&gt;
&lt;h2&gt;LVM conclusion&lt;/h2&gt;
&lt;p&gt;LVM is fantastic for managing a system, but remember that the more drives you make in a volume group that the likely it is to fail. Instead of having one point of failure you can open yourself up for multiple points when making a large system with multiple drives.&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/scMkYQxBtJ4&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;/figure&gt;</description><pubDate>Fri, 08 Nov 2019 23:06:31 GMT</pubDate><content:encoded>&lt;p&gt;LVM is a very cool volume management tool. It can be used for a variety of tasks and this guide explains all the things LVM can do. I also do an example video of combining physical hard drives using LVM. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Acronyms you must know!&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;PV&lt;/strong&gt; – Physical Volume&lt;br /&gt;
&lt;strong&gt;VG&lt;/strong&gt; – Volume Group&lt;br /&gt;
&lt;strong&gt;LV&lt;/strong&gt; – Logical Volume&lt;/p&gt;&lt;figure class=&quot;wp-block-image&quot;&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/11/LVM.webp&quot; alt=&quot;lvm-key&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;LVM Commands&lt;/h2&gt;
&lt;h3&gt;LVM Layer 1 – Hard Drives, Partitions, and Physical Volumes&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;lvmdiskscan&lt;/code&gt; – system readout of volumes and partitions&lt;br /&gt;
&lt;code&gt;pvdisplay&lt;/code&gt; – display detailed info on physical volumes&lt;br /&gt;
&lt;code&gt;pvscan&lt;/code&gt; – display disks with physical volumes&lt;br /&gt;
&lt;code&gt;pvcreate /dev/sda1&lt;/code&gt; – create a physical volume from sda1&lt;br /&gt;
&lt;code&gt;pvchange -x n /dev/sda1&lt;/code&gt; – Disallow using a disk partition&lt;br /&gt;
&lt;code&gt;pvresize /dev/sda1&lt;/code&gt; – resize sda1 PV to use all of the partition&lt;br /&gt;
&lt;code&gt;pvresize --setphysicalvolumesize 140G /dev/sda1&lt;/code&gt; – resize sda1 to 140g&lt;br /&gt;
&lt;code&gt;pvmove /dev/sda1&lt;/code&gt; – can move data out of sda1 to other PVs in VG. Note: Free disk space equivalent to data moved is needed elsewhere.
&lt;code&gt;pvremove /dev/sda1&lt;/code&gt; – delete Physical volume&lt;/p&gt;
&lt;h3&gt;LVM Layer 2 – Volume Groups&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;vgcreate vg1 /dev/sda1 /dev/sdb1&lt;/code&gt; – create a volume group from two drives&lt;br /&gt;
&lt;code&gt;vgextend vg1 /dev/sdb1&lt;/code&gt; – add PV to the volume group&lt;br /&gt;
&lt;code&gt;vgdisplay vg1&lt;/code&gt; – Display details on a volume group&lt;br /&gt;
&lt;code&gt;vgscan&lt;/code&gt; – list volume groups&lt;br /&gt;
&lt;code&gt;vgreduce vg1 /dev/sda1&lt;/code&gt; – Removes the drive from vg1&lt;br /&gt;
&lt;em&gt;Note: use pvmove /dev/sda1 before removing the drive from vg1&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;vgchange&lt;/code&gt; – you can activate/deactive and change perameteres&lt;br /&gt;
&lt;code&gt;vgremove vg1&lt;/code&gt; – Remove volume group vg1&lt;br /&gt;
&lt;code&gt;vgsplit&lt;/code&gt; and &lt;code&gt;vgmerge&lt;/code&gt; can split and merge volume groups&lt;br /&gt;
&lt;code&gt;vgrename&lt;/code&gt;– renames a volume group&lt;/p&gt;
&lt;h3&gt;LVM Layer 3 – Logical Volumes and File Systems&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;lvcreate -L 10G vg1&lt;/code&gt; – create a 10 GB logical volume on volume group vg1&lt;br /&gt;
&lt;code&gt;lvchange&lt;/code&gt; and &lt;code&gt;lvreduce&lt;/code&gt; are commands that typically aren’t used&lt;br /&gt;
&lt;code&gt;lvrename&lt;/code&gt;– rename logical volume&lt;br /&gt;
&lt;code&gt;lvremove&lt;/code&gt; – removes a logical volume&lt;br /&gt;
&lt;code&gt;lvscan&lt;/code&gt; – shows logical volumes&lt;br /&gt;
&lt;code&gt;lvdisplay&lt;/code&gt; – shows details on logical volumes&lt;br /&gt;
&lt;code&gt;lvextend -l +100%FREE /dev/vg1/lv1&lt;/code&gt;– One of the most common commands used to extend logical volume lv1 that takes up ALL of the remaining free space on the volume group vg1.&lt;br /&gt;
&lt;code&gt;resize2fs /dev/vg1/lv1&lt;/code&gt; – resize the file system to the size of the logical volume lv1.&lt;/p&gt;
&lt;h2&gt;LVM conclusion&lt;/h2&gt;
&lt;p&gt;LVM is fantastic for managing a system, but remember that the more drives you make in a volume group that the likely it is to fail. Instead of having one point of failure you can open yourself up for multiple points when making a large system with multiple drives.&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/scMkYQxBtJ4&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;/figure&gt;</content:encoded></item><item><title>How to Secure A Web Server</title><link>https://christitus.com/secure-web-server/</link><guid isPermaLink="true">https://christitus.com/secure-web-server/</guid><description>&lt;p&gt;In this article, I show you all the steps needed to secure a web server and improve your security. I recommend doing all of these things on every installation. Also, just because you secure your server doesn’t mean you can neglect it. I highly recommend monitoring it and adjusting security as needed. Monitoring is required for proper security in my opinion. &lt;/p&gt;
&lt;h2&gt;Secure A Web Server Steps&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/firewall-png-577x359.webp&quot; alt=&quot;firewall-png-577359&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Install UFW&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get update  
sudo apt-get install ufw  
sudo ufw limit 22/tcp  
sudo ufw allow 80/tcp  
sudo ufw allow 443/tcp  
sudo ufw enable
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Verify&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw status&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do Global blocks&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw default deny incoming  
sudo ufw default allow outgoing
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/ssh.webp&quot; alt=&quot;ssh&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Change SSH to Key&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Remote Machine&lt;/strong&gt;: &lt;code&gt;ssh-keygen -t rsa&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Transfer to Server&lt;/h3&gt;
&lt;h4&gt;Method 1&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Transfer pub ssh key to server&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scp ~/.ssh/id_rsa.pub user@server.com:~
cat ~/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Method 2&lt;/h4&gt;
&lt;p&gt;Copy key and place in authorized_key file in one command&lt;br /&gt;
&lt;code&gt;ssh-copy-id -i ~/.ssh/id_rsa.pub user@server.com&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Secure a Web Server Disabling Password Auth through SSH&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Change the following lines in /etc/sshd_config&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
PermitRootLogin no
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Edit /etc/sysctl.conf&lt;/h2&gt;
&lt;p&gt;Enable security features&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/settings.webp&quot; alt=&quot;settings&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Prevent IP Spoof /etc/host.conf&lt;/h2&gt;
&lt;p&gt;Change File to mirror below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;​order bind,hosts
multi on
nospoof on
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Install Fail2Ban&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Check Listening Ports&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;netstat -tunlp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You will now have completed the basics of a secure web server!&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/7pJKBL9x6bY&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, 10 Oct 2019 13:37:49 GMT</pubDate><content:encoded>&lt;p&gt;In this article, I show you all the steps needed to secure a web server and improve your security. I recommend doing all of these things on every installation. Also, just because you secure your server doesn’t mean you can neglect it. I highly recommend monitoring it and adjusting security as needed. Monitoring is required for proper security in my opinion. &lt;/p&gt;
&lt;h2&gt;Secure A Web Server Steps&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/firewall-png-577x359.webp&quot; alt=&quot;firewall-png-577359&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Install UFW&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get update  
sudo apt-get install ufw  
sudo ufw limit 22/tcp  
sudo ufw allow 80/tcp  
sudo ufw allow 443/tcp  
sudo ufw enable
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Verify&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;sudo ufw status&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do Global blocks&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw default deny incoming  
sudo ufw default allow outgoing
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/ssh.webp&quot; alt=&quot;ssh&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Change SSH to Key&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Remote Machine&lt;/strong&gt;: &lt;code&gt;ssh-keygen -t rsa&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Transfer to Server&lt;/h3&gt;
&lt;h4&gt;Method 1&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Transfer pub ssh key to server&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scp ~/.ssh/id_rsa.pub user@server.com:~
cat ~/id_rsa.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Method 2&lt;/h4&gt;
&lt;p&gt;Copy key and place in authorized_key file in one command&lt;br /&gt;
&lt;code&gt;ssh-copy-id -i ~/.ssh/id_rsa.pub user@server.com&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Secure a Web Server Disabling Password Auth through SSH&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Change the following lines in /etc/sshd_config&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
PermitRootLogin no
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Edit /etc/sysctl.conf&lt;/h2&gt;
&lt;p&gt;Enable security features&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/10/settings.webp&quot; alt=&quot;settings&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Prevent IP Spoof /etc/host.conf&lt;/h2&gt;
&lt;p&gt;Change File to mirror below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;​order bind,hosts
multi on
nospoof on
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Install Fail2Ban&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Check Listening Ports&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;netstat -tunlp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You will now have completed the basics of a secure web server!&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/7pJKBL9x6bY&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>How to Learn Linux</title><link>https://christitus.com/learn-linux/</link><guid isPermaLink="true">https://christitus.com/learn-linux/</guid><description>&lt;p&gt;This article gives you the resources on how to learn Linux. If I am missing a resource, be sure and comment so I can add it.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src=&quot;/images/2019/10/wiki.webp&quot; alt=&quot;wiki&quot; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src=&quot;/images/2019/10/help.webp&quot; alt=&quot;help&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://wiki.archlinux.org/&quot;&gt;Arch Linux Wiki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://discord.gg/yDAqap7Y7Q&quot;&gt;CTT Discord&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://wiki.debian.org/&quot;&gt;Debian Wiki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://discord.gg/fedora&quot;&gt;Fedora&apos;s Discord&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://wiki.ubuntu.com/&quot;&gt;Ubuntu Wiki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.reddit.com/r/linux4noobs/&quot;&gt;Linux4Noobs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://en.opensuse.org/Main_Page&quot;&gt;OpenSUSE Wiki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.linuxquestions.org/questions/&quot;&gt;Linux Questions Forums&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://fedoraproject.org/wiki/Fedora_Project_Wiki&quot;&gt;Fedora Wiki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://ubuntuforums.org/index.php&quot;&gt;Ubuntu Forums&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://bbs.archlinux.org/&quot;&gt;Arch Linux Forums&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src=&quot;/images/2019/10/playbutton.webp&quot; alt=&quot;videos&quot; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src=&quot;/images/2019/10/Screenwriting-Websites.webp&quot; alt=&quot;externalsites&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLc7fktTRMBowM-n5VXCUobY0eddQ1H4YV&quot;&gt;CTT Linux Tutorial Videos&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://itsfoss.com/?&quot;&gt;It&apos;s FOSS&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://theurbanpenguin.github.io/&quot;&gt;The Urban Penguin&apos;s Linux Tutorials&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.linuxuprising.com/&quot;&gt;Linux Uprising&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.pluralsight.com/&quot;&gt;Pluralsight (Classroom Style Courses - PAID)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://linoxide.com/&quot;&gt;Lin0xide&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Video Overview of Learning Resources&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/a2qblT7o4mE&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, 10 Oct 2019 01:42:05 GMT</pubDate><content:encoded>&lt;p&gt;This article gives you the resources on how to learn Linux. If I am missing a resource, be sure and comment so I can add it.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src=&quot;/images/2019/10/wiki.webp&quot; alt=&quot;wiki&quot; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src=&quot;/images/2019/10/help.webp&quot; alt=&quot;help&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://wiki.archlinux.org/&quot;&gt;Arch Linux Wiki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://discord.gg/yDAqap7Y7Q&quot;&gt;CTT Discord&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://wiki.debian.org/&quot;&gt;Debian Wiki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://discord.gg/fedora&quot;&gt;Fedora&apos;s Discord&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://wiki.ubuntu.com/&quot;&gt;Ubuntu Wiki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.reddit.com/r/linux4noobs/&quot;&gt;Linux4Noobs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://en.opensuse.org/Main_Page&quot;&gt;OpenSUSE Wiki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.linuxquestions.org/questions/&quot;&gt;Linux Questions Forums&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://fedoraproject.org/wiki/Fedora_Project_Wiki&quot;&gt;Fedora Wiki&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://ubuntuforums.org/index.php&quot;&gt;Ubuntu Forums&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://bbs.archlinux.org/&quot;&gt;Arch Linux Forums&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;img src=&quot;/images/2019/10/playbutton.webp&quot; alt=&quot;videos&quot; /&gt;&lt;/th&gt;
&lt;th&gt;&lt;img src=&quot;/images/2019/10/Screenwriting-Websites.webp&quot; alt=&quot;externalsites&quot; /&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLc7fktTRMBowM-n5VXCUobY0eddQ1H4YV&quot;&gt;CTT Linux Tutorial Videos&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://itsfoss.com/?&quot;&gt;It&apos;s FOSS&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://theurbanpenguin.github.io/&quot;&gt;The Urban Penguin&apos;s Linux Tutorials&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://www.linuxuprising.com/&quot;&gt;Linux Uprising&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.pluralsight.com/&quot;&gt;Pluralsight (Classroom Style Courses - PAID)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://linoxide.com/&quot;&gt;Lin0xide&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Video Overview of Learning Resources&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/a2qblT7o4mE&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>Custom Kernel in Linux</title><link>https://christitus.com/custom-kernel/</link><guid isPermaLink="true">https://christitus.com/custom-kernel/</guid><description>&lt;p&gt;This Guide walks your through how to install a custom kernel on Linux. I will go over performing this in a Debian-based system and an Arch-based system. Please note that the arch based system requires you to build the kernel yourself and will take much longer. &lt;/p&gt;
&lt;p&gt;Custom kernels in Linux are based on the Zen project and have some workstation/desktop optimizations. They are &lt;strong&gt;NOT&lt;/strong&gt; meant for server installations. These are meant for those using Linux Desktop and utilizing it for Gaming, Production, etc. and overall I don’t recommend using these. However, if you like to tinker and squeeze every bit of performance out of your kernel than you can proceed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/debian.svg&quot; alt=&quot;debian&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Custom Kernel on Ubuntu / Debian / Mint / Pop OS&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Official Site &lt;a href=&quot;https://liquorix.net/&quot;&gt;https://liquorix.net/&lt;/a&gt; for the Liquorix Kernel.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vanilla Debian&lt;/strong&gt; requires a bit of a long command to install the custom kernel, but works fine.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;codename=&quot;$(find /etc/apt -type f -name &apos;*.list&apos; | xargs grep -E &apos;^deb&apos; | awk &apos;{print $3}&apos; | grep -Eo &apos;^[a-z]+&apos; | sort | uniq -c | sort -n | tail -n1 | grep -Eo &apos;[a-z]+$&apos;)&quot; &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install apt-transport-https &amp;amp;&amp;amp; echo -e &quot;deb http://liquorix.net/debian $codename maindeb-src http://liquorix.net/debian $codename main# Mirrors:## Unit193 - France# deb http://mirror.unit193.net/liquorix $codename main# deb-src http://mirror.unit193.net/liquorix $codename main&quot; | sudo tee /etc/apt/sources.list.d/liquorix.list &amp;amp;&amp;amp; curl https://liquorix.net/linux-liquorix.pub | sudo apt-key add - &amp;amp;&amp;amp; sudo apt-get update&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ubuntu,&lt;/strong&gt; &lt;strong&gt;Linux&lt;/strong&gt; &lt;strong&gt;Mint&lt;/strong&gt;, and &lt;strong&gt;Pop&lt;/strong&gt; &lt;strong&gt;OS&lt;/strong&gt;! are quite a bit shorter for the install.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo add-apt-repository ppa:damentz/liquorix &amp;amp;&amp;amp; sudo apt-get update&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/arch.webp&quot; alt=&quot;arch&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Custom Kernel on Arch Linux, Manjaro, etc&lt;/h2&gt;
&lt;p&gt;For Arch-based systems the command to run is simplier than all of the above. However, this is &lt;strong&gt;BUILDING&lt;/strong&gt; a kernel and on a low-end system this will take &lt;strong&gt;HOURS&lt;/strong&gt;.
&lt;em&gt;Example: On my AMD Ryzen 2700 with 16 threads and 8 cores, this took almost 60 minutes!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;yay -S linux-lqx&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: This uses yay as the AUR helper. you may need to change this if you use something else like Yaourt, pacaur, trizen, etc.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For modifying which Kernel you are going to boot in check out these videos going over modifying GRUB&lt;/p&gt;
&lt;h2&gt;Custom Boot (Grub, Rescue, and UKUU) YouTube Videos&lt;/h2&gt;
&lt;p&gt;The following videos will help you if you need to revert your kernel or setup multiple kernels to boot into your Linux installation. This is highly recommended.&lt;/p&gt;
&lt;p&gt;Grub Customizer: &lt;a href=&quot;https://www.youtube.com/watch?v=3s7qBJ-H7vw&quot;&gt;https://www.youtube.com/watch?v=3s7qBJ-H7vw&lt;/a&gt;&lt;br /&gt;
Grub Rescue: &lt;a href=&quot;https://www.youtube.com/watch?v=r7meKJsjqfY&quot;&gt;https://www.youtube.com/watch?v=r7meKJsjqfY&lt;/a&gt;&lt;br /&gt;
Kernel Upgrade with UKUU: &lt;a href=&quot;https://www.youtube.com/watch?v=fnn_MzosdwA&quot;&gt;https://www.youtube.com/watch?v=fnn_MzosdwA&lt;/a&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/nd0MysqLDB0&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, 29 Sep 2019 00:32:45 GMT</pubDate><content:encoded>&lt;p&gt;This Guide walks your through how to install a custom kernel on Linux. I will go over performing this in a Debian-based system and an Arch-based system. Please note that the arch based system requires you to build the kernel yourself and will take much longer. &lt;/p&gt;
&lt;p&gt;Custom kernels in Linux are based on the Zen project and have some workstation/desktop optimizations. They are &lt;strong&gt;NOT&lt;/strong&gt; meant for server installations. These are meant for those using Linux Desktop and utilizing it for Gaming, Production, etc. and overall I don’t recommend using these. However, if you like to tinker and squeeze every bit of performance out of your kernel than you can proceed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/debian.svg&quot; alt=&quot;debian&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Custom Kernel on Ubuntu / Debian / Mint / Pop OS&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Official Site &lt;a href=&quot;https://liquorix.net/&quot;&gt;https://liquorix.net/&lt;/a&gt; for the Liquorix Kernel.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vanilla Debian&lt;/strong&gt; requires a bit of a long command to install the custom kernel, but works fine.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;codename=&quot;$(find /etc/apt -type f -name &apos;*.list&apos; | xargs grep -E &apos;^deb&apos; | awk &apos;{print $3}&apos; | grep -Eo &apos;^[a-z]+&apos; | sort | uniq -c | sort -n | tail -n1 | grep -Eo &apos;[a-z]+$&apos;)&quot; &amp;amp;&amp;amp; sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install apt-transport-https &amp;amp;&amp;amp; echo -e &quot;deb http://liquorix.net/debian $codename maindeb-src http://liquorix.net/debian $codename main# Mirrors:## Unit193 - France# deb http://mirror.unit193.net/liquorix $codename main# deb-src http://mirror.unit193.net/liquorix $codename main&quot; | sudo tee /etc/apt/sources.list.d/liquorix.list &amp;amp;&amp;amp; curl https://liquorix.net/linux-liquorix.pub | sudo apt-key add - &amp;amp;&amp;amp; sudo apt-get update&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ubuntu,&lt;/strong&gt; &lt;strong&gt;Linux&lt;/strong&gt; &lt;strong&gt;Mint&lt;/strong&gt;, and &lt;strong&gt;Pop&lt;/strong&gt; &lt;strong&gt;OS&lt;/strong&gt;! are quite a bit shorter for the install.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo add-apt-repository ppa:damentz/liquorix &amp;amp;&amp;amp; sudo apt-get update&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/arch.webp&quot; alt=&quot;arch&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Custom Kernel on Arch Linux, Manjaro, etc&lt;/h2&gt;
&lt;p&gt;For Arch-based systems the command to run is simplier than all of the above. However, this is &lt;strong&gt;BUILDING&lt;/strong&gt; a kernel and on a low-end system this will take &lt;strong&gt;HOURS&lt;/strong&gt;.
&lt;em&gt;Example: On my AMD Ryzen 2700 with 16 threads and 8 cores, this took almost 60 minutes!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;yay -S linux-lqx&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: This uses yay as the AUR helper. you may need to change this if you use something else like Yaourt, pacaur, trizen, etc.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For modifying which Kernel you are going to boot in check out these videos going over modifying GRUB&lt;/p&gt;
&lt;h2&gt;Custom Boot (Grub, Rescue, and UKUU) YouTube Videos&lt;/h2&gt;
&lt;p&gt;The following videos will help you if you need to revert your kernel or setup multiple kernels to boot into your Linux installation. This is highly recommended.&lt;/p&gt;
&lt;p&gt;Grub Customizer: &lt;a href=&quot;https://www.youtube.com/watch?v=3s7qBJ-H7vw&quot;&gt;https://www.youtube.com/watch?v=3s7qBJ-H7vw&lt;/a&gt;&lt;br /&gt;
Grub Rescue: &lt;a href=&quot;https://www.youtube.com/watch?v=r7meKJsjqfY&quot;&gt;https://www.youtube.com/watch?v=r7meKJsjqfY&lt;/a&gt;&lt;br /&gt;
Kernel Upgrade with UKUU: &lt;a href=&quot;https://www.youtube.com/watch?v=fnn_MzosdwA&quot;&gt;https://www.youtube.com/watch?v=fnn_MzosdwA&lt;/a&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/nd0MysqLDB0&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>Linux File System | Directory Structure</title><link>https://christitus.com/linux-file-system/</link><guid isPermaLink="true">https://christitus.com/linux-file-system/</guid><description>&lt;p&gt;This article details the Linux File System and it’s directory structure.&lt;/p&gt;
&lt;h2&gt;Linux File System – Root&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;/&lt;/strong&gt; -This is the root directory which should contain only the directories needed at the top level of the file structure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/bin&lt;/strong&gt; – This is where the executable files are located. These files are available to all users, but do not add programs manually here&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/dev&lt;/strong&gt; – These are devices in your system – Not Mounted!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/etc&lt;/strong&gt; – Superuser directory commands, configuration files, disk configuration files, valid user lists, groups, ethernet, hosts, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/lib&lt;/strong&gt; – Contains shared library files and sometimes other kernel-related files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/boot&lt;/strong&gt; – Contains files for booting the system /boot/efi for EFI systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/home&lt;/strong&gt; – Contains the home directory for users and other accounts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/media&lt;/strong&gt; – Typically used to mount permanent file systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/mnt&lt;/strong&gt; – Used to mount other temporary file systems, such as cdrom and floppy for the CD-ROM drive and floppy diskette drive, respectively&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/proc&lt;/strong&gt; – Contains all processes marked as a file by process number or other information that is dynamic to the system&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/tmp&lt;/strong&gt; – Holds temporary files used between system boots&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/usr&lt;/strong&gt; – (Unix System Resource) Used for miscellaneous purposes, and can be used by many users. Includes administrative commands, shared files, library files, and others&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/var&lt;/strong&gt; – Typically contains variable-length files such as log and print files and any other type of file that may contain a variable amount of data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/sbin&lt;/strong&gt; – Contains binary (executable) files, usually for system administration. For example, fdisk and ifconfig utlities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/kernel&lt;/strong&gt; – Contains kernel files&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Home Directory Structure&lt;/h2&gt;
&lt;p&gt;/home/user is the home directory for your user and it is often abbreviated with a ~. Folders starting with a period are hidden and can be looked at via options in file browser or &lt;code&gt;ls -al&lt;/code&gt; in terminal.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;~/.cache&lt;/strong&gt; – Cache files for that user&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.config&lt;/strong&gt; – User Configuration files for your programs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.local/share&lt;/strong&gt; – User Configuration files for your system. Edit Application in start menu, modify system configurations for your user, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.ssh&lt;/strong&gt; – SSH configuration and keys&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.vnc&lt;/strong&gt; – VNC remote desktop configuration files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.steam&lt;/strong&gt; – default steam location for games and config files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.bashrc&lt;/strong&gt; (FILE) – This file controls shortcuts and aliases that you use in Terminal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This details the Linux File System and should give you a better understanding of how to navigate around in not only a Linux system, but any UNIX based OS for that matter.&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/roES8iAaJEM&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, 23 Sep 2019 17:23:00 GMT</pubDate><content:encoded>&lt;p&gt;This article details the Linux File System and it’s directory structure.&lt;/p&gt;
&lt;h2&gt;Linux File System – Root&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;/&lt;/strong&gt; -This is the root directory which should contain only the directories needed at the top level of the file structure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/bin&lt;/strong&gt; – This is where the executable files are located. These files are available to all users, but do not add programs manually here&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/dev&lt;/strong&gt; – These are devices in your system – Not Mounted!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/etc&lt;/strong&gt; – Superuser directory commands, configuration files, disk configuration files, valid user lists, groups, ethernet, hosts, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/lib&lt;/strong&gt; – Contains shared library files and sometimes other kernel-related files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/boot&lt;/strong&gt; – Contains files for booting the system /boot/efi for EFI systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/home&lt;/strong&gt; – Contains the home directory for users and other accounts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/media&lt;/strong&gt; – Typically used to mount permanent file systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/mnt&lt;/strong&gt; – Used to mount other temporary file systems, such as cdrom and floppy for the CD-ROM drive and floppy diskette drive, respectively&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/proc&lt;/strong&gt; – Contains all processes marked as a file by process number or other information that is dynamic to the system&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/tmp&lt;/strong&gt; – Holds temporary files used between system boots&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/usr&lt;/strong&gt; – (Unix System Resource) Used for miscellaneous purposes, and can be used by many users. Includes administrative commands, shared files, library files, and others&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/var&lt;/strong&gt; – Typically contains variable-length files such as log and print files and any other type of file that may contain a variable amount of data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/sbin&lt;/strong&gt; – Contains binary (executable) files, usually for system administration. For example, fdisk and ifconfig utlities&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;/kernel&lt;/strong&gt; – Contains kernel files&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Home Directory Structure&lt;/h2&gt;
&lt;p&gt;/home/user is the home directory for your user and it is often abbreviated with a ~. Folders starting with a period are hidden and can be looked at via options in file browser or &lt;code&gt;ls -al&lt;/code&gt; in terminal.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;~/.cache&lt;/strong&gt; – Cache files for that user&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.config&lt;/strong&gt; – User Configuration files for your programs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.local/share&lt;/strong&gt; – User Configuration files for your system. Edit Application in start menu, modify system configurations for your user, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.ssh&lt;/strong&gt; – SSH configuration and keys&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.vnc&lt;/strong&gt; – VNC remote desktop configuration files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.steam&lt;/strong&gt; – default steam location for games and config files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;~/.bashrc&lt;/strong&gt; (FILE) – This file controls shortcuts and aliases that you use in Terminal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This details the Linux File System and should give you a better understanding of how to navigate around in not only a Linux system, but any UNIX based OS for that matter.&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/roES8iAaJEM&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>How to Setup a VPN Server and Clients Using OpenVPN</title><link>https://christitus.com/openvpn-server/</link><guid isPermaLink="true">https://christitus.com/openvpn-server/</guid><description>&lt;p&gt;In this article, I go over how to setup a VPN Server and clients using OpenVPN. this will cover the setup process of the remote machine and then connecting to it via both Linux and Windows client machines. &lt;/p&gt;
&lt;h2&gt;OpenVPN Server Setup&lt;/h2&gt;
&lt;p&gt;This is the Installation script I use to setup a secure OpenVPN Server&lt;br /&gt;
&lt;a href=&quot;https://github.com/angristan/openvpn-install&quot;&gt;https://github.com/angristan/openvpn-install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run the following script as root or add sudo to the &lt;a href=&quot;http://install.sh&quot;&gt;install.sh&lt;/a&gt; script&lt;br /&gt;
&lt;code&gt;curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;chmod +x openvpn-install.sh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AUTO_INSTALL=y ./openvpn-install.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;you will need to enable the OpenVPN service to auto-start so the VPN stays up after reboot.&lt;br /&gt;
&lt;code&gt;sudo systemctl enable openvpn&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Troubleshooting&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/tun-isnot-available.webp&quot; alt=&quot;tun-isnot-available&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TUN is not available&lt;/strong&gt;&lt;br /&gt;
-Certain VPS servers do not have TUN enabled by default. Create the follow script and run it on startup to fix this issue.&lt;/p&gt;
&lt;p&gt;-Create /usr/sbin/enabletun.sh&lt;br /&gt;
&lt;code&gt;#!/bin/bash&lt;/code&gt;
&lt;code&gt;mkdir /dev/net&lt;/code&gt;
&lt;code&gt;mknod /dev/net/tun c 10 200&lt;/code&gt;
&lt;code&gt;chmod 0666 /dev/net/tun&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;-Mark /usr/sbin/enabletun.sh executable&lt;br /&gt;
&lt;code&gt;chmod +x /usr/sbin/enabletun.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;-Run this script on startup by adding the following to /etc/rc.local&lt;br /&gt;
&lt;code&gt;/usr/sbin/tunscript.sh || exit 1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;exit 0&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Client Setup&lt;/h2&gt;
&lt;h3&gt;Linux Client Setup&lt;/h3&gt;
&lt;p&gt;Install OpenVPN for Network Manager&lt;br /&gt;
&lt;strong&gt;Debian-Based&lt;/strong&gt; &lt;code&gt;sudo apt install network-manager-openvpn&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Arch-Based&lt;/strong&gt; &lt;code&gt;sudo pacman -S networkmanager-openvpn&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Gnome-Based DEs&lt;/strong&gt; &lt;code&gt;sudo apt install network-manager-openvpn-gnome&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Copy OVPN file to /etc/openvpn/client/client.ovpn&lt;br /&gt;
Test client configuration in Terminal:&lt;br /&gt;
&lt;code&gt;sudo openvpn /etc/openvpn/client/client.ovpn&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/import-vpn.webp&quot; alt=&quot;import-vpn&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Network manager Import VPN Connection: client.ovpn&lt;br /&gt;
Note: &lt;em&gt;Certificates stored in ~/.local/share/networkmanagement/certificates&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Connect via your Network Manager&lt;/p&gt;
&lt;h3&gt;Linux Client Troubleshooting&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/tls-issue.webp&quot; alt=&quot;tls-issue&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Verify TLS key file is enabled and created. This is a known issue on KDE desktops. If it isn’t make sure to create it using the last TLS portion of the ovpn file.&lt;/p&gt;
&lt;h3&gt;Windows Client Setup&lt;/h3&gt;
&lt;p&gt;Download OpenVPN client for your Windows @ &lt;a href=&quot;https://openvpn.net/community-downloads/&quot;&gt;https://openvpn.net/community-downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/clientovpn-winscp.webp?fit=1024%2C451&amp;amp;ssl=1&quot; alt=&quot;clientovpn-winscp&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Copy your client.ovpn from the server (WinSCP to connect and copy) and place the file in C:\Program Files\OpenVPN\config&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/openvpnconnect.webp&quot; alt=&quot;openvpnconnect&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Run the program and right click the icon in the tray and connect&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/CBJMl9MILbg&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, 21 Sep 2019 04:45:08 GMT</pubDate><content:encoded>&lt;p&gt;In this article, I go over how to setup a VPN Server and clients using OpenVPN. this will cover the setup process of the remote machine and then connecting to it via both Linux and Windows client machines. &lt;/p&gt;
&lt;h2&gt;OpenVPN Server Setup&lt;/h2&gt;
&lt;p&gt;This is the Installation script I use to setup a secure OpenVPN Server&lt;br /&gt;
&lt;a href=&quot;https://github.com/angristan/openvpn-install&quot;&gt;https://github.com/angristan/openvpn-install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run the following script as root or add sudo to the &lt;a href=&quot;http://install.sh&quot;&gt;install.sh&lt;/a&gt; script&lt;br /&gt;
&lt;code&gt;curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;chmod +x openvpn-install.sh&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;AUTO_INSTALL=y ./openvpn-install.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;you will need to enable the OpenVPN service to auto-start so the VPN stays up after reboot.&lt;br /&gt;
&lt;code&gt;sudo systemctl enable openvpn&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Troubleshooting&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/tun-isnot-available.webp&quot; alt=&quot;tun-isnot-available&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TUN is not available&lt;/strong&gt;&lt;br /&gt;
-Certain VPS servers do not have TUN enabled by default. Create the follow script and run it on startup to fix this issue.&lt;/p&gt;
&lt;p&gt;-Create /usr/sbin/enabletun.sh&lt;br /&gt;
&lt;code&gt;#!/bin/bash&lt;/code&gt;
&lt;code&gt;mkdir /dev/net&lt;/code&gt;
&lt;code&gt;mknod /dev/net/tun c 10 200&lt;/code&gt;
&lt;code&gt;chmod 0666 /dev/net/tun&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;-Mark /usr/sbin/enabletun.sh executable&lt;br /&gt;
&lt;code&gt;chmod +x /usr/sbin/enabletun.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;-Run this script on startup by adding the following to /etc/rc.local&lt;br /&gt;
&lt;code&gt;/usr/sbin/tunscript.sh || exit 1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;exit 0&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Client Setup&lt;/h2&gt;
&lt;h3&gt;Linux Client Setup&lt;/h3&gt;
&lt;p&gt;Install OpenVPN for Network Manager&lt;br /&gt;
&lt;strong&gt;Debian-Based&lt;/strong&gt; &lt;code&gt;sudo apt install network-manager-openvpn&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Arch-Based&lt;/strong&gt; &lt;code&gt;sudo pacman -S networkmanager-openvpn&lt;/code&gt;&lt;br /&gt;
&lt;strong&gt;Gnome-Based DEs&lt;/strong&gt; &lt;code&gt;sudo apt install network-manager-openvpn-gnome&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Copy OVPN file to /etc/openvpn/client/client.ovpn&lt;br /&gt;
Test client configuration in Terminal:&lt;br /&gt;
&lt;code&gt;sudo openvpn /etc/openvpn/client/client.ovpn&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/import-vpn.webp&quot; alt=&quot;import-vpn&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Network manager Import VPN Connection: client.ovpn&lt;br /&gt;
Note: &lt;em&gt;Certificates stored in ~/.local/share/networkmanagement/certificates&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Connect via your Network Manager&lt;/p&gt;
&lt;h3&gt;Linux Client Troubleshooting&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/tls-issue.webp&quot; alt=&quot;tls-issue&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Verify TLS key file is enabled and created. This is a known issue on KDE desktops. If it isn’t make sure to create it using the last TLS portion of the ovpn file.&lt;/p&gt;
&lt;h3&gt;Windows Client Setup&lt;/h3&gt;
&lt;p&gt;Download OpenVPN client for your Windows @ &lt;a href=&quot;https://openvpn.net/community-downloads/&quot;&gt;https://openvpn.net/community-downloads/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/clientovpn-winscp.webp?fit=1024%2C451&amp;amp;ssl=1&quot; alt=&quot;clientovpn-winscp&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Copy your client.ovpn from the server (WinSCP to connect and copy) and place the file in C:\Program Files\OpenVPN\config&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/09/openvpnconnect.webp&quot; alt=&quot;openvpnconnect&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Run the program and right click the icon in the tray and connect&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/CBJMl9MILbg&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 Ultimate SSH Guide</title><link>https://christitus.com/ssh-guide/</link><guid isPermaLink="true">https://christitus.com/ssh-guide/</guid><description>&lt;p&gt;This is an SSH guide to help you set up, configure, connect, and transfer files using SSH. &lt;/p&gt;
&lt;h2&gt;Setup SSH&lt;/h2&gt;
&lt;h2&gt;Install SSH on your system&lt;/h2&gt;
&lt;h3&gt;Debian-Based&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo apt install openssh-server -y&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;CentOS/Fedora&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo yum -y install openssh-server&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Arch&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo pacman -S openssh&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Run SSH server on startup&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl start ssh
sudo systemctl enable ssh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;**Note: sshd instead of ssh for arch&lt;/p&gt;
&lt;h2&gt;Configure SSH&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Make sure ufw isn’t blocking ssh and enable it for passthrough.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw allow ssh
sudo ufw limit ssh
sudo ufw enable  
sudo ufw status
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Options for /etc/ssh/sshd_config&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;PasswordAuthentication yes/no&lt;/code&gt;
&lt;em&gt;* No should be used when facing the internet and key authentication must be used for security&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AllowTcpForwarding yes&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;X11Forwarding yes&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;* This is used to forward GUI programs (Xming required for Windows)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AllowUsers Fred Wilma&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;DenyUsers Dino Pebbles&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;* Block and Allow certain users&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Security of a SSH Server&lt;/h3&gt;
&lt;p&gt;It should be noted that if you open up your firewall and port forward port 22 on a standard SSH server install… you will probably be hacked. This is extremely reckless and should never be done. I highly recommend doing &lt;strong&gt;ALL&lt;/strong&gt; of the following measures if opening up SSH to the outside world.&lt;/p&gt;
&lt;p&gt;First, obscure the SSH port by changing it in the sshd_config file&lt;br /&gt;
&lt;code&gt;# Change Default port 22 to 2222&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Port 2222&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Second, disable Password Authentication and use ssh keys instead. This is a complex procedure and recommend using the following script to optimize the encryption and setup process.&lt;br /&gt;
&lt;a href=&quot;https://github.com/angristan/openvpn-install&quot;&gt;https://github.com/angristan/openvpn-install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Third, verify you are using tar-pitting or rate limiting on your SSH port. This will prevent brute force attacks&lt;br /&gt;
&lt;code&gt;ufw limit proto tcp from any port 2222&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Note this can also be done via iptables and it needs to be modified to your SSH port.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Connect via SSH&lt;/h2&gt;
&lt;h2&gt;Linux terminal&lt;/h2&gt;
&lt;p&gt;ssh username@serverip&lt;/p&gt;
&lt;h2&gt;Windows&lt;/h2&gt;
&lt;p&gt;PuTTY &lt;a href=&quot;https://putty.org/&quot;&gt;https://putty.org/&lt;/a&gt; (ssh program)&lt;/p&gt;
&lt;p&gt;Xming required for X11 forwarding &lt;a href=&quot;https://sourceforge.net/projects/xming/&quot;&gt;https://sourceforge.net/projects/xming/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Verify X11 Forwarding in PuTTY options&lt;/p&gt;
&lt;h2&gt;Video Walkthrough SSH Access&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/w_OwmqjAcn0&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;Transfer Files via SSH&lt;/h2&gt;
&lt;p&gt;The difference between SFTP and SCP by default are one is interactive and the other isn’t. SCP is faster, but can’t be resumed where SFTP and slower and can be.&lt;/p&gt;
&lt;h2&gt;Linux&lt;/h2&gt;
&lt;p&gt;Use the native file browser, in the location bar type the following:&lt;br /&gt;
&lt;code&gt;sftp://192.168.1.10&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Using the terminal&lt;/h3&gt;
&lt;p&gt;Syntax: &lt;strong&gt;&lt;code&gt;scp&lt;/code&gt;&lt;/strong&gt; &lt;code&gt;source destination&lt;/code&gt;&lt;br /&gt;
Remote PC Syntax: &lt;code&gt;username@serverip:/path/to/file&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example: &lt;code&gt;scp localfile username@serverip:/remote/server/path&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Windows File Transfer&lt;/h2&gt;
&lt;p&gt;WinSCP is my recommended transfer tool.
&lt;a href=&quot;https://winscp.net/eng/index.php&quot;&gt;https://winscp.net/eng/index.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;pscp.exe for command line. &lt;a href=&quot;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html&quot;&gt;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html&lt;/a&gt;&lt;/p&gt;
</description><pubDate>Wed, 18 Sep 2019 21:55:20 GMT</pubDate><content:encoded>&lt;p&gt;This is an SSH guide to help you set up, configure, connect, and transfer files using SSH. &lt;/p&gt;
&lt;h2&gt;Setup SSH&lt;/h2&gt;
&lt;h2&gt;Install SSH on your system&lt;/h2&gt;
&lt;h3&gt;Debian-Based&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo apt install openssh-server -y&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;CentOS/Fedora&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo yum -y install openssh-server&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Arch&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo pacman -S openssh&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Run SSH server on startup&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo systemctl start ssh
sudo systemctl enable ssh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;**Note: sshd instead of ssh for arch&lt;/p&gt;
&lt;h2&gt;Configure SSH&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Make sure ufw isn’t blocking ssh and enable it for passthrough.&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ufw allow ssh
sudo ufw limit ssh
sudo ufw enable  
sudo ufw status
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Options for /etc/ssh/sshd_config&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;PasswordAuthentication yes/no&lt;/code&gt;
&lt;em&gt;* No should be used when facing the internet and key authentication must be used for security&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AllowTcpForwarding yes&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;X11Forwarding yes&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;* This is used to forward GUI programs (Xming required for Windows)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;AllowUsers Fred Wilma&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;DenyUsers Dino Pebbles&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;* Block and Allow certain users&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;Security of a SSH Server&lt;/h3&gt;
&lt;p&gt;It should be noted that if you open up your firewall and port forward port 22 on a standard SSH server install… you will probably be hacked. This is extremely reckless and should never be done. I highly recommend doing &lt;strong&gt;ALL&lt;/strong&gt; of the following measures if opening up SSH to the outside world.&lt;/p&gt;
&lt;p&gt;First, obscure the SSH port by changing it in the sshd_config file&lt;br /&gt;
&lt;code&gt;# Change Default port 22 to 2222&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;Port 2222&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Second, disable Password Authentication and use ssh keys instead. This is a complex procedure and recommend using the following script to optimize the encryption and setup process.&lt;br /&gt;
&lt;a href=&quot;https://github.com/angristan/openvpn-install&quot;&gt;https://github.com/angristan/openvpn-install&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Third, verify you are using tar-pitting or rate limiting on your SSH port. This will prevent brute force attacks&lt;br /&gt;
&lt;code&gt;ufw limit proto tcp from any port 2222&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;*Note this can also be done via iptables and it needs to be modified to your SSH port.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Connect via SSH&lt;/h2&gt;
&lt;h2&gt;Linux terminal&lt;/h2&gt;
&lt;p&gt;ssh username@serverip&lt;/p&gt;
&lt;h2&gt;Windows&lt;/h2&gt;
&lt;p&gt;PuTTY &lt;a href=&quot;https://putty.org/&quot;&gt;https://putty.org/&lt;/a&gt; (ssh program)&lt;/p&gt;
&lt;p&gt;Xming required for X11 forwarding &lt;a href=&quot;https://sourceforge.net/projects/xming/&quot;&gt;https://sourceforge.net/projects/xming/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Verify X11 Forwarding in PuTTY options&lt;/p&gt;
&lt;h2&gt;Video Walkthrough SSH Access&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/w_OwmqjAcn0&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;Transfer Files via SSH&lt;/h2&gt;
&lt;p&gt;The difference between SFTP and SCP by default are one is interactive and the other isn’t. SCP is faster, but can’t be resumed where SFTP and slower and can be.&lt;/p&gt;
&lt;h2&gt;Linux&lt;/h2&gt;
&lt;p&gt;Use the native file browser, in the location bar type the following:&lt;br /&gt;
&lt;code&gt;sftp://192.168.1.10&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Using the terminal&lt;/h3&gt;
&lt;p&gt;Syntax: &lt;strong&gt;&lt;code&gt;scp&lt;/code&gt;&lt;/strong&gt; &lt;code&gt;source destination&lt;/code&gt;&lt;br /&gt;
Remote PC Syntax: &lt;code&gt;username@serverip:/path/to/file&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Example: &lt;code&gt;scp localfile username@serverip:/remote/server/path&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Windows File Transfer&lt;/h2&gt;
&lt;p&gt;WinSCP is my recommended transfer tool.
&lt;a href=&quot;https://winscp.net/eng/index.php&quot;&gt;https://winscp.net/eng/index.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;pscp.exe for command line. &lt;a href=&quot;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html&quot;&gt;https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Update to the Latest Version of GIMP</title><link>https://christitus.com/latest-version-of-gimp/</link><guid isPermaLink="true">https://christitus.com/latest-version-of-gimp/</guid><description>&lt;p&gt;Here are instructions on how to Update to the latest version of GIMP. This is vital to make sure you get the newest and best features for GIMP. The old versions of gimp that come bundled with Ubuntu 18 and prior aren’t nearly as good as Gimp 2.10+. &lt;/p&gt;
&lt;p&gt;Start by launching terminal and adding the GIMP repository&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo add-apt-repository ppa:otto-kesselgulasch/gimp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Verify the apt updates and if it doesn’t run the following command&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now simply install GIMP and it will automatically update to the latest version of GIMP from now on&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get install gimp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here is a video walkthrough of install special GIMP scripts as well if you want to unlock the complete capabilities of GIMP.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/CysfnD7dYwM&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, 16 Sep 2019 00:55:12 GMT</pubDate><content:encoded>&lt;p&gt;Here are instructions on how to Update to the latest version of GIMP. This is vital to make sure you get the newest and best features for GIMP. The old versions of gimp that come bundled with Ubuntu 18 and prior aren’t nearly as good as Gimp 2.10+. &lt;/p&gt;
&lt;p&gt;Start by launching terminal and adding the GIMP repository&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo add-apt-repository ppa:otto-kesselgulasch/gimp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Verify the apt updates and if it doesn’t run the following command&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now simply install GIMP and it will automatically update to the latest version of GIMP from now on&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get install gimp&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here is a video walkthrough of install special GIMP scripts as well if you want to unlock the complete capabilities of GIMP.&lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/CysfnD7dYwM&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>Grub Rescue | Repairing your Bootloader</title><link>https://christitus.com/grub-rescue/</link><guid isPermaLink="true">https://christitus.com/grub-rescue/</guid><description>&lt;p&gt;Lets go over Grub Rescue and repairing your bootloader. This is a very misunderstood topic and by learn basic syntax you will be able to repair your GRUB very easily. Here are 4 methods of doing a GRUB Rescue. &lt;/p&gt;
&lt;h2&gt;Repairing from a GRUB &amp;gt; Prompt&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Find your Hard drive&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;ls&lt;/code&gt;
&lt;em&gt;Output Example:
(hd0) (hd0,msdos2) (hd0,msdos1)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;List Root partition on each drive til you find your Install&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;ls (hd0,msdos2)/&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Check for the directory listing, if nothing, move to next&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now that we have found the proper drive lets boot to it&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;grub&amp;gt; set root=(hd0,msdos2)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub&amp;gt; linux /boot/vmlinu (tab complete) root=/dev/sda1 (or the root linux partition)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub&amp;gt; initrd /boot/initrd (tab complete)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub&amp;gt; boot&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Repairing from a GRUB Rescue &amp;gt; Prompt&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Find your Hard drive&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;ls&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Output Example:
(hd0) (hd0,msdos2) (hd0,msdos1)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;List Root partition on each drive til you find your Install&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;ls (hd0,msdos2)/&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Check for the&lt;/em&gt; &lt;em&gt;directory&lt;/em&gt; &lt;em&gt;listing, if nothing, move to next&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now that we have found the proper drive lets boot to it&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grub rescue&amp;gt; set prefix=(hd0,msdos2)/boot/grub&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; set root=(hd0,msdos2)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; insmod normal&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; normal&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; insmod linux&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; linux /boot/vmlinu (tab complete) root=/dev/sda1 (or the root linux partition)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; initrd /boot/initrd (tab complete)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; boot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/04/grub.webp&quot; alt=&quot;grub&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Fix GRUB Permanently&lt;/h2&gt;
&lt;p&gt;Now that we are booted in from GRUB Rescue, we can begin work with repairing our grub permanently. First we rebuild the /boot/grub/grub.cfg file:&lt;/p&gt;
&lt;p&gt;Debian-based Distributions use &lt;strong&gt;update-grub&lt;/strong&gt;&lt;br /&gt;
Other Distributions use &lt;strong&gt;grub-mkconfig -o /boot/grub/grub.cfg&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With the Configuration rebuilt, we now simply need to reinstall grub&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grub-install /dev/sda&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: /dev/sda is the DEVICE…&lt;/em&gt;&lt;strong&gt;NOT THE PARTITION&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Other Methods of Repairing GRUB&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use a &lt;a href=&quot;https://www.supergrubdisk.org/&quot;&gt;Super Grub2 Disk image&lt;/a&gt; on a USB drive to repair&lt;/li&gt;
&lt;li&gt;Use a vanilla server distribution pen drive to boot to prompt, then chroot to your existing install and reinstall GRUB.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Video Walkthroughs&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/r7meKJsjqfY&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 Apr 2019 22:21:10 GMT</pubDate><content:encoded>&lt;p&gt;Lets go over Grub Rescue and repairing your bootloader. This is a very misunderstood topic and by learn basic syntax you will be able to repair your GRUB very easily. Here are 4 methods of doing a GRUB Rescue. &lt;/p&gt;
&lt;h2&gt;Repairing from a GRUB &amp;gt; Prompt&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Find your Hard drive&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;ls&lt;/code&gt;
&lt;em&gt;Output Example:
(hd0) (hd0,msdos2) (hd0,msdos1)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;List Root partition on each drive til you find your Install&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;ls (hd0,msdos2)/&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Check for the directory listing, if nothing, move to next&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now that we have found the proper drive lets boot to it&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;grub&amp;gt; set root=(hd0,msdos2)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub&amp;gt; linux /boot/vmlinu (tab complete) root=/dev/sda1 (or the root linux partition)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub&amp;gt; initrd /boot/initrd (tab complete)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub&amp;gt; boot&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Repairing from a GRUB Rescue &amp;gt; Prompt&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Find your Hard drive&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;ls&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Output Example:
(hd0) (hd0,msdos2) (hd0,msdos1)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;List Root partition on each drive til you find your Install&lt;/strong&gt;&lt;br /&gt;
&lt;code&gt;ls (hd0,msdos2)/&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Check for the&lt;/em&gt; &lt;em&gt;directory&lt;/em&gt; &lt;em&gt;listing, if nothing, move to next&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now that we have found the proper drive lets boot to it&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grub rescue&amp;gt; set prefix=(hd0,msdos2)/boot/grub&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; set root=(hd0,msdos2)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; insmod normal&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; normal&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; insmod linux&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; linux /boot/vmlinu (tab complete) root=/dev/sda1 (or the root linux partition)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; initrd /boot/initrd (tab complete)&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;grub rescue&amp;gt; boot&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/04/grub.webp&quot; alt=&quot;grub&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Fix GRUB Permanently&lt;/h2&gt;
&lt;p&gt;Now that we are booted in from GRUB Rescue, we can begin work with repairing our grub permanently. First we rebuild the /boot/grub/grub.cfg file:&lt;/p&gt;
&lt;p&gt;Debian-based Distributions use &lt;strong&gt;update-grub&lt;/strong&gt;&lt;br /&gt;
Other Distributions use &lt;strong&gt;grub-mkconfig -o /boot/grub/grub.cfg&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With the Configuration rebuilt, we now simply need to reinstall grub&lt;/p&gt;
&lt;p&gt;&lt;code&gt;grub-install /dev/sda&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: /dev/sda is the DEVICE…&lt;/em&gt;&lt;strong&gt;NOT THE PARTITION&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Other Methods of Repairing GRUB&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Use a &lt;a href=&quot;https://www.supergrubdisk.org/&quot;&gt;Super Grub2 Disk image&lt;/a&gt; on a USB drive to repair&lt;/li&gt;
&lt;li&gt;Use a vanilla server distribution pen drive to boot to prompt, then chroot to your existing install and reinstall GRUB.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Video Walkthroughs&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/r7meKJsjqfY&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>WordPress on Google Cloud Platform</title><link>https://christitus.com/wordpress-google-cloud-platform/</link><guid isPermaLink="true">https://christitus.com/wordpress-google-cloud-platform/</guid><description>&lt;p&gt;I am going over hosting WordPress on Google Cloud Platform in this article. This is a step by step guide on how to set up and host a WordPress website using a fresh installation. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/03/nas_theapplication_3216.webp&quot; alt=&quot;nas_theapplication_3216&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Step 1: Fresh VM&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Note: Be sure and install gcloud &lt;a href=&quot;https://cloud.google.com/sdk/docs/downloads-apt-get&quot;&gt;https://cloud.google.com/sdk/docs/downloads-apt-get&lt;/a&gt;
Setup Project and VM (micro)&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Step 2: Install Swap&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo fallocate -l 1G /swapfile  
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576  
sudo chmod 600 /swapfile  
sudo mkswap /swapfile  
sudo swapon /swapfile  
sudo nano /etc/fstab  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;/swapfile swap swap defaults 0 0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/03/apache2.webp&quot; alt=&quot;apache2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Step 3: Install LAMP Stack (Linux, Apache, MySQL, and PHP)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install tasksel
sudo tasksel install lamp-server
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/03/Internet_Line-20-512.webp&quot; alt=&quot;Internet_Line-20-512&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Step 4: Configure Domain&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Setup DNS&lt;/strong&gt;&lt;br /&gt;
-Go to your web domain registrar and create A record pointing to your new server&lt;br /&gt;
&lt;strong&gt;Configure Apache conf for website&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;Directory /var/www/example.com&amp;gt;  
        Require all granted  
&amp;lt;/Directory&amp;gt;  
&amp;lt;VirtualHost *:80&amp;gt;  
        ServerName &amp;lt;a rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot; href=&quot;http://example.com/&quot;&amp;gt;example.com&amp;lt;/a&amp;gt;  
        ServerAlias &amp;lt;a rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot; href=&quot;http://www.example.com/&quot;&amp;gt;www.example.com&amp;lt;/a&amp;gt;  
        ServerAdmin webmaster@localhost  
        DocumentRoot /var/www/example.com  
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;$ mkdir -p /var/www/example.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ a2dissite 000-default.conf&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$ a2ensite example.com.conf&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$ systemctl reload apache2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/03/san.webp&quot; alt=&quot;san&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Step 5: Prep Database and PHP&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Create database&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ mysql -u root  
&amp;gt; CREATE DATABASE wordpress;  
&amp;gt; GRANT ALL ON wordpress.* TO &apos;wordpressuser&apos; IDENTIFIED BY &apos;Secure1234!&apos;;  
&amp;gt; quit  
$ mysql_secure_installation
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Edit /etc/php/7.2/apache2/php.ini&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;max\_input\_time = 30  
upload\_max\_filesize = 20M  
post\_max\_size = 21M
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/03/WordPress-Logo-Download-PNG.webp&quot; alt=&quot;WordPress-Logo-Download-PNG&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Step 6: Install WordPress on Google Cloud Platform&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://codex.wordpress.org/Installing_WordPress&quot;&gt;https://codex.wordpress.org/Installing_WordPress&lt;/a&gt;&lt;br /&gt;
&lt;code&gt;$ wget https://wordpress.org/latest.tar.gz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$ tar -xzvf latest.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Step 7: Tune the new install and MPM_Prefork.conf&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl&quot;&gt;https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 8: Troubleshooting&lt;/h3&gt;
&lt;p&gt;One important addition to setting up WordPress. Permission errors with the WordPress installation can be fixed with the following command.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ chown -R www-data:www-data /var/www/html/*&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This adds permissions for the Apache server user to use the files in the webpage directory.&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/vIJdypOqlL4&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;p&gt;In Conclusion, you now have WordPress on Google Cloud Platform. Enjoy the experience and let me know in the comments if you have any issues.&lt;/p&gt;
&lt;p&gt;I live stream on &lt;a href=&quot;https://twitch.tv/christitustech&quot;&gt;Twitch&lt;/a&gt; and encourage you to drop in and ask a question. I regularly publish on &lt;a href=&quot;https://www.youtube.com/c/ChrisTitusTech&quot;&gt;YouTube&lt;/a&gt; and &lt;a href=&quot;/&quot;&gt;christitus.com&lt;/a&gt;, but if you need immediate assistance, check out the Terminal Cafe with &lt;a href=&quot;https://discord.gg/yDAqap7Y7Q&quot;&gt;Discord Invite Link&lt;/a&gt;.&lt;/p&gt;
</description><pubDate>Thu, 14 Mar 2019 15:23:56 GMT</pubDate><content:encoded>&lt;p&gt;I am going over hosting WordPress on Google Cloud Platform in this article. This is a step by step guide on how to set up and host a WordPress website using a fresh installation. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/03/nas_theapplication_3216.webp&quot; alt=&quot;nas_theapplication_3216&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Step 1: Fresh VM&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Note: Be sure and install gcloud &lt;a href=&quot;https://cloud.google.com/sdk/docs/downloads-apt-get&quot;&gt;https://cloud.google.com/sdk/docs/downloads-apt-get&lt;/a&gt;
Setup Project and VM (micro)&lt;/em&gt;&lt;br /&gt;
&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Step 2: Install Swap&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo fallocate -l 1G /swapfile  
sudo dd if=/dev/zero of=/swapfile bs=1024 count=1048576  
sudo chmod 600 /swapfile  
sudo mkswap /swapfile  
sudo swapon /swapfile  
sudo nano /etc/fstab  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;/swapfile swap swap defaults 0 0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/03/apache2.webp&quot; alt=&quot;apache2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Step 3: Install LAMP Stack (Linux, Apache, MySQL, and PHP)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install tasksel
sudo tasksel install lamp-server
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/03/Internet_Line-20-512.webp&quot; alt=&quot;Internet_Line-20-512&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Step 4: Configure Domain&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Setup DNS&lt;/strong&gt;&lt;br /&gt;
-Go to your web domain registrar and create A record pointing to your new server&lt;br /&gt;
&lt;strong&gt;Configure Apache conf for website&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;Directory /var/www/example.com&amp;gt;  
        Require all granted  
&amp;lt;/Directory&amp;gt;  
&amp;lt;VirtualHost *:80&amp;gt;  
        ServerName &amp;lt;a rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot; href=&quot;http://example.com/&quot;&amp;gt;example.com&amp;lt;/a&amp;gt;  
        ServerAlias &amp;lt;a rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot; href=&quot;http://www.example.com/&quot;&amp;gt;www.example.com&amp;lt;/a&amp;gt;  
        ServerAdmin webmaster@localhost  
        DocumentRoot /var/www/example.com  
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;$ mkdir -p /var/www/example.com&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ a2dissite 000-default.conf&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$ a2ensite example.com.conf&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$ systemctl reload apache2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/03/san.webp&quot; alt=&quot;san&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Step 5: Prep Database and PHP&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Create database&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ mysql -u root  
&amp;gt; CREATE DATABASE wordpress;  
&amp;gt; GRANT ALL ON wordpress.* TO &apos;wordpressuser&apos; IDENTIFIED BY &apos;Secure1234!&apos;;  
&amp;gt; quit  
$ mysql_secure_installation
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Edit /etc/php/7.2/apache2/php.ini&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;max\_input\_time = 30  
upload\_max\_filesize = 20M  
post\_max\_size = 21M
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/03/WordPress-Logo-Download-PNG.webp&quot; alt=&quot;WordPress-Logo-Download-PNG&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Step 6: Install WordPress on Google Cloud Platform&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://codex.wordpress.org/Installing_WordPress&quot;&gt;https://codex.wordpress.org/Installing_WordPress&lt;/a&gt;&lt;br /&gt;
&lt;code&gt;$ wget https://wordpress.org/latest.tar.gz&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;$ tar -xzvf latest.tar.gz&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Step 7: Tune the new install and MPM_Prefork.conf&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl&quot;&gt;https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 8: Troubleshooting&lt;/h3&gt;
&lt;p&gt;One important addition to setting up WordPress. Permission errors with the WordPress installation can be fixed with the following command.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ chown -R www-data:www-data /var/www/html/*&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This adds permissions for the Apache server user to use the files in the webpage directory.&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/vIJdypOqlL4&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;p&gt;In Conclusion, you now have WordPress on Google Cloud Platform. Enjoy the experience and let me know in the comments if you have any issues.&lt;/p&gt;
&lt;p&gt;I live stream on &lt;a href=&quot;https://twitch.tv/christitustech&quot;&gt;Twitch&lt;/a&gt; and encourage you to drop in and ask a question. I regularly publish on &lt;a href=&quot;https://www.youtube.com/c/ChrisTitusTech&quot;&gt;YouTube&lt;/a&gt; and &lt;a href=&quot;/&quot;&gt;christitus.com&lt;/a&gt;, but if you need immediate assistance, check out the Terminal Cafe with &lt;a href=&quot;https://discord.gg/yDAqap7Y7Q&quot;&gt;Discord Invite Link&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>Aptitude Explained</title><link>https://christitus.com/aptitude-explained/</link><guid isPermaLink="true">https://christitus.com/aptitude-explained/</guid><description>&lt;p&gt;In this article, I am going over the aptitude command and explaining all of the commands and usage that goes with its usage. &lt;/p&gt;
&lt;h2&gt;Install Aptitude&lt;/h2&gt;
&lt;p&gt;Run the following command to install aptitude and task select: &lt;strong&gt;sudo apt install aptitude tasksel&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Why Aptitude?&lt;/h2&gt;
&lt;p&gt;Aptitude provides greater dependency resolution and wildcard installations. Making installing or reinstalling entire packages far easier. For instance the following command installs KDE in a simple command: &lt;code&gt;aptitude install ~t^desktop$ ~t^kde-desktop$&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;aptitude install&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;install one or more packages:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude install gedit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;remove a package
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude install gedit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;purge a package
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude install gedit_&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;hold a package at its current version
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude install gedit=&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;build dependencies for a package
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude install gedit&amp;amp;BD&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude remove, purge, reinstall&lt;/h3&gt;
&lt;p&gt;These are the same as using the above commands under install, however, you can utilizing these independent commands with wildcards like below&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude purge ^kde-desktop$&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude hold, unhold, keep&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;hold is the same as the install, but again I like to use this long hand version when utilizing wildcards.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;unhold&lt;/strong&gt; – is a great way to release held packages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;keep&lt;/strong&gt; – I &lt;strong&gt;DO NOT USE&lt;/strong&gt; because it merely cancelled scheduled tasks for that package… only it will continue to be upgraded later.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude update, safe-upgrade, full-upgrade&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;update&lt;/strong&gt; – updates the cache&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;safe-upgrade&lt;/strong&gt; – upgrades all packages but will not remove unused packages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;full-upgrade&lt;/strong&gt; – upgrades all packages but &lt;strong&gt;WILL&lt;/strong&gt; remove unused packages&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude search&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;search &lt;/strong&gt; – searches for the package, these search results can use wildcards, be sorted, and culled as needed using various options&lt;/li&gt;
&lt;li&gt;search examples:
&lt;ul&gt;
&lt;li&gt;Search for packaged installed from outside stable repo
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search &apos;?narrow(?installed, !?archive(stable))&apos;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Search for packages installed by the testing repo but not stable
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search &apos;?narrow(?installed, ?archive(testing) !?archive(stable))&apos;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;List installed packages
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search ~i&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;List reverse dependencies for gedit
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search ~Dgedit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;show broken packages
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search ~b&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;display packages on hold
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search ~ahold&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Find and install all packages with the name tightvnc in it
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search ~ntightvnc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Install a specific version of a package
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude install php=5.6&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong&gt;aptitude show&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;aptitude show &lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;displays information about the package&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude why, why-not&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;aptitude why &lt;/strong&gt; – explains why a package can’t be installs because of a missing dependency&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;aptitude why-not &lt;/strong&gt; – show conflicts in which the package dependency can not be installed&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude clean and autoclean&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;aptitude clean&lt;/strong&gt; – removes all previously downloaded packages from the cache directory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;aptitude autoclean&lt;/strong&gt; – removes cached packages which no longer exist in your repositories&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude search terms&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.debian.org/doc/manuals/aptitude/ch02s04s05.en.html#tableSearchTermQuickGuide&quot;&gt;https://www.debian.org/doc/manuals/aptitude/ch02s04s05.en.html#tableSearchTermQuickGuide&lt;/a&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/xca3Ywf54N0&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>Tue, 12 Mar 2019 20:35:00 GMT</pubDate><content:encoded>&lt;p&gt;In this article, I am going over the aptitude command and explaining all of the commands and usage that goes with its usage. &lt;/p&gt;
&lt;h2&gt;Install Aptitude&lt;/h2&gt;
&lt;p&gt;Run the following command to install aptitude and task select: &lt;strong&gt;sudo apt install aptitude tasksel&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Why Aptitude?&lt;/h2&gt;
&lt;p&gt;Aptitude provides greater dependency resolution and wildcard installations. Making installing or reinstalling entire packages far easier. For instance the following command installs KDE in a simple command: &lt;code&gt;aptitude install ~t^desktop$ ~t^kde-desktop$&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;aptitude install&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;install one or more packages:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude install gedit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;remove a package
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude install gedit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;purge a package
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude install gedit_&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;hold a package at its current version
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude install gedit=&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;build dependencies for a package
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude install gedit&amp;amp;BD&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude remove, purge, reinstall&lt;/h3&gt;
&lt;p&gt;These are the same as using the above commands under install, however, you can utilizing these independent commands with wildcards like below&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo aptitude purge ^kde-desktop$&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude hold, unhold, keep&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;hold is the same as the install, but again I like to use this long hand version when utilizing wildcards.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;unhold&lt;/strong&gt; – is a great way to release held packages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;keep&lt;/strong&gt; – I &lt;strong&gt;DO NOT USE&lt;/strong&gt; because it merely cancelled scheduled tasks for that package… only it will continue to be upgraded later.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude update, safe-upgrade, full-upgrade&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;update&lt;/strong&gt; – updates the cache&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;safe-upgrade&lt;/strong&gt; – upgrades all packages but will not remove unused packages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;full-upgrade&lt;/strong&gt; – upgrades all packages but &lt;strong&gt;WILL&lt;/strong&gt; remove unused packages&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude search&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;search &lt;/strong&gt; – searches for the package, these search results can use wildcards, be sorted, and culled as needed using various options&lt;/li&gt;
&lt;li&gt;search examples:
&lt;ul&gt;
&lt;li&gt;Search for packaged installed from outside stable repo
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search &apos;?narrow(?installed, !?archive(stable))&apos;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Search for packages installed by the testing repo but not stable
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search &apos;?narrow(?installed, ?archive(testing) !?archive(stable))&apos;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;List installed packages
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search ~i&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;List reverse dependencies for gedit
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search ~Dgedit&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;show broken packages
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search ~b&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;display packages on hold
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search ~ahold&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Find and install all packages with the name tightvnc in it
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude search ~ntightvnc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Install a specific version of a package
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;aptitude install php=5.6&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;strong&gt;aptitude show&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;aptitude show &lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;displays information about the package&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude why, why-not&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;aptitude why &lt;/strong&gt; – explains why a package can’t be installs because of a missing dependency&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;aptitude why-not &lt;/strong&gt; – show conflicts in which the package dependency can not be installed&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude clean and autoclean&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;aptitude clean&lt;/strong&gt; – removes all previously downloaded packages from the cache directory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;aptitude autoclean&lt;/strong&gt; – removes cached packages which no longer exist in your repositories&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;aptitude search terms&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.debian.org/doc/manuals/aptitude/ch02s04s05.en.html#tableSearchTermQuickGuide&quot;&gt;https://www.debian.org/doc/manuals/aptitude/ch02s04s05.en.html#tableSearchTermQuickGuide&lt;/a&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/xca3Ywf54N0&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>Garmin Express on Linux | Step by Step Guide</title><link>https://christitus.com/garmin-express-linux/</link><guid isPermaLink="true">https://christitus.com/garmin-express-linux/</guid><description>&lt;p&gt;This is an installation guide on how to get Garmin Express on Linux working. In this Step by Step Guide, I go over creating a new wine bottle and installing Garmin Express in it. &lt;/p&gt;
&lt;h2&gt;Linux Package Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;wine-devel &lt;em&gt;Note:3.19 or higher&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;winetricks&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation Steps&lt;/h2&gt;
&lt;p&gt;First we start by creating a wineprefix and installing our prerequisites from terminal:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;WINEARCH=win32 WINEPREFIX=/home/$USER/GarminExpress winetricks dotnet452 vcrun2010 corefonts&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;WINEARCH=win32 WINEPREFIX=/home/$USER/GarminExpress winetricks win7&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: You will be prompted during the setup for .NET installation just hit next and finish. Also, I like to seperate win7 after the prerequisites are setup to make sure the wineprefix runs in Windows 7 mode.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;With that out of the  way we need to download and install our GarminExpress.exe Setup executable. I downloaded mine from &lt;a href=&quot;https://www.garmin.com/en-US/software/express&quot;&gt;https://www.garmin.com/en-US/software/express&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run the GarminExpress.exe file in our wine prefix&lt;/p&gt;
&lt;p&gt;&lt;code&gt;WINEPREFIX=/home/$USER/GarminExpress wine explorer /desktop=garmin,1366x768 /home/$USER/Downloads/GarminExpress.exe&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: If you downloaded the GarminExpress.exe to another location replace it above&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Modify your shortcut to be the following command&lt;/p&gt;
&lt;p&gt;WINEPREFIX=/home/ctitus/GarminExpress wine explorer /desktop=garmin,1366x768 &apos;/home/ctitus/GarminExpress/drive_c/Program Files/Garmin/Express/express.exe&apos;&lt;/p&gt;
&lt;p&gt;Upon Launch you should see this screen which should recognize your Garmin device&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/02/Selection_012.webp&quot; alt=&quot;Garmin Express on Linux&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With all this done you will be able to launch Garmin Express on Linux.&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/hg01Z6VCox0&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, 15 Feb 2019 22:20:57 GMT</pubDate><content:encoded>&lt;p&gt;This is an installation guide on how to get Garmin Express on Linux working. In this Step by Step Guide, I go over creating a new wine bottle and installing Garmin Express in it. &lt;/p&gt;
&lt;h2&gt;Linux Package Requirements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;wine-devel &lt;em&gt;Note:3.19 or higher&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;winetricks&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation Steps&lt;/h2&gt;
&lt;p&gt;First we start by creating a wineprefix and installing our prerequisites from terminal:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;WINEARCH=win32 WINEPREFIX=/home/$USER/GarminExpress winetricks dotnet452 vcrun2010 corefonts&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;WINEARCH=win32 WINEPREFIX=/home/$USER/GarminExpress winetricks win7&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: You will be prompted during the setup for .NET installation just hit next and finish. Also, I like to seperate win7 after the prerequisites are setup to make sure the wineprefix runs in Windows 7 mode.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;With that out of the  way we need to download and install our GarminExpress.exe Setup executable. I downloaded mine from &lt;a href=&quot;https://www.garmin.com/en-US/software/express&quot;&gt;https://www.garmin.com/en-US/software/express&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Run the GarminExpress.exe file in our wine prefix&lt;/p&gt;
&lt;p&gt;&lt;code&gt;WINEPREFIX=/home/$USER/GarminExpress wine explorer /desktop=garmin,1366x768 /home/$USER/Downloads/GarminExpress.exe&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: If you downloaded the GarminExpress.exe to another location replace it above&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Modify your shortcut to be the following command&lt;/p&gt;
&lt;p&gt;WINEPREFIX=/home/ctitus/GarminExpress wine explorer /desktop=garmin,1366x768 &apos;/home/ctitus/GarminExpress/drive_c/Program Files/Garmin/Express/express.exe&apos;&lt;/p&gt;
&lt;p&gt;Upon Launch you should see this screen which should recognize your Garmin device&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/02/Selection_012.webp&quot; alt=&quot;Garmin Express on Linux&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With all this done you will be able to launch Garmin Express on Linux.&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/hg01Z6VCox0&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>Manjaro Architect Installation Guide</title><link>https://christitus.com/manjaro-architect-installation-guide/</link><guid isPermaLink="true">https://christitus.com/manjaro-architect-installation-guide/</guid><description>&lt;p&gt;In this book, I go over step by step the entire Manjaro Architect installation. This guide is suitable for any knowledge level from beginner to expert. I published “The Complete Manjaro Architect Installation Guide” on Amazon so, if you are installing on your main PC you can follow along without constantly scrolling through on your phone trying to find what you are looking for. I highly recommend watching the video below, and doing a trial of Manjaro Architect in a virtual machine to familiarize yourself with it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/01/manjaro-cover.webp&quot; alt=&quot;Manjaro Architect Book&quot; /&gt;&lt;br /&gt;
The original Amazon listing is no longer available.&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/530O4InhR3A&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, 21 Jan 2019 19:51:04 GMT</pubDate><content:encoded>&lt;p&gt;In this book, I go over step by step the entire Manjaro Architect installation. This guide is suitable for any knowledge level from beginner to expert. I published “The Complete Manjaro Architect Installation Guide” on Amazon so, if you are installing on your main PC you can follow along without constantly scrolling through on your phone trying to find what you are looking for. I highly recommend watching the video below, and doing a trial of Manjaro Architect in a virtual machine to familiarize yourself with it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2019/01/manjaro-cover.webp&quot; alt=&quot;Manjaro Architect Book&quot; /&gt;&lt;br /&gt;
The original Amazon listing is no longer available.&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/530O4InhR3A&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>Resize LVM Partition | Fedora 29 | Step by Step Guide</title><link>https://christitus.com/resize-lvm-partition-fedora-29-step-by-step-guide/</link><guid isPermaLink="true">https://christitus.com/resize-lvm-partition-fedora-29-step-by-step-guide/</guid><description>&lt;p&gt;In this guide, I show you how to Resize LVM Partition in Fedora 29. I recently ran out of space and had to clone my install from a 120SSD ssd to a 240 GB SSD. I first had issues with boot timing out and causing the /dev/mapper/home, /dev/mapper/swap, and /dev/mapper/root not being found. To fix this, I simply rebooted to the rescue kernel and ran &lt;code&gt;dracut --regenerate-all -f&lt;/code&gt; to resolve this in Single-User Mode.&lt;/p&gt;
&lt;h2&gt;Disclaimer: All these commands are done in Single-User Mode, therefore this will NOT work on a regular desktop&lt;/h2&gt;
&lt;p&gt;Upon reboot, I found that I now can see all the space on the drive, but needed to resize the LVM Partition.&lt;/p&gt;
&lt;h3&gt;Resize LVM Partition&lt;/h3&gt;
&lt;p&gt;First, we need to identify the LVM Partition we need to expand. In my case, it was my home directory that was running low on space.&lt;/p&gt;
&lt;p&gt;Command: &lt;code&gt;df -h&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_008.webp&quot; alt=&quot;lvm-selection8&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Second, lets verify there is space to expand on the physical drive.&lt;/p&gt;
&lt;p&gt;Command: &lt;code&gt;vgdisplay&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_009.webp&quot; alt=&quot;lvm-selection9&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With all this verified, you can now expand the lvm partition.&lt;br /&gt;
&lt;em&gt;Note: the command below will take up a 100% of the free space, see screenshot for precise extentsion.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Command: &lt;code&gt;lvextend -l 100%FREE /dev/fedora/home&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_010.webp&quot; alt=&quot;lvm-selection10&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Finally, with the logical volume extended we simply reclaim the free space now.&lt;/p&gt;
&lt;p&gt;Command: &lt;code&gt;resize2fs /dev/fedora/home&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_011.webp&quot; alt=&quot;lvm-selection11&quot; /&gt;&lt;/p&gt;
</description><pubDate>Sat, 17 Nov 2018 19:54:29 GMT</pubDate><content:encoded>&lt;p&gt;In this guide, I show you how to Resize LVM Partition in Fedora 29. I recently ran out of space and had to clone my install from a 120SSD ssd to a 240 GB SSD. I first had issues with boot timing out and causing the /dev/mapper/home, /dev/mapper/swap, and /dev/mapper/root not being found. To fix this, I simply rebooted to the rescue kernel and ran &lt;code&gt;dracut --regenerate-all -f&lt;/code&gt; to resolve this in Single-User Mode.&lt;/p&gt;
&lt;h2&gt;Disclaimer: All these commands are done in Single-User Mode, therefore this will NOT work on a regular desktop&lt;/h2&gt;
&lt;p&gt;Upon reboot, I found that I now can see all the space on the drive, but needed to resize the LVM Partition.&lt;/p&gt;
&lt;h3&gt;Resize LVM Partition&lt;/h3&gt;
&lt;p&gt;First, we need to identify the LVM Partition we need to expand. In my case, it was my home directory that was running low on space.&lt;/p&gt;
&lt;p&gt;Command: &lt;code&gt;df -h&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_008.webp&quot; alt=&quot;lvm-selection8&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Second, lets verify there is space to expand on the physical drive.&lt;/p&gt;
&lt;p&gt;Command: &lt;code&gt;vgdisplay&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_009.webp&quot; alt=&quot;lvm-selection9&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With all this verified, you can now expand the lvm partition.&lt;br /&gt;
&lt;em&gt;Note: the command below will take up a 100% of the free space, see screenshot for precise extentsion.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Command: &lt;code&gt;lvextend -l 100%FREE /dev/fedora/home&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_010.webp&quot; alt=&quot;lvm-selection10&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Finally, with the logical volume extended we simply reclaim the free space now.&lt;/p&gt;
&lt;p&gt;Command: &lt;code&gt;resize2fs /dev/fedora/home&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_011.webp&quot; alt=&quot;lvm-selection11&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>Logitech C920 Linux Driver | Fix Lag and Disable Auto-Focus</title><link>https://christitus.com/logitech-c920-linux-driver/</link><guid isPermaLink="true">https://christitus.com/logitech-c920-linux-driver/</guid><description>&lt;p&gt;With my webcam, I was having major issues and tried looking for a Logitech C920 Linux Driver, as I have a Logitech C920 Webcam that is very laggy in Linux, but in Windows, I don’t have any issues. I found out that the autofocus and exposure were causing a ton of issues. After following this guide, you will be able to fix this issue. &lt;/p&gt;
&lt;h2&gt;Logitech C920 Linux Driver Problem&lt;/h2&gt;
&lt;p&gt;So there isn’t a Logitech program to control and optimize your Logitech camera in Linux, like the Windows counterpart. However, there is a command line program that will allow you to change ANY setting on the Logitech camera. This is, in my opinion, way better than the Windows clunky Logitech Application. So let’s get our program to do just that and fix these horrible default settings.&lt;/p&gt;
&lt;h3&gt;Install v4l-utils&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Ubuntu/Debian:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get install v4l-utils&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fedora/Centos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo yum install v4l-utils&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Change Settings using v4l-utils&lt;/h3&gt;
&lt;p&gt;Find your C920 Webcam or other webcams you need to switch the default settings on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;v4l2-ctl --list-devices&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_002.webp&quot; alt=&quot;c920-selection2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;List controls for the Logitech C920&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;v4l2-ctl -d /dev/video6 --list-ctrls&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_003.webp&quot; alt=&quot;c920-selection3&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;There are two values we need to change to get the best performance from our webcam&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Here is the command syntax:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;v4l2-ctl -d /dev/video6 --set-ctrl=exposure_auto=1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;v4l2-ctl -d /dev/video6 --set-ctrl=focus_auto=0&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Video Walkthrough&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/7SZBQ5bqaWU&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;p&gt;Now that you know about the Logitech C920 Linux Driver support and how it functions, you can fix it. I hope this helps you as it took me quite a while to hunt down this information.&lt;/p&gt;
</description><pubDate>Fri, 09 Nov 2018 20:36:56 GMT</pubDate><content:encoded>&lt;p&gt;With my webcam, I was having major issues and tried looking for a Logitech C920 Linux Driver, as I have a Logitech C920 Webcam that is very laggy in Linux, but in Windows, I don’t have any issues. I found out that the autofocus and exposure were causing a ton of issues. After following this guide, you will be able to fix this issue. &lt;/p&gt;
&lt;h2&gt;Logitech C920 Linux Driver Problem&lt;/h2&gt;
&lt;p&gt;So there isn’t a Logitech program to control and optimize your Logitech camera in Linux, like the Windows counterpart. However, there is a command line program that will allow you to change ANY setting on the Logitech camera. This is, in my opinion, way better than the Windows clunky Logitech Application. So let’s get our program to do just that and fix these horrible default settings.&lt;/p&gt;
&lt;h3&gt;Install v4l-utils&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Ubuntu/Debian:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get install v4l-utils&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fedora/Centos:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo yum install v4l-utils&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Change Settings using v4l-utils&lt;/h3&gt;
&lt;p&gt;Find your C920 Webcam or other webcams you need to switch the default settings on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Command:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;v4l2-ctl --list-devices&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_002.webp&quot; alt=&quot;c920-selection2&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;List controls for the Logitech C920&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;v4l2-ctl -d /dev/video6 --list-ctrls&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/11/Selection_003.webp&quot; alt=&quot;c920-selection3&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;There are two values we need to change to get the best performance from our webcam&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Here is the command syntax:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;v4l2-ctl -d /dev/video6 --set-ctrl=exposure_auto=1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;v4l2-ctl -d /dev/video6 --set-ctrl=focus_auto=0&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Video Walkthrough&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/7SZBQ5bqaWU&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;p&gt;Now that you know about the Logitech C920 Linux Driver support and how it functions, you can fix it. I hope this helps you as it took me quite a while to hunt down this information.&lt;/p&gt;
</content:encoded></item><item><title>How to Install Linux for the First Time</title><link>https://christitus.com/install-linux-first-time/</link><guid isPermaLink="true">https://christitus.com/install-linux-first-time/</guid><description>&lt;p&gt;This article goes over installing Linux for the first time. I will break it down into 3 parts with a Video Walkthrough. Using this will make it very easy for you to install Linux for the first time.&lt;/p&gt;
&lt;h2&gt;Choosing the right version or flavor of Linux&lt;/h2&gt;
&lt;p&gt;Latest Ubuntu Desktop LTS – &lt;a href=&quot;https://www.ubuntu.com/download&quot;&gt;https://www.ubuntu.com/download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RUFUS USB Creator for Windows – &lt;a href=&quot;https://rufus.ie/&quot;&gt;https://rufus.ie/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Installation Process&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Download ISO for ubuntu&lt;/li&gt;
&lt;li&gt;Create a USB Thumb drive&lt;/li&gt;
&lt;li&gt;Install&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2011/11/business-code-codes-207580.webp&quot; alt=&quot;business-codes&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Basic Configuration&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Installing Software&lt;/li&gt;
&lt;li&gt;Using GUI / Gnome / Search&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;p&gt;Here is an entire Video playlist that you can choose from depending on where you are in the installation process. This is geared for new Linux users.&lt;br /&gt;
&lt;a href=&quot;https://www.youtube.com/playlist?list=PLc7fktTRMBoz7n-ugZm2Ndi0np_Y4Hh1k&quot;&gt;https://www.youtube.com/playlist?list=PLc7fktTRMBoz7n-ugZm2Ndi0np_Y4Hh1k&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In conclusion, this will get you started with Linux. It is a steep learning curve starting out, but well worth it in the end. After you install Linux for the first time, you will need some time to adjust. I personally did this for my Mother-In-Law and she loves it. She never has to worry about viruses or her computer crashing, which was happening often in Windows, and it was the perfect solution for her.&lt;/p&gt;
</description><pubDate>Thu, 18 Oct 2018 15:23:20 GMT</pubDate><content:encoded>&lt;p&gt;This article goes over installing Linux for the first time. I will break it down into 3 parts with a Video Walkthrough. Using this will make it very easy for you to install Linux for the first time.&lt;/p&gt;
&lt;h2&gt;Choosing the right version or flavor of Linux&lt;/h2&gt;
&lt;p&gt;Latest Ubuntu Desktop LTS – &lt;a href=&quot;https://www.ubuntu.com/download&quot;&gt;https://www.ubuntu.com/download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;RUFUS USB Creator for Windows – &lt;a href=&quot;https://rufus.ie/&quot;&gt;https://rufus.ie/&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Installation Process&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Download ISO for ubuntu&lt;/li&gt;
&lt;li&gt;Create a USB Thumb drive&lt;/li&gt;
&lt;li&gt;Install&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;/images/2011/11/business-code-codes-207580.webp&quot; alt=&quot;business-codes&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Basic Configuration&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Installing Software&lt;/li&gt;
&lt;li&gt;Using GUI / Gnome / Search&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Video Walkthrough&lt;/h2&gt;
&lt;p&gt;Here is an entire Video playlist that you can choose from depending on where you are in the installation process. This is geared for new Linux users.&lt;br /&gt;
&lt;a href=&quot;https://www.youtube.com/playlist?list=PLc7fktTRMBoz7n-ugZm2Ndi0np_Y4Hh1k&quot;&gt;https://www.youtube.com/playlist?list=PLc7fktTRMBoz7n-ugZm2Ndi0np_Y4Hh1k&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In conclusion, this will get you started with Linux. It is a steep learning curve starting out, but well worth it in the end. After you install Linux for the first time, you will need some time to adjust. I personally did this for my Mother-In-Law and she loves it. She never has to worry about viruses or her computer crashing, which was happening often in Windows, and it was the perfect solution for her.&lt;/p&gt;
</content:encoded></item><item><title>Why should I switch to Linux from Windows?</title><link>https://christitus.com/linux-switch-video/</link><guid isPermaLink="true">https://christitus.com/linux-switch-video/</guid><description>&lt;p&gt;This will be the first article in a series of Linux articles, I am going over 6 reasons to switch to Linux and 1 big reason not to. Many people ask “Why should I switch to Linux from Windows?” and in this article below I break it down for you. &lt;/p&gt;
&lt;h2&gt;Pros&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;It’s Free – Tons of Free software&lt;/li&gt;
&lt;li&gt;No big brother – Microsoft Telemetry reports on you!&lt;/li&gt;
&lt;li&gt;Stable – Can go months or even years before rebooting&lt;/li&gt;
&lt;li&gt;Works on anything – Pretty much any piece of hard will run Linux.&lt;/li&gt;
&lt;li&gt;Updates the way you WANT!&lt;/li&gt;
&lt;li&gt;Virus/malware resistant&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Cons&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Windows only software
&lt;ul&gt;
&lt;li&gt;Microsoft Office&lt;/li&gt;
&lt;li&gt;Adobe Software Suite&lt;/li&gt;
&lt;li&gt;Specific Games&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&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/s5QGZ-DBYGs&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>Tue, 16 Oct 2018 17:59:04 GMT</pubDate><content:encoded>&lt;p&gt;This will be the first article in a series of Linux articles, I am going over 6 reasons to switch to Linux and 1 big reason not to. Many people ask “Why should I switch to Linux from Windows?” and in this article below I break it down for you. &lt;/p&gt;
&lt;h2&gt;Pros&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;It’s Free – Tons of Free software&lt;/li&gt;
&lt;li&gt;No big brother – Microsoft Telemetry reports on you!&lt;/li&gt;
&lt;li&gt;Stable – Can go months or even years before rebooting&lt;/li&gt;
&lt;li&gt;Works on anything – Pretty much any piece of hard will run Linux.&lt;/li&gt;
&lt;li&gt;Updates the way you WANT!&lt;/li&gt;
&lt;li&gt;Virus/malware resistant&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Cons&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Windows only software
&lt;ul&gt;
&lt;li&gt;Microsoft Office&lt;/li&gt;
&lt;li&gt;Adobe Software Suite&lt;/li&gt;
&lt;li&gt;Specific Games&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&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/s5QGZ-DBYGs&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>Optimizing Apache Memory Usage using mpm prefork</title><link>https://christitus.com/apache-mpm-prefork/</link><guid isPermaLink="true">https://christitus.com/apache-mpm-prefork/</guid><description>&lt;p&gt;This guide goes over optimizing apache memory usage by configuring mpm prefork module to the best values for your server. Afterword, you should notice substantial increases in performance especially if you are using free micro instances from Google Cloud or AWS.&lt;/p&gt;
&lt;h2&gt;Commands used&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Check Apache Memory usage&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ps -ylC apache2 --sort:rss | awk &apos;{sum+=$8; ++n} END {print &quot;Tot=&quot;sum&quot;(&quot;n&quot;)&quot;;print &quot;Avg=&quot;sum&quot;/&quot;n&quot;=&quot;sum/n/1024&quot;MB&quot;}&apos;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note: My result was between 68-71 MB with stock modules loaded, however, your results will vary.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Launch Memory manager/resource viewer&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;‘&lt;code&gt;htop&lt;/code&gt;&lt;span&gt;‘ OR you can use ‘&lt;/span&gt;&lt;code&gt;top&lt;/code&gt;&lt;span&gt;‘ for fewer options and visuals&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;10/4/2018 UPDATE: Follow this Github script if you want to take the guesswork out, due to this being a curl script you may want to review the code first.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Values to calculate&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Total System Memory Free Buffer / Apache2 MB usage = MaxRequestWorkers, ServerLimit, and MaxClients&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/09/apache2.webp&quot; alt=&quot;apache2&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;My Settings: Server Instance (Standard) 1 dedicated vCPU with 3.5 GB of Memory&lt;/h4&gt;
&lt;p&gt;Please note that the below settings is done from a stock apache configuration. With all things considered these values are very conservative and therefore can be used if you are hosting with these specs or greater. In future articles I’ll go through disabling un-needed modules to reduce apache’s footprint, thus allowing you to increase these numbers.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxRequestWorkers: maximum number of server processes allowed to start
# MaxConnectionsPerChild: maximum number of requests a server process serves
StartServers 3
MinSpareServers 5
MaxSpareServers 10
ServerLimit 45
MaxClients 45
MaxRequestWorkers 45
MaxConnectionsPerChild 2000
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;45 processes x 68 MB per = 3060 MB Free Memory needed for the above configuration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Comparatively, a microserver with 600-700 MB of ram and shared CPU you will be looking at 1-3 Start/Min/Max Start and Spare servers, and no more than 10 for ServerLimit/MaxClients/MaxRequestWorkers. There are other modifications you need to make in culling down apache modules, therefore you can increase these values further.&lt;/p&gt;
&lt;h3&gt;Video Walkthrough&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/uGugeHVEeiU&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, 26 Sep 2018 17:31:24 GMT</pubDate><content:encoded>&lt;p&gt;This guide goes over optimizing apache memory usage by configuring mpm prefork module to the best values for your server. Afterword, you should notice substantial increases in performance especially if you are using free micro instances from Google Cloud or AWS.&lt;/p&gt;
&lt;h2&gt;Commands used&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Check Apache Memory usage&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ps -ylC apache2 --sort:rss | awk &apos;{sum+=$8; ++n} END {print &quot;Tot=&quot;sum&quot;(&quot;n&quot;)&quot;;print &quot;Avg=&quot;sum&quot;/&quot;n&quot;=&quot;sum/n/1024&quot;MB&quot;}&apos;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Note: My result was between 68-71 MB with stock modules loaded, however, your results will vary.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Launch Memory manager/resource viewer&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;‘&lt;code&gt;htop&lt;/code&gt;&lt;span&gt;‘ OR you can use ‘&lt;/span&gt;&lt;code&gt;top&lt;/code&gt;&lt;span&gt;‘ for fewer options and visuals&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;10/4/2018 UPDATE: Follow this Github script if you want to take the guesswork out, due to this being a curl script you may want to review the code first.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Values to calculate&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Total System Memory Free Buffer / Apache2 MB usage = MaxRequestWorkers, ServerLimit, and MaxClients&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&quot;/images/2018/09/apache2.webp&quot; alt=&quot;apache2&quot; /&gt;&lt;/p&gt;
&lt;h4&gt;My Settings: Server Instance (Standard) 1 dedicated vCPU with 3.5 GB of Memory&lt;/h4&gt;
&lt;p&gt;Please note that the below settings is done from a stock apache configuration. With all things considered these values are very conservative and therefore can be used if you are hosting with these specs or greater. In future articles I’ll go through disabling un-needed modules to reduce apache’s footprint, thus allowing you to increase these numbers.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxRequestWorkers: maximum number of server processes allowed to start
# MaxConnectionsPerChild: maximum number of requests a server process serves
StartServers 3
MinSpareServers 5
MaxSpareServers 10
ServerLimit 45
MaxClients 45
MaxRequestWorkers 45
MaxConnectionsPerChild 2000
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;45 processes x 68 MB per = 3060 MB Free Memory needed for the above configuration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Comparatively, a microserver with 600-700 MB of ram and shared CPU you will be looking at 1-3 Start/Min/Max Start and Spare servers, and no more than 10 for ServerLimit/MaxClients/MaxRequestWorkers. There are other modifications you need to make in culling down apache modules, therefore you can increase these values further.&lt;/p&gt;
&lt;h3&gt;Video Walkthrough&lt;/h3&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/uGugeHVEeiU&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 Perfect htaccess for WordPress</title><link>https://christitus.com/perfect-htaccess/</link><guid isPermaLink="true">https://christitus.com/perfect-htaccess/</guid><description>&lt;p&gt;This walks you through what your htaccess should look like in a WordPress Installation. I am a minimalist and believe you shouldn’t be using a ton of plugins that slow down your install when most of what you are looking to accomplish can be achieved with this file. Therefore, this htaccess will contain bad bot blocker, security optimizations, force https, and a variety of other optimizations. This will save you from installing about 5-10 plugins that would slow down your website.&lt;/p&gt;
&lt;h2&gt;The .htaccess file to rule them all&lt;/h2&gt;
&lt;h3&gt;Basic WordPress part&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# BEGIN WordPress
&amp;lt;IfModule mod_rewrite.c&amp;gt;
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
&amp;lt;/IfModule&amp;gt;
# END WordPress
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Secure the WordPress install&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# Allow mod_rewrite in htaccess
Options +FollowSymLinks
# Disable directory browsing
Options All -Indexes
# Block wp-includes folder and files
&amp;lt;IfModule mod_rewrite.c&amp;gt;
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
&amp;lt;/IfModule&amp;gt;
# Deny access to wp-config.php file
&amp;lt;files wp-config.php&amp;gt;
order allow,deny
deny from all
&amp;lt;/files&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Force HTTPS and Set Time Zones&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;# Force HTTPS
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://christitus.com/$1 [R,L]
# Set Central Time Zone
SetEnv TZ America/Chicago
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Miscellaneous Optimizations&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;
&amp;lt;IfModule mod_negotiation.c&amp;gt;
Options -MultiViews
&amp;lt;/IfModule&amp;gt;
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Expires Header Configuration&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;# BEGIN Expires
&amp;lt;ifModule mod_expires.c&amp;gt;
ExpiresActive On
ExpiresDefault &quot;access 2 days&quot;
ExpiresByType text/html &quot;access plus 3 seconds&quot;
ExpiresByType image/gif &quot;access plus 2419200 seconds&quot;
ExpiresByType image/jpeg &quot;access plus 2419200 seconds&quot;
ExpiresByType image/jpg &quot;access plus 2419200 seconds&quot;
ExpiresByType image/png &quot;access plus 2419200 seconds&quot;
ExpiresByType text/css &quot;access plus 2419200 seconds&quot;
ExpiresByType text/javascript &quot;access plus 2419200 seconds&quot;
ExpiresByType application/x-javascript &quot;access plus 2419200 seconds&quot;
ExpiresByType application/x-shockwave-flash &quot;access 1 month&quot;
ExpiresByType application/pdf &quot;access 1 month&quot;
ExpiresByType image/x-icon &quot;access 1 year&quot;
&amp;lt;/ifModule&amp;gt;
# END Expires
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Compression Optimization&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_deflate.c&amp;gt;
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE image/svg+xml svg svgz
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-woff
AddOutputFilterByType DEFLATE application/x-font-woff2
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/eot
AddOutputFilterByType DEFLATE font/woff
AddOutputFilterByType DEFLATE font/woff2
AddOutputFilterByType DEFLATE font/opentype
# For Olders Browsers Which Can&apos;t Handle Compression
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Bad Bot and Vulnerability blockers&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;# Block Bad Bots &amp;amp; Scrapers
SetEnvIfNoCase User-Agent &quot;Aboundex&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;80legs&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;360Spider&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Java&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Cogentbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Alexibot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^asterias&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^attach&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BackDoorBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BackWeb&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Bandit&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BatchFTP&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Bigfoot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Black.Hole&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BlackWidow&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BlowFish&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BotALot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Buddy&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BuiltBotTough&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Bullseye&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BunnySlippers&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Cegbfeieh&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^CheeseBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^CherryPicker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^ChinaClaw&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Collector&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Copier&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^CopyRightCheck&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^cosmos&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Crescent&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Custo&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^AIBOT&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^DISCo&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^DIIbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^DittoSpyder&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Download\ Demon&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Download\ Devil&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Download\ Wonder&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^dragonfly&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Drip&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^eCatch&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EasyDL&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^ebingbong&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EirGrabber&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EmailCollector&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EmailSiphon&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EmailWolf&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EroCrawler&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Exabot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Express\ WebPictures&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Extractor&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EyeNetIE&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Foobot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^flunky&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^FrontPage&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Go-Ahead-Got-It&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^gotit&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^GrabNet&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Grafula&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Harvest&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^hloader&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^HMView&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^HTTrack&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^humanlinks&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^IlseBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Image\ Stripper&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Image\ Sucker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Indy\ Library&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^InfoNaviRobot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^InfoTekies&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Intelliseek&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^InterGET&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Internet\ Ninja&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Iria&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Jakarta&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^JennyBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^JetCar&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^JOC&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^JustView&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Jyxobot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Kenjin.Spider&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Keyword.Density&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^larbin&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LexiBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^lftp&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^libWeb/clsHTTP&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^likse&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LinkextractorPro&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LinkScan/8.1a.Unix&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LNSpiderguy&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LinkWalker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^lwp-trivial&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LWP::Simple&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Magnet&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mag-Net&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^MarkWatch&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mass\ Downloader&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mata.Hari&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Memo&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Microsoft.URL&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Microsoft\ URL\ Control&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^MIDown\ tool&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^MIIxpc&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mirror&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Missigua\ Locator&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mister\ PiX&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^moget&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mozilla/3.Mozilla/2.01&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mozilla.*NEWT&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NAMEPROTECT&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Navroad&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NearSite&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NetAnts&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Netcraft&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NetMechanic&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NetSpider&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Net\ Vampire&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NetZIP&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NextGenSearchBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NG&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NICErsPRO&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^niki-bot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NimbleCrawler&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Ninja&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NPbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Octopus&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Offline\ Explorer&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Offline\ Navigator&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Openfind&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^OutfoxBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^PageGrabber&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Papa\ Foto&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^pavuk&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^pcBrowser&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^PHP\ version\ tracker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Pockey&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^ProPowerBot/2.14&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^ProWebWalker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^psbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Pump&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^QueryN.Metasearch&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^RealDownload&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Reaper&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Recorder&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^ReGet&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^RepoMonkey&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^RMA&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Siphon&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SiteSnagger&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SlySearch&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SmartDownload&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Snake&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Snapbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Snoopy&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^sogou&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SpaceBison&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SpankBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^spanner&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Sqworm&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Stripper&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Sucker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SuperBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SuperHTTP&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Surfbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^suzuran&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Szukacz/1.4&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^tAkeOut&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Teleport&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Telesoft&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^TurnitinBot/1.5&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^The.Intraformant&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^TheNomad&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^TightTwatBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Titan&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^True_Robot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^turingos&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^TurnitinBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^URLy.Warning&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Vacuum&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^VCI&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^VoidEYE&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Web\ Image\ Collector&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Web\ Sucker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebAuto&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebBandit&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Webclipping.com&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebCopier&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebEMailExtrac.*&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebEnhancer&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebFetch&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebGo\ IS&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Web.Image.Collector&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebLeacher&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebmasterWorldForumBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebReaper&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebSauger&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Website\ eXtractor&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Website\ Quester&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Webster&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebStripper&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebWhacker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebZIP&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Whacker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Widow&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WISENutbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WWWOFFLE&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WWW-Collector-E&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Xaldon&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Xenu&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Zeus&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;ZmEu&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Zyborg&quot; bad_bot

# Vulnerability Scanners
SetEnvIfNoCase User-Agent &quot;Acunetix&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;FHscan&quot; bad_bot
# Aggressive Chinese Search Engine
#SetEnvIfNoCase User-Agent &quot;Baiduspider&quot; bad_bot
# Aggressive Russian Search Engine
# Uncomment to disable this search engine
# SetEnvIfNoCase User-Agent &quot;Yandex&quot; bad_bot`

&amp;lt;Limit GET POST HEAD&amp;gt;
Order Allow,Deny
Allow from all
# Surveillance
deny from 38.100.19.8/29
deny from 38.100.21.0/24
deny from 38.100.41.64/26
deny from 38.105.71.0/25
deny from 38.105.83.0/27
deny from 38.112.21.140/30
deny from 38.118.42.32/29
deny from 65.213.208.128/27
deny from 65.222.176.96/27
deny from 65.222.185.72/29`

Deny from env=bad_bot
&amp;lt;/Limit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;In Closing&lt;/h2&gt;
&lt;p&gt;I recommend and personally use all the above settings, however, I broke up each section of my htaccess so you can drop ones you don’t like or want. Pay close attention to the section Force HTTPS as this will force all http traffic to https and you must have a valid SSL Certificate.&lt;/p&gt;
</description><pubDate>Sun, 23 Sep 2018 20:50:39 GMT</pubDate><content:encoded>&lt;p&gt;This walks you through what your htaccess should look like in a WordPress Installation. I am a minimalist and believe you shouldn’t be using a ton of plugins that slow down your install when most of what you are looking to accomplish can be achieved with this file. Therefore, this htaccess will contain bad bot blocker, security optimizations, force https, and a variety of other optimizations. This will save you from installing about 5-10 plugins that would slow down your website.&lt;/p&gt;
&lt;h2&gt;The .htaccess file to rule them all&lt;/h2&gt;
&lt;h3&gt;Basic WordPress part&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# BEGIN WordPress
&amp;lt;IfModule mod_rewrite.c&amp;gt;
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
&amp;lt;/IfModule&amp;gt;
# END WordPress
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Secure the WordPress install&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# Allow mod_rewrite in htaccess
Options +FollowSymLinks
# Disable directory browsing
Options All -Indexes
# Block wp-includes folder and files
&amp;lt;IfModule mod_rewrite.c&amp;gt;
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
&amp;lt;/IfModule&amp;gt;
# Deny access to wp-config.php file
&amp;lt;files wp-config.php&amp;gt;
order allow,deny
deny from all
&amp;lt;/files&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Force HTTPS and Set Time Zones&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;# Force HTTPS
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://christitus.com/$1 [R,L]
# Set Central Time Zone
SetEnv TZ America/Chicago
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Miscellaneous Optimizations&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;
&amp;lt;IfModule mod_negotiation.c&amp;gt;
Options -MultiViews
&amp;lt;/IfModule&amp;gt;
RewriteEngine On
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Expires Header Configuration&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;# BEGIN Expires
&amp;lt;ifModule mod_expires.c&amp;gt;
ExpiresActive On
ExpiresDefault &quot;access 2 days&quot;
ExpiresByType text/html &quot;access plus 3 seconds&quot;
ExpiresByType image/gif &quot;access plus 2419200 seconds&quot;
ExpiresByType image/jpeg &quot;access plus 2419200 seconds&quot;
ExpiresByType image/jpg &quot;access plus 2419200 seconds&quot;
ExpiresByType image/png &quot;access plus 2419200 seconds&quot;
ExpiresByType text/css &quot;access plus 2419200 seconds&quot;
ExpiresByType text/javascript &quot;access plus 2419200 seconds&quot;
ExpiresByType application/x-javascript &quot;access plus 2419200 seconds&quot;
ExpiresByType application/x-shockwave-flash &quot;access 1 month&quot;
ExpiresByType application/pdf &quot;access 1 month&quot;
ExpiresByType image/x-icon &quot;access 1 year&quot;
&amp;lt;/ifModule&amp;gt;
# END Expires
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Compression Optimization&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;IfModule mod_deflate.c&amp;gt;
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE image/svg+xml svg svgz
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-woff
AddOutputFilterByType DEFLATE application/x-font-woff2
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/eot
AddOutputFilterByType DEFLATE font/woff
AddOutputFilterByType DEFLATE font/woff2
AddOutputFilterByType DEFLATE font/opentype
# For Olders Browsers Which Can&apos;t Handle Compression
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
&amp;lt;/IfModule&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;Bad Bot and Vulnerability blockers&lt;/h5&gt;
&lt;pre&gt;&lt;code&gt;# Block Bad Bots &amp;amp; Scrapers
SetEnvIfNoCase User-Agent &quot;Aboundex&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;80legs&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;360Spider&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Java&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Cogentbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Alexibot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^asterias&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^attach&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BackDoorBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BackWeb&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Bandit&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BatchFTP&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Bigfoot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Black.Hole&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BlackWidow&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BlowFish&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BotALot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Buddy&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BuiltBotTough&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Bullseye&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^BunnySlippers&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Cegbfeieh&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^CheeseBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^CherryPicker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^ChinaClaw&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Collector&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Copier&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^CopyRightCheck&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^cosmos&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Crescent&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Custo&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^AIBOT&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^DISCo&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^DIIbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^DittoSpyder&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Download\ Demon&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Download\ Devil&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Download\ Wonder&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^dragonfly&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Drip&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^eCatch&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EasyDL&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^ebingbong&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EirGrabber&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EmailCollector&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EmailSiphon&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EmailWolf&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EroCrawler&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Exabot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Express\ WebPictures&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Extractor&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^EyeNetIE&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Foobot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^flunky&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^FrontPage&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Go-Ahead-Got-It&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^gotit&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^GrabNet&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Grafula&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Harvest&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^hloader&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^HMView&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^HTTrack&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^humanlinks&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^IlseBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Image\ Stripper&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Image\ Sucker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Indy\ Library&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^InfoNaviRobot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^InfoTekies&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Intelliseek&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^InterGET&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Internet\ Ninja&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Iria&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Jakarta&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^JennyBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^JetCar&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^JOC&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^JustView&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Jyxobot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Kenjin.Spider&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Keyword.Density&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^larbin&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LexiBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^lftp&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^libWeb/clsHTTP&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^likse&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LinkextractorPro&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LinkScan/8.1a.Unix&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LNSpiderguy&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LinkWalker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^lwp-trivial&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^LWP::Simple&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Magnet&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mag-Net&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^MarkWatch&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mass\ Downloader&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mata.Hari&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Memo&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Microsoft.URL&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Microsoft\ URL\ Control&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^MIDown\ tool&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^MIIxpc&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mirror&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Missigua\ Locator&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mister\ PiX&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^moget&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mozilla/3.Mozilla/2.01&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Mozilla.*NEWT&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NAMEPROTECT&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Navroad&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NearSite&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NetAnts&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Netcraft&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NetMechanic&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NetSpider&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Net\ Vampire&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NetZIP&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NextGenSearchBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NG&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NICErsPRO&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^niki-bot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NimbleCrawler&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Ninja&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^NPbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Octopus&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Offline\ Explorer&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Offline\ Navigator&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Openfind&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^OutfoxBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^PageGrabber&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Papa\ Foto&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^pavuk&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^pcBrowser&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^PHP\ version\ tracker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Pockey&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^ProPowerBot/2.14&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^ProWebWalker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^psbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Pump&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^QueryN.Metasearch&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^RealDownload&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Reaper&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Recorder&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^ReGet&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^RepoMonkey&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^RMA&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Siphon&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SiteSnagger&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SlySearch&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SmartDownload&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Snake&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Snapbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Snoopy&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^sogou&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SpaceBison&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SpankBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^spanner&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Sqworm&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Stripper&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Sucker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SuperBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^SuperHTTP&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Surfbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^suzuran&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Szukacz/1.4&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^tAkeOut&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Teleport&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Telesoft&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^TurnitinBot/1.5&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^The.Intraformant&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^TheNomad&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^TightTwatBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Titan&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^True_Robot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^turingos&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^TurnitinBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^URLy.Warning&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Vacuum&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^VCI&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^VoidEYE&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Web\ Image\ Collector&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Web\ Sucker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebAuto&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebBandit&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Webclipping.com&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebCopier&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebEMailExtrac.*&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebEnhancer&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebFetch&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebGo\ IS&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Web.Image.Collector&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebLeacher&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebmasterWorldForumBot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebReaper&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebSauger&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Website\ eXtractor&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Website\ Quester&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Webster&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebStripper&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebWhacker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WebZIP&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;Whacker&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Widow&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WISENutbot&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WWWOFFLE&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^WWW-Collector-E&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Xaldon&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Xenu&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Zeus&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;ZmEu&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;^Zyborg&quot; bad_bot

# Vulnerability Scanners
SetEnvIfNoCase User-Agent &quot;Acunetix&quot; bad_bot
SetEnvIfNoCase User-Agent &quot;FHscan&quot; bad_bot
# Aggressive Chinese Search Engine
#SetEnvIfNoCase User-Agent &quot;Baiduspider&quot; bad_bot
# Aggressive Russian Search Engine
# Uncomment to disable this search engine
# SetEnvIfNoCase User-Agent &quot;Yandex&quot; bad_bot`

&amp;lt;Limit GET POST HEAD&amp;gt;
Order Allow,Deny
Allow from all
# Surveillance
deny from 38.100.19.8/29
deny from 38.100.21.0/24
deny from 38.100.41.64/26
deny from 38.105.71.0/25
deny from 38.105.83.0/27
deny from 38.112.21.140/30
deny from 38.118.42.32/29
deny from 65.213.208.128/27
deny from 65.222.176.96/27
deny from 65.222.185.72/29`

Deny from env=bad_bot
&amp;lt;/Limit&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;In Closing&lt;/h2&gt;
&lt;p&gt;I recommend and personally use all the above settings, however, I broke up each section of my htaccess so you can drop ones you don’t like or want. Pay close attention to the section Force HTTPS as this will force all http traffic to https and you must have a valid SSL Certificate.&lt;/p&gt;
</content:encoded></item><item><title>Issuing SSL Certs using Let’s Encrypt in Ubuntu</title><link>https://christitus.com/issuing-ssl-certs/</link><guid isPermaLink="true">https://christitus.com/issuing-ssl-certs/</guid><description>&lt;p&gt;This article goes over Issuing SSL Certs using Let’s Encrypt in Ubuntu 16.04. The basic steps outlined in the video are adding the repository, installing certbot, issuing a certificate, and enabling SSL.&lt;/p&gt;
&lt;h2&gt;Video Guide&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/yC3GTHJRQuM&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;Links&lt;/h2&gt;
&lt;p&gt;Let’s Encrypt @ &lt;a href=&quot;https://letsencrypt.org&quot;&gt;https://letsencrypt.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Certbot @ &lt;a href=&quot;https://certbot.eff.org&quot;&gt;https://certbot.eff.org&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Command List for Issuing SSL Certs&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo apt-get install software-properties-common -y&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo add-apt-repository ppa:certbot/certbot&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo apt-get install python-certbot-apache -y&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo certbot --apache&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Finishing Up&lt;/h2&gt;
&lt;p&gt;After performing these steps you will make your site secure and it will automatically renew this certificate. This is a great set it and forget solution, expecially if you are running your own site on a budget.&lt;/p&gt;
</description><pubDate>Thu, 13 Sep 2018 20:49:56 GMT</pubDate><content:encoded>&lt;p&gt;This article goes over Issuing SSL Certs using Let’s Encrypt in Ubuntu 16.04. The basic steps outlined in the video are adding the repository, installing certbot, issuing a certificate, and enabling SSL.&lt;/p&gt;
&lt;h2&gt;Video Guide&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/yC3GTHJRQuM&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;Links&lt;/h2&gt;
&lt;p&gt;Let’s Encrypt @ &lt;a href=&quot;https://letsencrypt.org&quot;&gt;https://letsencrypt.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Certbot @ &lt;a href=&quot;https://certbot.eff.org&quot;&gt;https://certbot.eff.org&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Command List for Issuing SSL Certs&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo apt-get install software-properties-common -y&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo add-apt-repository ppa:certbot/certbot&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo apt-get install python-certbot-apache -y&lt;/code&gt;&lt;br /&gt;
&lt;code&gt;sudo certbot --apache&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Finishing Up&lt;/h2&gt;
&lt;p&gt;After performing these steps you will make your site secure and it will automatically renew this certificate. This is a great set it and forget solution, expecially if you are running your own site on a budget.&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>Installing Linux Subsystem for Windows 10</title><link>https://christitus.com/installing-linux-subsystem/</link><guid isPermaLink="true">https://christitus.com/installing-linux-subsystem/</guid><description>&lt;p&gt;The following video goes over installing Linux Subsystem on Windows 10. Most notably it allows you to run Linux terminal commands in Windows 10 without having a virtual machine or dual boot into a Linux operating system. &lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/RriP3LmuKNA&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;Enable Linux Subsystem Feature&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;cd ~ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: Perform in PowerShell&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;PowerShell Installation Method&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile Ubuntu.appx -UseBasicParsing Rename-Item -Path ~/Ubuntu.appx -NewName Ubuntu.zip Expand-Archive ~/Ubuntu.zip ~/Ubuntu cd Ubuntu ./ubuntu.exe&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Microsoft Store Installation Method&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Open the Microsoft Store&lt;/li&gt;
&lt;li&gt;Browse to Ubuntu-1604 and subsequently click the Install button&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In Closing The Linux Subsystem is a welcomed addition to Windows 10 because most things that come from the Microsoft store are garbage. Above all using this will give you the ability to check out and compile many GitHub projects. It is now one of the first options I enable when I do fresh installs of Windows 10 due to the fact Linux is not practical all the time. Leave any Questions and Comments below and I’ll get back to you. I regularly publish on&lt;/p&gt;
</description><pubDate>Tue, 11 Sep 2018 19:56:07 GMT</pubDate><content:encoded>&lt;p&gt;The following video goes over installing Linux Subsystem on Windows 10. Most notably it allows you to run Linux terminal commands in Windows 10 without having a virtual machine or dual boot into a Linux operating system. &lt;/p&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/RriP3LmuKNA&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;Enable Linux Subsystem Feature&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;cd ~ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: Perform in PowerShell&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;PowerShell Installation Method&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile Ubuntu.appx -UseBasicParsing Rename-Item -Path ~/Ubuntu.appx -NewName Ubuntu.zip Expand-Archive ~/Ubuntu.zip ~/Ubuntu cd Ubuntu ./ubuntu.exe&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Microsoft Store Installation Method&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Open the Microsoft Store&lt;/li&gt;
&lt;li&gt;Browse to Ubuntu-1604 and subsequently click the Install button&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In Closing The Linux Subsystem is a welcomed addition to Windows 10 because most things that come from the Microsoft store are garbage. Above all using this will give you the ability to check out and compile many GitHub projects. It is now one of the first options I enable when I do fresh installs of Windows 10 due to the fact Linux is not practical all the time. Leave any Questions and Comments below and I’ll get back to you. I regularly publish on&lt;/p&gt;
</content:encoded></item><item><title>Setup an always on VPN in Ubuntu</title><link>https://christitus.com/setup-always-on-vpn/</link><guid isPermaLink="true">https://christitus.com/setup-always-on-vpn/</guid><description>&lt;p&gt;This is a guide on how to set up an always on VPN in Ubuntu, and basic troubleshooting of VPNs in ubuntu server. I used Private Internet Access as an example VPN connection.&lt;/p&gt;
&lt;p&gt;Use my affiliate link to get a Private Internet Access VPN: &lt;a href=&quot;http://www.privateinternetaccess.com/pages/buy-vpn/christitus&quot;&gt;http://www.privateinternetaccess.com/pages/buy-vpn/christitus&lt;/a&gt;. This is a must-have for a dedicated Linux box specifically for privacy concerns.&lt;/p&gt;
&lt;h2&gt;Setup VPN in Ubuntu – With Commentary&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/tHEd3fFfGpM&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;VPN setup commands&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo su
apt-get install openvpn -y
cd /etc/openvpn
wget https://www.privateinternetaccess.com...
unzip openvpn.zip
rm openvpn.zip
nano .secrets
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;p1234567      ###PASTE YOUR INFO###&lt;br /&gt;
MyPIAPassword ###PASTE YOUR INFO###&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;chmod 600 .secrets
mv &apos;US Texas.ovpn&apos; texas.conf
nano texas.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;auth-user-pass .secrets ###CHANGE THIS LINE###&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;systemctl start openvpn@texas
systemctl status openvpn@texas
nano /etc/default/openvpn ###UNCOMMENT AUTOSTART
reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Diagnostic Commands&lt;/h2&gt;
&lt;p&gt;Once complete, find the external IP as that is needed to make sure it is working. If your VPN is failing to connect I recommend using tail on the syslog so consequently, you can find any issues that are stopping the connection.&lt;/p&gt;
&lt;h2&gt;Extra Tools&lt;/h2&gt;
&lt;p&gt;Find External IP: dig TXT +short &lt;a href=&quot;http://o-o.myaddr.l.google.com&quot;&gt;o-o.myaddr.l.google.com&lt;/a&gt; @ns1.google.com | awk -F&apos;&quot;&apos; &apos;{ print $2}&apos;
Debug as necessary: tail -f /var/log/syslog|grep ovpn`&lt;/p&gt;
&lt;p&gt;In closing, make sure you always use a VPN when you are concerned about your privacy. I’ve also set these up on Linux boxes between offices and it makes for a great inexpensive site-to-site VPN. Therefore, you don’t have to spend tons of money on proprietary gateways that go out of date in a couple years.&lt;/p&gt;
</description><pubDate>Mon, 10 Sep 2018 14:59:11 GMT</pubDate><content:encoded>&lt;p&gt;This is a guide on how to set up an always on VPN in Ubuntu, and basic troubleshooting of VPNs in ubuntu server. I used Private Internet Access as an example VPN connection.&lt;/p&gt;
&lt;p&gt;Use my affiliate link to get a Private Internet Access VPN: &lt;a href=&quot;http://www.privateinternetaccess.com/pages/buy-vpn/christitus&quot;&gt;http://www.privateinternetaccess.com/pages/buy-vpn/christitus&lt;/a&gt;. This is a must-have for a dedicated Linux box specifically for privacy concerns.&lt;/p&gt;
&lt;h2&gt;Setup VPN in Ubuntu – With Commentary&lt;/h2&gt;
&lt;div class=&quot;media-embed&quot;&gt;&lt;iframe src=&quot;https://www.youtube-nocookie.com/embed/tHEd3fFfGpM&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;VPN setup commands&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;sudo su
apt-get install openvpn -y
cd /etc/openvpn
wget https://www.privateinternetaccess.com...
unzip openvpn.zip
rm openvpn.zip
nano .secrets
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;p1234567      ###PASTE YOUR INFO###&lt;br /&gt;
MyPIAPassword ###PASTE YOUR INFO###&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;chmod 600 .secrets
mv &apos;US Texas.ovpn&apos; texas.conf
nano texas.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;auth-user-pass .secrets ###CHANGE THIS LINE###&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;systemctl start openvpn@texas
systemctl status openvpn@texas
nano /etc/default/openvpn ###UNCOMMENT AUTOSTART
reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Diagnostic Commands&lt;/h2&gt;
&lt;p&gt;Once complete, find the external IP as that is needed to make sure it is working. If your VPN is failing to connect I recommend using tail on the syslog so consequently, you can find any issues that are stopping the connection.&lt;/p&gt;
&lt;h2&gt;Extra Tools&lt;/h2&gt;
&lt;p&gt;Find External IP: dig TXT +short &lt;a href=&quot;http://o-o.myaddr.l.google.com&quot;&gt;o-o.myaddr.l.google.com&lt;/a&gt; @ns1.google.com | awk -F&apos;&quot;&apos; &apos;{ print $2}&apos;
Debug as necessary: tail -f /var/log/syslog|grep ovpn`&lt;/p&gt;
&lt;p&gt;In closing, make sure you always use a VPN when you are concerned about your privacy. I’ve also set these up on Linux boxes between offices and it makes for a great inexpensive site-to-site VPN. Therefore, you don’t have to spend tons of money on proprietary gateways that go out of date in a couple years.&lt;/p&gt;
</content:encoded></item><item><title>Remove Asterisk from Linux server (ubuntu/centos/debian/rhel)</title><link>https://christitus.com/remove-asterisk/</link><guid isPermaLink="true">https://christitus.com/remove-asterisk/</guid><description>&lt;p&gt;The following removal instructions go over how to completely remove Asterisk from your Linux Instance. &lt;/p&gt;
&lt;h2&gt;REMOVE AND REINSTALL INSTRUCTIONS&lt;/h2&gt;
&lt;p&gt;Here is how to remove Asterisk from a Linux server and reinstall from source.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Pre-requirements: Download source, configure, make menuselect, and make. All done with root (use su) Example:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;su&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;###ENTER ROOT PASSWORD###&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;mkdir ~/build
cd ~/build
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-14-current.tar.gz
tar -xvf asterisk-14-current.tar.gz
cd asterisk-14
./contrib/scripts/install_prereq install
./configure --with-jansson-bundled ##Note: you may not need jansson-bundled so omit this if needed##
make menuselect
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;###Select any needed addons: MP3, etc.###&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;make&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: you can install asterisk 13, 15, or custom git asterisk branch (i.e. gvsip) instead of Asterisk-14 tar&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Once you have the project built, you now need to clean the old asterisk out and reboot&lt;/p&gt;
&lt;p&gt;&lt;code&gt;make uninstall&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;###OR to clean EVERYTHING###&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;make uninstall-all&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Once this is complete I like to reboot, and then run a &lt;strong&gt;make install&lt;/strong&gt; to install the different version of asterisk.&lt;/p&gt;
&lt;h2&gt;FULL REMOVAL NO REINSTALL&lt;/h2&gt;
&lt;p&gt;Now let’s say you just want to remove Asterisk and just don’t want it anymore. Well, that is far simpler. Just run the following commands and it will be gone forever&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;killall -9 safe_asterisk
killall -9 asterisk
systemctl disable asterisk ##Note: depending on the install this may not be enabled or was set to run via @reboot cron or daemon service - Mileage will vary##
rm -rf /etc/asterisk
rm -rf /var/log/asterisk
rm -rf /var/lib/asterisk
rm -rf /var/lib64/asterisk
rm -rf /var/spool/asterisk
rm -rf /usr/lib/asterisk
rm -rf /usr/lib64/asterisk
reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These instructions should work on any Linux Based system and it shouldn’t matter if it is Red Hat based or Debian based.&lt;/p&gt;
</description><pubDate>Fri, 17 Aug 2018 15:58:36 GMT</pubDate><content:encoded>&lt;p&gt;The following removal instructions go over how to completely remove Asterisk from your Linux Instance. &lt;/p&gt;
&lt;h2&gt;REMOVE AND REINSTALL INSTRUCTIONS&lt;/h2&gt;
&lt;p&gt;Here is how to remove Asterisk from a Linux server and reinstall from source.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Pre-requirements: Download source, configure, make menuselect, and make. All done with root (use su) Example:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;su&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;###ENTER ROOT PASSWORD###&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;mkdir ~/build
cd ~/build
wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-14-current.tar.gz
tar -xvf asterisk-14-current.tar.gz
cd asterisk-14
./contrib/scripts/install_prereq install
./configure --with-jansson-bundled ##Note: you may not need jansson-bundled so omit this if needed##
make menuselect
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;###Select any needed addons: MP3, etc.###&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;make&lt;/code&gt;&lt;br /&gt;
&lt;em&gt;Note: you can install asterisk 13, 15, or custom git asterisk branch (i.e. gvsip) instead of Asterisk-14 tar&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Once you have the project built, you now need to clean the old asterisk out and reboot&lt;/p&gt;
&lt;p&gt;&lt;code&gt;make uninstall&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;###OR to clean EVERYTHING###&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;make uninstall-all&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Once this is complete I like to reboot, and then run a &lt;strong&gt;make install&lt;/strong&gt; to install the different version of asterisk.&lt;/p&gt;
&lt;h2&gt;FULL REMOVAL NO REINSTALL&lt;/h2&gt;
&lt;p&gt;Now let’s say you just want to remove Asterisk and just don’t want it anymore. Well, that is far simpler. Just run the following commands and it will be gone forever&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;killall -9 safe_asterisk
killall -9 asterisk
systemctl disable asterisk ##Note: depending on the install this may not be enabled or was set to run via @reboot cron or daemon service - Mileage will vary##
rm -rf /etc/asterisk
rm -rf /var/log/asterisk
rm -rf /var/lib/asterisk
rm -rf /var/lib64/asterisk
rm -rf /var/spool/asterisk
rm -rf /usr/lib/asterisk
rm -rf /usr/lib64/asterisk
reboot
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These instructions should work on any Linux Based system and it shouldn’t matter if it is Red Hat based or Debian based.&lt;/p&gt;
</content:encoded></item><item><title>Python script to print out specific results from an API JSON call</title><link>https://christitus.com/api-json-call/</link><guid isPermaLink="true">https://christitus.com/api-json-call/</guid><description>&lt;p&gt;The following is a Python script to print out specific results from an API JSON call from a website. This basic syntax will allow you to create a value to use.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import json, urllib2 # Import libraries we will be using
url = urllib2.urlopen(&apos;http://baseurl.com:port/api.json&apos;) # Pull webpage into a variable
result = json.load(url) # Format the URL for JSON
allhash = result[&apos;hashrate&apos;][&apos;total&apos;] # Pull a specific array of values
checkhash= allhash[0] # Specify a single value in the array
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Making an API JSON call&lt;/h2&gt;
&lt;p&gt;Using this basic script this will make a call from the JSON API on a website. I wanted a specific value 2 levels down. To determine which value you want to grab remember { open bracket will expand a level and a } close bracket will go back a level.&lt;/p&gt;
&lt;p&gt;For instance, using this api.json&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{&quot;hashrate&quot;:{&quot;threads&quot;:[[632.8,629.7,631.0],[531.6,524.6,518.4],[631.9,628.6,625.0],[501.6,520.4,512.0]],&quot;total&quot;:[2297.8,2303.2,2286.4],&quot;highest&quot;:2339.2},&quot;results&quot;:{&quot;diff_current&quot;:100001,&quot;shares_good&quot;:281,&quot;shares_total&quot;:301,&quot;avg_time&quot;:49.9,&quot;hashes_total&quot;:32000515,&quot;best&quot;:[11141633,10328800,8258255,8129845,4476110,3954464,3795403,3425658,3208501,3130523],&quot;error_log&quot;:[{&quot;count&quot;:18,&quot;last_seen&quot;:1511905084,&quot;text&quot;:&quot;Job not found.&quot;}]},&quot;connection&quot;:{&quot;pool&quot;: &quot;cryptonight.usa.nicehash.com:3355&quot;,&quot;uptime&quot;:15018,&quot;ping&quot;:109,&quot;error_log&quot;:[]}}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;In Closing&lt;/h3&gt;
&lt;p&gt;Using the above API readout you can see I go into the hashrate brackets and pull the values for “total”. This creates an array and not a single string. So to make a call for the second value in “total” you would change the python code from allhash[0] to allhash[1]. You can use this to print out the values from the script, put them in a variable to be displayed on a website, or use it in a Nagios script for monitoring. The options are limitless.&lt;/p&gt;
</description><pubDate>Tue, 28 Nov 2017 22:03:53 GMT</pubDate><content:encoded>&lt;p&gt;The following is a Python script to print out specific results from an API JSON call from a website. This basic syntax will allow you to create a value to use.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import json, urllib2 # Import libraries we will be using
url = urllib2.urlopen(&apos;http://baseurl.com:port/api.json&apos;) # Pull webpage into a variable
result = json.load(url) # Format the URL for JSON
allhash = result[&apos;hashrate&apos;][&apos;total&apos;] # Pull a specific array of values
checkhash= allhash[0] # Specify a single value in the array
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Making an API JSON call&lt;/h2&gt;
&lt;p&gt;Using this basic script this will make a call from the JSON API on a website. I wanted a specific value 2 levels down. To determine which value you want to grab remember { open bracket will expand a level and a } close bracket will go back a level.&lt;/p&gt;
&lt;p&gt;For instance, using this api.json&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{&quot;hashrate&quot;:{&quot;threads&quot;:[[632.8,629.7,631.0],[531.6,524.6,518.4],[631.9,628.6,625.0],[501.6,520.4,512.0]],&quot;total&quot;:[2297.8,2303.2,2286.4],&quot;highest&quot;:2339.2},&quot;results&quot;:{&quot;diff_current&quot;:100001,&quot;shares_good&quot;:281,&quot;shares_total&quot;:301,&quot;avg_time&quot;:49.9,&quot;hashes_total&quot;:32000515,&quot;best&quot;:[11141633,10328800,8258255,8129845,4476110,3954464,3795403,3425658,3208501,3130523],&quot;error_log&quot;:[{&quot;count&quot;:18,&quot;last_seen&quot;:1511905084,&quot;text&quot;:&quot;Job not found.&quot;}]},&quot;connection&quot;:{&quot;pool&quot;: &quot;cryptonight.usa.nicehash.com:3355&quot;,&quot;uptime&quot;:15018,&quot;ping&quot;:109,&quot;error_log&quot;:[]}}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;In Closing&lt;/h3&gt;
&lt;p&gt;Using the above API readout you can see I go into the hashrate brackets and pull the values for “total”. This creates an array and not a single string. So to make a call for the second value in “total” you would change the python code from allhash[0] to allhash[1]. You can use this to print out the values from the script, put them in a variable to be displayed on a website, or use it in a Nagios script for monitoring. The options are limitless.&lt;/p&gt;
</content:encoded></item><item><title>Report Nvidia-smi Temperature to Nagios</title><link>https://christitus.com/nvidia-smi-nagios/</link><guid isPermaLink="true">https://christitus.com/nvidia-smi-nagios/</guid><description>&lt;p&gt;Here is a custom script that reports the nvidia-smi temperature of the Nvidia cards in your system using NRPE. Conversely,  NRPE performs much better than NCPA and my protocol of choice.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;*Note: Install NRPE to your&lt;/em&gt; Linux &lt;em&gt;box first, and create this file (gpu_temp.sh) in your /&lt;em&gt;usr&lt;/em&gt;/lib/&lt;em&gt;nagios&lt;/em&gt;/plugins directory for Nagios Core 4+&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Nagios NRPE Query Command&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;check_nrpe!gpu_temp.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will only query the first GPU that is found via nvidia-smi CLI command. It will do warnings and alerts at the given thresholds.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2017/06/script.webp&quot; alt=&quot;nvidia smi nagios&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;The gpu_temp.sh Script&lt;/h3&gt;
&lt;p&gt;Use this script to query nvidia-smi, thus reporting the temp of the card.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;############################################
## Sample nvidia commands to query gpu
##
##nvidia-smi -q -d TEMPERATURE | grep &quot;GPU Current Temp&quot; | awk &apos;{print $5}&apos;
##nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader
##nvidia-smi | grep &apos;[0-9][0-9]C&apos; | awk &apos;{print $3}&apos; | sed &apos;s/C//&apos;
############################################`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here is the script code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
gpu_temp=`nvidia-smi | grep &apos;[0-9][0-9]C&apos; | awk &apos;{print $3}&apos;`
case $gpu_temp in
[1-70]*)
echo &quot;OK - $gpu_temp in normal operating range.&quot;
exit 0
;;
[71-80]*)
echo &quot;WARNING - $gpu_temp in high operating range.&quot;
exit 1
;;
[81-100]*)
echo &quot;CRITICAL - $gpu_temp in extreme operating range. Shutdown ASAP!&quot;
exit 2
;;
*)
echo &quot;UNKNOWN - $gpu_temp is current temperature.&quot;
exit 3
;;
esac`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will need to modify this as the nvidia-smi tool will be updated in the future and the grep command will have to be reconfigured if due to any output changes.&lt;/p&gt;
</description><pubDate>Sat, 24 Jun 2017 04:14:45 GMT</pubDate><content:encoded>&lt;p&gt;Here is a custom script that reports the nvidia-smi temperature of the Nvidia cards in your system using NRPE. Conversely,  NRPE performs much better than NCPA and my protocol of choice.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;*Note: Install NRPE to your&lt;/em&gt; Linux &lt;em&gt;box first, and create this file (gpu_temp.sh) in your /&lt;em&gt;usr&lt;/em&gt;/lib/&lt;em&gt;nagios&lt;/em&gt;/plugins directory for Nagios Core 4+&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Nagios NRPE Query Command&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;check_nrpe!gpu_temp.sh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This will only query the first GPU that is found via nvidia-smi CLI command. It will do warnings and alerts at the given thresholds.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2017/06/script.webp&quot; alt=&quot;nvidia smi nagios&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;The gpu_temp.sh Script&lt;/h3&gt;
&lt;p&gt;Use this script to query nvidia-smi, thus reporting the temp of the card.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;############################################
## Sample nvidia commands to query gpu
##
##nvidia-smi -q -d TEMPERATURE | grep &quot;GPU Current Temp&quot; | awk &apos;{print $5}&apos;
##nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader
##nvidia-smi | grep &apos;[0-9][0-9]C&apos; | awk &apos;{print $3}&apos; | sed &apos;s/C//&apos;
############################################`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here is the script code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash
gpu_temp=`nvidia-smi | grep &apos;[0-9][0-9]C&apos; | awk &apos;{print $3}&apos;`
case $gpu_temp in
[1-70]*)
echo &quot;OK - $gpu_temp in normal operating range.&quot;
exit 0
;;
[71-80]*)
echo &quot;WARNING - $gpu_temp in high operating range.&quot;
exit 1
;;
[81-100]*)
echo &quot;CRITICAL - $gpu_temp in extreme operating range. Shutdown ASAP!&quot;
exit 2
;;
*)
echo &quot;UNKNOWN - $gpu_temp is current temperature.&quot;
exit 3
;;
esac`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You will need to modify this as the nvidia-smi tool will be updated in the future and the grep command will have to be reconfigured if due to any output changes.&lt;/p&gt;
</content:encoded></item><item><title>Troubleshooting Nagios 4 Core Installation</title><link>https://christitus.com/troubleshooting-nagios/</link><guid isPermaLink="true">https://christitus.com/troubleshooting-nagios/</guid><description>&lt;p&gt;Use the following command to verify you have all your config and command files correct when troubleshooting Nagios core installation. This will give you a readout of any configuration errors, thus giving you the ability to fix it on the fly.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I’d recommend making an alias in your .bashrc so you can just type:&lt;code&gt;testnag&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here is an example of the alias I use&lt;/p&gt;
&lt;p&gt;&lt;code&gt;alias testnag=&apos;/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg&apos;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;By using these tips it will cut down on your install and configuration times considerably. You can also make changes and test them before restarting the service, therefore avoiding any potential downtime in your monitoring.&lt;/p&gt;
</description><pubDate>Wed, 21 Jun 2017 17:13:44 GMT</pubDate><content:encoded>&lt;p&gt;Use the following command to verify you have all your config and command files correct when troubleshooting Nagios core installation. This will give you a readout of any configuration errors, thus giving you the ability to fix it on the fly.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I’d recommend making an alias in your .bashrc so you can just type:&lt;code&gt;testnag&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here is an example of the alias I use&lt;/p&gt;
&lt;p&gt;&lt;code&gt;alias testnag=&apos;/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg&apos;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;By using these tips it will cut down on your install and configuration times considerably. You can also make changes and test them before restarting the service, therefore avoiding any potential downtime in your monitoring.&lt;/p&gt;
</content:encoded></item><item><title>Cloud migration hosting in Google, Amazon, or Microsoft</title><link>https://christitus.com/cloud-migration/</link><guid isPermaLink="true">https://christitus.com/cloud-migration/</guid><description>&lt;h2&gt;Moving to the Cloud&lt;/h2&gt;
&lt;p&gt;The following article outlines what it takes for a cloud migration to Google Cloud Compute, Amazon Web Services, or Microsoft Azure means. Most businesses want to move to the “cloud” but have no idea what that means. If you’re a small business you typically have a couple computers scattered around with one storage device. If you’re a medium or large business you probably already have several servers at a location in a contract. Moving to the cloud is often pitched to businesses using Software-as-a-Service replacing the current system with a web application that runs through your browser. While this is ideal, in most instances it isn’t practical. So you keep paying for a bloated IT infrastructure that is dated, isn’t as reliable, and unable to change with your business needs.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2017/02/pc-solution.webp&quot; alt=&quot;PC Solution&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Performing a Cloud Migration&lt;/h3&gt;
&lt;p&gt;Leverage Google Cloud Compute, Amazon Web Services, or Microsoft Azure to perform a cloud migration. Moving your servers will often end up costing between $100 – $400 per server a month depending on your environment. When you factor in that there is no capital expenditure, maintenance, or power costs this is a far cheaper solution than your current environment. You also gain a &lt;strong&gt;SUBSTANTIAL&lt;/strong&gt; increase in flexibility, performance, and reliability. So why hasn’t everyone transitioned to these services?&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2017/02/tangled.webp&quot; alt=&quot;tangled&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Migration Pains&lt;/h3&gt;
&lt;p&gt;The main issue is getting a cloud migration completed. It’s hard to find businesses, technicians, or engineers that will do the migration. In the end, you should be paying these companies directly.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Pitfalls&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Contracting a company that uses their own hardware and you pay them for substandard service and equipment on a monthly basis.&lt;/li&gt;
&lt;li&gt;Under-estimating the extended downtime that is required for moving to these services. If you have 30+ servers it will take months for preparation, transfer time, and deployment.&lt;/li&gt;
&lt;li&gt;Degraded service if you have to work in a hybrid environment. Working through a VPN for an extended time that it takes to complete the full migration.&lt;/li&gt;
&lt;li&gt;Mass Storage – Most of the cost of using these services come from storage, and typically it’s not till you hit the petabytes that you’d run into ROI issues. As a general rule of thumb, anything less than 1000 Terabytes is more cost-effective using these services.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I think every business should be leveraging this technology. The larger the business the harder the cloud migration will be. Small businesses I’ve done in the course of a day, whereas larger businesses take considerably longer. Stay the course and keep searching for talent capable of helping with this transition. I enjoy using all three of these major players in the market, however, for Website Hosting and Linux boxes I like Google Cloud Compute the most, and for businesses already running Office 365 Microsoft Azure makes for the easiest transition.&lt;/p&gt;
</description><pubDate>Mon, 27 Feb 2017 21:03:20 GMT</pubDate><content:encoded>&lt;h2&gt;Moving to the Cloud&lt;/h2&gt;
&lt;p&gt;The following article outlines what it takes for a cloud migration to Google Cloud Compute, Amazon Web Services, or Microsoft Azure means. Most businesses want to move to the “cloud” but have no idea what that means. If you’re a small business you typically have a couple computers scattered around with one storage device. If you’re a medium or large business you probably already have several servers at a location in a contract. Moving to the cloud is often pitched to businesses using Software-as-a-Service replacing the current system with a web application that runs through your browser. While this is ideal, in most instances it isn’t practical. So you keep paying for a bloated IT infrastructure that is dated, isn’t as reliable, and unable to change with your business needs.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2017/02/pc-solution.webp&quot; alt=&quot;PC Solution&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Performing a Cloud Migration&lt;/h3&gt;
&lt;p&gt;Leverage Google Cloud Compute, Amazon Web Services, or Microsoft Azure to perform a cloud migration. Moving your servers will often end up costing between $100 – $400 per server a month depending on your environment. When you factor in that there is no capital expenditure, maintenance, or power costs this is a far cheaper solution than your current environment. You also gain a &lt;strong&gt;SUBSTANTIAL&lt;/strong&gt; increase in flexibility, performance, and reliability. So why hasn’t everyone transitioned to these services?&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/2017/02/tangled.webp&quot; alt=&quot;tangled&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Migration Pains&lt;/h3&gt;
&lt;p&gt;The main issue is getting a cloud migration completed. It’s hard to find businesses, technicians, or engineers that will do the migration. In the end, you should be paying these companies directly.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Pitfalls&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Contracting a company that uses their own hardware and you pay them for substandard service and equipment on a monthly basis.&lt;/li&gt;
&lt;li&gt;Under-estimating the extended downtime that is required for moving to these services. If you have 30+ servers it will take months for preparation, transfer time, and deployment.&lt;/li&gt;
&lt;li&gt;Degraded service if you have to work in a hybrid environment. Working through a VPN for an extended time that it takes to complete the full migration.&lt;/li&gt;
&lt;li&gt;Mass Storage – Most of the cost of using these services come from storage, and typically it’s not till you hit the petabytes that you’d run into ROI issues. As a general rule of thumb, anything less than 1000 Terabytes is more cost-effective using these services.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;I think every business should be leveraging this technology. The larger the business the harder the cloud migration will be. Small businesses I’ve done in the course of a day, whereas larger businesses take considerably longer. Stay the course and keep searching for talent capable of helping with this transition. I enjoy using all three of these major players in the market, however, for Website Hosting and Linux boxes I like Google Cloud Compute the most, and for businesses already running Office 365 Microsoft Azure makes for the easiest transition.&lt;/p&gt;
</content:encoded></item><item><title>Create Swap file on Cloud VM (AWS, GCloud, or Azure)</title><link>https://christitus.com/create-swap-file/</link><guid isPermaLink="true">https://christitus.com/create-swap-file/</guid><description>&lt;p&gt;Use the commands below to create swap file on a micro instance with a Linux operating system. This creates a 2GB Swap file to help alleviate low system ram. Consequently, this is great for those using micro instances in the cloud that have under 1 GB of memory.&lt;/p&gt;
&lt;h2&gt;Commands&lt;/h2&gt;
&lt;p&gt;Run the following from your SSH window&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then change fstab (&lt;strong&gt;/etc/fstab&lt;/strong&gt;) so it automatically mounts your swap file on startup&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/swapfile none swap sw 0 0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Afterward, check if your swap file is operating properly with&lt;code&gt;top&lt;/code&gt; or &lt;code&gt;htop&lt;/code&gt;.&lt;/p&gt;
</description><pubDate>Tue, 14 Feb 2017 21:16:13 GMT</pubDate><content:encoded>&lt;p&gt;Use the commands below to create swap file on a micro instance with a Linux operating system. This creates a 2GB Swap file to help alleviate low system ram. Consequently, this is great for those using micro instances in the cloud that have under 1 GB of memory.&lt;/p&gt;
&lt;h2&gt;Commands&lt;/h2&gt;
&lt;p&gt;Run the following from your SSH window&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon -s`
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then change fstab (&lt;strong&gt;/etc/fstab&lt;/strong&gt;) so it automatically mounts your swap file on startup&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/swapfile none swap sw 0 0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Afterward, check if your swap file is operating properly with&lt;code&gt;top&lt;/code&gt; or &lt;code&gt;htop&lt;/code&gt;.&lt;/p&gt;
</content:encoded></item><item><title>Move Website from Linux to IIS</title><link>https://christitus.com/move-website-linux-iis/</link><guid isPermaLink="true">https://christitus.com/move-website-linux-iis/</guid><description>&lt;p&gt;This guide goes over how to Move Website from Linux to IIS. If you’re in the tech field, you probably see moving from Linux to IIS on a WordPress platform and immediately cringed.&lt;/p&gt;
&lt;h2&gt;Migration&lt;/h2&gt;
&lt;p&gt;The database migration from MySQL to MS SQL is actually pretty easy since you just push it through a large query, but I didn’t really want to mess with it, so I stuck with MySQL.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/downloads/mysql/&quot;&gt;Download and Install MySQL for Windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With that down setting up IIS is also extremely simple now, which is quite surprising given how unfriendly IIS 6 was. The interface is pretty much the same, so you can do it the way you have always known, but now they have added multiple friendly tools in the form of &lt;strong&gt;Microsoft WebMatrix&lt;/strong&gt; and &lt;strong&gt;Web Platform Installer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://go.microsoft.com/fwlink/?LinkID=286266&quot;&gt;Download Microsoft WebMatrix (official Microsoft Link)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Using the Web Platform Install you can just select whatever install you want (WordPress for me) and click install. It grabs all the dependencies and installs them for you, and from here I had a fresh WordPress install. I did a simple import and changed a couple of settings that were reset and was back up and running. Overall a simple migration, and pretty happy with IIS 10 (What happened to IIS 9 we will never know…)&lt;/p&gt;
</description><pubDate>Sat, 26 Dec 2015 05:41:50 GMT</pubDate><content:encoded>&lt;p&gt;This guide goes over how to Move Website from Linux to IIS. If you’re in the tech field, you probably see moving from Linux to IIS on a WordPress platform and immediately cringed.&lt;/p&gt;
&lt;h2&gt;Migration&lt;/h2&gt;
&lt;p&gt;The database migration from MySQL to MS SQL is actually pretty easy since you just push it through a large query, but I didn’t really want to mess with it, so I stuck with MySQL.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/downloads/mysql/&quot;&gt;Download and Install MySQL for Windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With that down setting up IIS is also extremely simple now, which is quite surprising given how unfriendly IIS 6 was. The interface is pretty much the same, so you can do it the way you have always known, but now they have added multiple friendly tools in the form of &lt;strong&gt;Microsoft WebMatrix&lt;/strong&gt; and &lt;strong&gt;Web Platform Installer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://go.microsoft.com/fwlink/?LinkID=286266&quot;&gt;Download Microsoft WebMatrix (official Microsoft Link)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Using the Web Platform Install you can just select whatever install you want (WordPress for me) and click install. It grabs all the dependencies and installs them for you, and from here I had a fresh WordPress install. I did a simple import and changed a couple of settings that were reset and was back up and running. Overall a simple migration, and pretty happy with IIS 10 (What happened to IIS 9 we will never know…)&lt;/p&gt;
</content:encoded></item><item><title>FTP Credentials Required for WordPress Update to Plugins/Themes</title><link>https://christitus.com/ftp-credentials-required/</link><guid isPermaLink="true">https://christitus.com/ftp-credentials-required/</guid><description>&lt;p&gt;If you are getting errors on a WordPress update that say you need FTP credentials, your apache install doesn’t have rights to do the changes. You could install vsftpd, but it is MUCH easier to just grant apache access to your WordPress.&lt;/p&gt;
&lt;h2&gt;Commands to grant access&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo chown -R apache:apache path/to/wordpress&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Here is the syntax I used&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo chown -R apache:apache /var/www/html/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;OR&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo chown -R www-data:www-data /var/www/html/public_html&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Afterward, you should not see the error asking for FTP Credentials again. This is a very simple process and one I highly recommend due to many plugins requiring this to update.&lt;/p&gt;
</description><pubDate>Thu, 03 Dec 2015 22:47:50 GMT</pubDate><content:encoded>&lt;p&gt;If you are getting errors on a WordPress update that say you need FTP credentials, your apache install doesn’t have rights to do the changes. You could install vsftpd, but it is MUCH easier to just grant apache access to your WordPress.&lt;/p&gt;
&lt;h2&gt;Commands to grant access&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;sudo chown -R apache:apache path/to/wordpress&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Here is the syntax I used&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;sudo chown -R apache:apache /var/www/html/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;OR&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo chown -R www-data:www-data /var/www/html/public_html&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Afterward, you should not see the error asking for FTP Credentials again. This is a very simple process and one I highly recommend due to many plugins requiring this to update.&lt;/p&gt;
</content:encoded></item><item><title>Check External IP in Linux Server</title><link>https://christitus.com/check-external-ip/</link><guid isPermaLink="true">https://christitus.com/check-external-ip/</guid><description>&lt;p&gt;All these commands check external IP in Linux Terminal for any Linux system.&lt;/p&gt;
&lt;h2&gt;Commands&lt;/h2&gt;
&lt;h3&gt;Nice format for External IP&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;curl -s checkip.dyndns.org | sed -e &apos;s/.*Current IP Address: //&apos; -e &apos;s/&amp;lt;.*$//&apos;&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Short and Simple to remember&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;curl ifconfig.co&lt;/code&gt;&lt;/p&gt;
&lt;h5&gt;For those with security concerns without using curl&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F&apos;&quot;&apos; &apos;{ print $2}&apos;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Any of these commands will achieve the same result, so pick which one you like best. Personally, for business and professional environments I stick with dig and just make an alias for it, however, for home projects a simple curl &lt;a href=&quot;http://ifconfig.co&quot;&gt;ifconfig.co&lt;/a&gt; is great.&lt;/p&gt;
</description><pubDate>Mon, 14 Sep 2015 18:33:12 GMT</pubDate><content:encoded>&lt;p&gt;All these commands check external IP in Linux Terminal for any Linux system.&lt;/p&gt;
&lt;h2&gt;Commands&lt;/h2&gt;
&lt;h3&gt;Nice format for External IP&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;curl -s checkip.dyndns.org | sed -e &apos;s/.*Current IP Address: //&apos; -e &apos;s/&amp;lt;.*$//&apos;&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Short and Simple to remember&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;curl ifconfig.co&lt;/code&gt;&lt;/p&gt;
&lt;h5&gt;For those with security concerns without using curl&lt;/h5&gt;
&lt;p&gt;&lt;code&gt;dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F&apos;&quot;&apos; &apos;{ print $2}&apos;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Any of these commands will achieve the same result, so pick which one you like best. Personally, for business and professional environments I stick with dig and just make an alias for it, however, for home projects a simple curl &lt;a href=&quot;http://ifconfig.co&quot;&gt;ifconfig.co&lt;/a&gt; is great.&lt;/p&gt;
</content:encoded></item><item><title>Using the find command Linux Terminal</title><link>https://christitus.com/find-command-linux-terminal/</link><guid isPermaLink="true">https://christitus.com/find-command-linux-terminal/</guid><description>&lt;p&gt;Here is the syntax for using the find command Linux terminal. The following commands are great to have in your back pocket when looking for specific files or directories.&lt;/p&gt;
&lt;p&gt;How to find a file from the root directory and check the entire system:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;find / -name filename.ext&lt;/code&gt;&lt;br /&gt;
See directory structure without files (requires &lt;code&gt;tree&lt;/code&gt; use yum or apt-get to install)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tree -d /var/www/&lt;/code&gt;
&lt;em&gt;Note: if you don’t include the -d it will list ALL files and folders&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The two commands I use almost daily as they are fantastic for finding files or just seeing how a programs directories are structured.&lt;/p&gt;
</description><pubDate>Fri, 21 Feb 2014 20:56:09 GMT</pubDate><content:encoded>&lt;p&gt;Here is the syntax for using the find command Linux terminal. The following commands are great to have in your back pocket when looking for specific files or directories.&lt;/p&gt;
&lt;p&gt;How to find a file from the root directory and check the entire system:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;find / -name filename.ext&lt;/code&gt;&lt;br /&gt;
See directory structure without files (requires &lt;code&gt;tree&lt;/code&gt; use yum or apt-get to install)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tree -d /var/www/&lt;/code&gt;
&lt;em&gt;Note: if you don’t include the -d it will list ALL files and folders&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The two commands I use almost daily as they are fantastic for finding files or just seeing how a programs directories are structured.&lt;/p&gt;
</content:encoded></item><item><title>Ideas</title><link>https://christitus.com/ideas/</link><guid isPermaLink="true">https://christitus.com/ideas/</guid><description>&lt;p&gt;Current Ideas for Videos and Articles&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] ZFS, couple that with Sanoid and Syncoid&lt;/li&gt;
&lt;li&gt;[ ] Tiling Window Manager for Windows - &lt;a href=&quot;https://github.com/LGUG2Z/komorebi&quot;&gt;https://github.com/LGUG2Z/komorebi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] TrueNAS Scale&lt;/li&gt;
&lt;li&gt;[ ] Hyprland Window Manager for Wayland - &lt;a href=&quot;https://github.com/hyprwm/Hyprland&quot;&gt;https://github.com/hyprwm/Hyprland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Setting Up Linux Gaming&lt;/li&gt;
&lt;li&gt;[ ] Live Stream Radio Browser Program (Strimio)&lt;/li&gt;
&lt;li&gt;[ ] DSTask - &lt;a href=&quot;https://github.com/naggie/dstask&quot;&gt;https://github.com/naggie/dstask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://Portainer.io&quot;&gt;Portainer.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] PiKVM (&lt;a href=&quot;https://pikvm.org/&quot;&gt;https://pikvm.org/&lt;/a&gt;)&lt;a href=&quot;https://pikvm.org/&quot;&gt;https://pikvm.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] KVM / QEMU full tutorial&lt;/li&gt;
&lt;li&gt;[ ] Zerotier - BestVPN&lt;/li&gt;
&lt;li&gt;[ ] Darling - MacOS Emulation &lt;a href=&quot;https://www.darlinghq.org/&quot;&gt;https://www.darlinghq.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] plex server setup linux&lt;/li&gt;
&lt;li&gt;[ ] Enable GPO in Win 10 Home &lt;a href=&quot;https://www.itechtics.com/enable-gpedit-windows-10-home/#Method_1_Enable_Group_Policy_Editor_in_Windows_10_Home_using_GPEdit_Installer&quot;&gt;https://www.itechtics.com/enable-gpedit-windows-10-home/#Method_1_Enable_Group_Policy_Editor_in_Windows_10_Home_using_GPEdit_Installer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] automount drives systemd&lt;/li&gt;
&lt;li&gt;[ ] rEFInd Bootloader&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://snapdrop.net/&quot;&gt;snapdrop.net&lt;/a&gt; - Share files between devices&lt;/li&gt;
&lt;li&gt;[ ] WinGet and Windows Terminal&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;https://mycroft.ai&quot;&gt;https://mycroft.ai&lt;/a&gt; - Open Source Home Assistant&lt;/li&gt;
&lt;li&gt;[ ] Samba Advanced Video&lt;/li&gt;
&lt;li&gt;[ ] Github config save&lt;/li&gt;
&lt;li&gt;[ ] systemd-services on startup cleanup&lt;/li&gt;
&lt;li&gt;[ ] debtap install deb packages on arch - rpm2cpio - alien&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;https://github.com/dreamer/luxtorpeda/&quot;&gt;https://github.com/dreamer/luxtorpeda/&lt;/a&gt; - Gaming native&lt;/li&gt;
&lt;li&gt;[ ] OpenHABian&lt;/li&gt;
&lt;li&gt;[ ] Startup Programs and managing them&lt;/li&gt;
&lt;li&gt;[ ] Live USB Environments&lt;/li&gt;
&lt;li&gt;[ ] jellyfin&lt;/li&gt;
&lt;li&gt;[ ] Adding Android Libraries / Davik Virtualization&lt;/li&gt;
&lt;li&gt;[ ] Quibble Windows Bootloader - &lt;a href=&quot;https://github.com/maharmstone/quibble&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/maharmstone/quibble&quot;&gt;https://github.com/maharmstone/quibble&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Kodachi&lt;/li&gt;
&lt;li&gt;[ ] Linux Users and Groups&lt;/li&gt;
&lt;li&gt;[ ] Grafana Zabbix Monitoring&lt;/li&gt;
&lt;li&gt;[ ] Alienvault OSSIM&lt;/li&gt;
&lt;li&gt;[ ] resize filesystem&lt;/li&gt;
&lt;li&gt;[ ] URXVT&lt;/li&gt;
&lt;li&gt;[ ] Ranger&lt;/li&gt;
&lt;li&gt;[ ] Vagrant&lt;/li&gt;
&lt;li&gt;[ ] Arch CHROOT Repair&lt;/li&gt;
&lt;li&gt;[ ] alpine linux - The 100MB Linux&lt;/li&gt;
&lt;li&gt;[ ] Kubernetes Initial Setup&lt;/li&gt;
&lt;li&gt;[ ] DEX Linux&lt;/li&gt;
&lt;li&gt;[ ] Making a workstation to load images on PCs - FOG Project&lt;/li&gt;
&lt;li&gt;[ ] Linux Screen Command&lt;/li&gt;
&lt;li&gt;[ ] Firejail&lt;/li&gt;
&lt;li&gt;[ ] Chroot from USB drive&lt;/li&gt;
&lt;li&gt;[ ] Debloat Linux&lt;/li&gt;
&lt;li&gt;[ ] Linux Firewall - UFW&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://privacytools.io/&quot;&gt;Privacytools.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Add SSD or Hard Drive to VM&lt;/li&gt;
&lt;li&gt;[ ] pulse effects and pulse equalizer&lt;/li&gt;
&lt;li&gt;[ ] PxE and TFTP Servers&lt;/li&gt;
&lt;li&gt;[ ] Update MOTD for on Servers&lt;/li&gt;
&lt;li&gt;[ ] Using the grep command&lt;/li&gt;
&lt;li&gt;[ ] LAMP Stack on Ubuntu&lt;/li&gt;
&lt;li&gt;[ ] SMB4k&lt;/li&gt;
&lt;li&gt;[ ] Docker&lt;/li&gt;
&lt;li&gt;[ ] Redhat Line of Products (Insights / Ansible / OpenShift)&lt;/li&gt;
&lt;li&gt;[ ] Snaps and Flatpacks&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Wed, 14 Nov 2012 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Current Ideas for Videos and Articles&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] ZFS, couple that with Sanoid and Syncoid&lt;/li&gt;
&lt;li&gt;[ ] Tiling Window Manager for Windows - &lt;a href=&quot;https://github.com/LGUG2Z/komorebi&quot;&gt;https://github.com/LGUG2Z/komorebi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] TrueNAS Scale&lt;/li&gt;
&lt;li&gt;[ ] Hyprland Window Manager for Wayland - &lt;a href=&quot;https://github.com/hyprwm/Hyprland&quot;&gt;https://github.com/hyprwm/Hyprland&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Setting Up Linux Gaming&lt;/li&gt;
&lt;li&gt;[ ] Live Stream Radio Browser Program (Strimio)&lt;/li&gt;
&lt;li&gt;[ ] DSTask - &lt;a href=&quot;https://github.com/naggie/dstask&quot;&gt;https://github.com/naggie/dstask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://Portainer.io&quot;&gt;Portainer.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] PiKVM (&lt;a href=&quot;https://pikvm.org/&quot;&gt;https://pikvm.org/&lt;/a&gt;)&lt;a href=&quot;https://pikvm.org/&quot;&gt;https://pikvm.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] KVM / QEMU full tutorial&lt;/li&gt;
&lt;li&gt;[ ] Zerotier - BestVPN&lt;/li&gt;
&lt;li&gt;[ ] Darling - MacOS Emulation &lt;a href=&quot;https://www.darlinghq.org/&quot;&gt;https://www.darlinghq.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] plex server setup linux&lt;/li&gt;
&lt;li&gt;[ ] Enable GPO in Win 10 Home &lt;a href=&quot;https://www.itechtics.com/enable-gpedit-windows-10-home/#Method_1_Enable_Group_Policy_Editor_in_Windows_10_Home_using_GPEdit_Installer&quot;&gt;https://www.itechtics.com/enable-gpedit-windows-10-home/#Method_1_Enable_Group_Policy_Editor_in_Windows_10_Home_using_GPEdit_Installer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] automount drives systemd&lt;/li&gt;
&lt;li&gt;[ ] rEFInd Bootloader&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://snapdrop.net/&quot;&gt;snapdrop.net&lt;/a&gt; - Share files between devices&lt;/li&gt;
&lt;li&gt;[ ] WinGet and Windows Terminal&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;https://mycroft.ai&quot;&gt;https://mycroft.ai&lt;/a&gt; - Open Source Home Assistant&lt;/li&gt;
&lt;li&gt;[ ] Samba Advanced Video&lt;/li&gt;
&lt;li&gt;[ ] Github config save&lt;/li&gt;
&lt;li&gt;[ ] systemd-services on startup cleanup&lt;/li&gt;
&lt;li&gt;[ ] debtap install deb packages on arch - rpm2cpio - alien&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;https://github.com/dreamer/luxtorpeda/&quot;&gt;https://github.com/dreamer/luxtorpeda/&lt;/a&gt; - Gaming native&lt;/li&gt;
&lt;li&gt;[ ] OpenHABian&lt;/li&gt;
&lt;li&gt;[ ] Startup Programs and managing them&lt;/li&gt;
&lt;li&gt;[ ] Live USB Environments&lt;/li&gt;
&lt;li&gt;[ ] jellyfin&lt;/li&gt;
&lt;li&gt;[ ] Adding Android Libraries / Davik Virtualization&lt;/li&gt;
&lt;li&gt;[ ] Quibble Windows Bootloader - &lt;a href=&quot;https://github.com/maharmstone/quibble&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/maharmstone/quibble&quot;&gt;https://github.com/maharmstone/quibble&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Kodachi&lt;/li&gt;
&lt;li&gt;[ ] Linux Users and Groups&lt;/li&gt;
&lt;li&gt;[ ] Grafana Zabbix Monitoring&lt;/li&gt;
&lt;li&gt;[ ] Alienvault OSSIM&lt;/li&gt;
&lt;li&gt;[ ] resize filesystem&lt;/li&gt;
&lt;li&gt;[ ] URXVT&lt;/li&gt;
&lt;li&gt;[ ] Ranger&lt;/li&gt;
&lt;li&gt;[ ] Vagrant&lt;/li&gt;
&lt;li&gt;[ ] Arch CHROOT Repair&lt;/li&gt;
&lt;li&gt;[ ] alpine linux - The 100MB Linux&lt;/li&gt;
&lt;li&gt;[ ] Kubernetes Initial Setup&lt;/li&gt;
&lt;li&gt;[ ] DEX Linux&lt;/li&gt;
&lt;li&gt;[ ] Making a workstation to load images on PCs - FOG Project&lt;/li&gt;
&lt;li&gt;[ ] Linux Screen Command&lt;/li&gt;
&lt;li&gt;[ ] Firejail&lt;/li&gt;
&lt;li&gt;[ ] Chroot from USB drive&lt;/li&gt;
&lt;li&gt;[ ] Debloat Linux&lt;/li&gt;
&lt;li&gt;[ ] Linux Firewall - UFW&lt;/li&gt;
&lt;li&gt;[ ] &lt;a href=&quot;http://privacytools.io/&quot;&gt;Privacytools.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[ ] Add SSD or Hard Drive to VM&lt;/li&gt;
&lt;li&gt;[ ] pulse effects and pulse equalizer&lt;/li&gt;
&lt;li&gt;[ ] PxE and TFTP Servers&lt;/li&gt;
&lt;li&gt;[ ] Update MOTD for on Servers&lt;/li&gt;
&lt;li&gt;[ ] Using the grep command&lt;/li&gt;
&lt;li&gt;[ ] LAMP Stack on Ubuntu&lt;/li&gt;
&lt;li&gt;[ ] SMB4k&lt;/li&gt;
&lt;li&gt;[ ] Docker&lt;/li&gt;
&lt;li&gt;[ ] Redhat Line of Products (Insights / Ansible / OpenShift)&lt;/li&gt;
&lt;li&gt;[ ] Snaps and Flatpacks&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item></channel></rss>