commit fbfbccd0995ef0b120bf9502dbe295309f5e22ee2f4469d8b694fc8b79d15b86 Author: Philipp Date: Sat Jul 13 23:47:30 2024 +0200 First commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..418e3b9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +public/ +resources/_gen/ +.hugo_build.lock +themes/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..b74f0ce --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "themes/blowfish"] + path = themes/blowfish + url = https://github.com/nunocoracao/blowfish.git + branch = main diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..5044cf8 --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,5 @@ ++++ +title = '{{ replace .File.ContentBaseName "-" " " | title }}' +date = {{ .Date }} +draft = true ++++ diff --git a/assets/icons/matrix.svg b/assets/icons/matrix.svg new file mode 100644 index 0000000..2a725af --- /dev/null +++ b/assets/icons/matrix.svg @@ -0,0 +1 @@ + diff --git a/assets/img/avatar.png b/assets/img/avatar.png new file mode 100644 index 0000000..0110ae9 Binary files /dev/null and b/assets/img/avatar.png differ diff --git a/config/_default/hugo.toml b/config/_default/hugo.toml new file mode 100644 index 0000000..1c3471f --- /dev/null +++ b/config/_default/hugo.toml @@ -0,0 +1,61 @@ +# -- Site Configuration -- +# Refer to the theme docs for more details about each of these parameters. +# https://blowfish.page/docs/getting-started/ + +theme = "blowfish" +baseURL = "https://boehm.sh" +defaultContentLanguage = "en" +disableLanguages = [] #to allow translation work requiring shipping to production + +enableRobotsTXT = true +paginate = 100 +summaryLength = 30 +hasCJKLanguage = true + +buildDrafts = false +buildFuture = false + +enableEmoji = true + +[imaging] + anchor = 'Center' + +[taxonomies] + tag = "tags" + category = "categories" + author = "authors" + +[sitemap] + changefreq = 'always' + filename = 'sitemap.xml' + priority = 0.5 + +[outputs] + home = ["HTML", "RSS", "JSON"] + +[related] + threshold = 0 + toLower = false + + [[related.indices]] + name = "tags" + weight = 100 + + [[related.indices]] + name = "categories" + weight = 100 + + [[related.indices]] + name = "authors" + weight = 20 + + [[related.indices]] + name = "date" + weight = 10 + + [[related.indices]] + applyFilter = false + name = 'fragmentrefs' + type = 'fragments' + weight = 10 + diff --git a/config/_default/languages.en.toml b/config/_default/languages.en.toml new file mode 100644 index 0000000..fc79c54 --- /dev/null +++ b/config/_default/languages.en.toml @@ -0,0 +1,25 @@ +languageCode = "en" +languageName = "English" +weight = 1 +title = "BOEHM.SH" + +[params] + colorScheme = "ocean" + displayName = "English" + isoCode = "en" + rtl = false + dateFormat = "2 January 2006" + description = "The blog of Philipp" + +[author] + name = "Philipp Böhm" + image = "img/avatar.png" + headline = "Network Engineer" + bio = "Linux enthusiast & Network Engineer" + links = [ + { matrix = "//matrix.to/#/@spaenny:boehm.sh" }, + { mastodon = "//social.fro.ge/@Spaenny" }, + { github = "//github.com/spaenny" }, + { email = "mailto:hello@boehm.sh" }, + { rss = "//boehm.sh/index.xml" }, + ] diff --git a/config/_default/markup.toml b/config/_default/markup.toml new file mode 100644 index 0000000..db3e68c --- /dev/null +++ b/config/_default/markup.toml @@ -0,0 +1,13 @@ +# -- Markup -- +# These settings are required for the theme to function. + +[goldmark] +[goldmark.renderer] + unsafe = true + +[highlight] + noClasses = false + +[tableOfContents] + startLevel = 2 + endLevel = 4 diff --git a/config/_default/menus.en.toml b/config/_default/menus.en.toml new file mode 100644 index 0000000..a6fb8b0 --- /dev/null +++ b/config/_default/menus.en.toml @@ -0,0 +1,29 @@ +# -- Main Menu -- +# The main menu is displayed in the header at the top of the page. +# Acceptable parameters are name, pageRef, page, url, title, weight. +# +# The simplest menu configuration is to provide: +# name = The name to be displayed for this menu link +# pageRef = The identifier of the page or section to link to +# +# By default the menu is ordered alphabetically. This can be +# overridden by providing a weight value. The menu will then be +# ordered by weight from lowest to highest. + +[[main]] + name = "Blog" + url = "posts" + weight = 1 + +[[main]] + identifier = "mastodon" + pre = "mastodon" + weight = 10 + url = "https://social.fro.ge/@Spaenny" + +[[main]] + identifier = "github" + pre = "github" + url = "https://git.snrd.eu/spaenny" + weight = 20 + diff --git a/config/_default/params.toml b/config/_default/params.toml new file mode 100644 index 0000000..d2a305a --- /dev/null +++ b/config/_default/params.toml @@ -0,0 +1,121 @@ +# -- Theme Options -- +# These options control how the theme functions and allow you to +# customise the display of your website. +# +# Refer to the theme docs for more details about each of these parameters. +# https://blowfish.page/docs/configuration/#theme-parameters + +colorScheme = "blowfish" +defaultAppearance = "dark" # valid options: light or dark +autoSwitchAppearance = true + +enableSearch = true +enableCodeCopy = true + +mainSections = ["posts"] +# robots = "" + +disableImageOptimization = false +disableTextInHeader = false + +defaultBackgroundImage = "/img/background.svg" +defaultFeaturedImage = "/img/featured.svg" + +highlightCurrentMenuArea = true +smartTOC = true +smartTOCHideUnfocusedChildren = false + +[header] + layout = "fixed" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur + +[footer] + showMenu = true + showCopyright = true + showThemeAttribution = true + showAppearanceSwitcher = true + showScrollToTop = true + +[homepage] + layout = "profile" # valid options: page, profile, hero, card, background, custom + showRecent = true + showRecentItems = 6 + showMoreLink = true + showMoreLinkDest = "posts" + cardView = false + cardViewScreenWidth = false + layoutBackgroundBlur = true # only used when layout equals background + +[article] + showDate = true + showViews = false + showLikes = false + showDateOnlyInArticle = false + showDateUpdated = true + showAuthor = true + showAuthorBottom = true + showHero = true + heroStyle = "basic" # valid options: basic, big, background, thumbAndBackground + layoutBackgroundBlur = true # only used when heroStyle equals background + showBreadcrumbs = true + showDraftLabel = true + showEdit = true + editURL = "" + editAppendPath = false + seriesOpened = false + showHeadingAnchors = true + showPagination = true + invertPagination = false + showReadingTime = true + showTableOfContents = true + showRelatedContent = true + relatedContentLimit = 6 + showTaxonomies = true + showAuthorsBadges = true + showWordCount = true + sharingLinks = [ "linkedin", "matrix", "bluesky", "reddit", "whatsapp", "email"] + showZenMode = true + +[list] + showHero = true + heroStyle = "basic" # valid options: basic, big, background, thumbAndBackground + layoutBackgroundBlur = true # only used when heroStyle equals background + layoutBackgroundHeaderSpace = false + showBreadcrumbs = false + showSummary = false + showViews = false + showLikes = false + showTableOfContents = true + showCards = true + orderByWeight = true + groupByYear = false + cardView = false + cardViewScreenWidth = false + constrainItemsWidth = false + +[sitemap] + excludedKinds = [] + +[taxonomy] + showTermCount = true + showHero = true + heroStyle = "basic" # valid options: basic, big, background, thumbAndBackground + showBreadcrumbs = false + showViews = false + showLikes = false + showTableOfContents = true + cardView = false + +[term] + showHero = true + heroStyle = "basic" # valid options: basic, big, background, thumbAndBackground + showBreadcrumbs = false + showViews = false + showLikes = false + showTableOfContents = true + groupByYear = true + cardView = false + cardViewScreenWidth = false + +[umamiAnalytics] + websiteid = "a68c035b-1495-411d-ab95-8b1ea6fe4496" + domain = "t.v0v.de" diff --git a/content/posts/managing-dotfiles-with-stow-and-git.md b/content/posts/managing-dotfiles-with-stow-and-git.md new file mode 100644 index 0000000..6380a42 --- /dev/null +++ b/content/posts/managing-dotfiles-with-stow-and-git.md @@ -0,0 +1,119 @@ ++++ +title = "Managing Dotfiles with GNU Stow and Git" +description = "In this guide, we explore how to efficiently manage dotfiles using GNU Stow and Git. Dotfiles, which are configuration files for various programs, can be organized, version-controlled, and easily synchronized across multiple machines with this powerful combination. We guide you through setting up a dotfiles repository, using Stow to create symlinks, and deploying your configuration on new systems. By the end of this post, you'll have a streamlined method for maintaining a consistent development environment." +date = 2024-07-06T08:30:07+01:00 +draft = false +categories = [ "Development Environment", "Version Control", "Linux"] +tags = ["Dotfiles", "GNU Stow", "Git", "Configuration Management", "Symlink Management"] ++++ +Dotfiles are configuration files for various programs and tools on your system. They usually reside in your home directory and are prefixed with a dot (.), hence the name "dotfiles". Managing these files efficiently is crucial for setting up a consistent development environment across different systems. One powerful method to manage dotfiles is by using GNU Stow along with Git. + +GNU Stow is a symlink manager that simplifies the management of configuration files by creating symbolic links from a central directory to their respective locations in your home directory. When combined with Git, it allows you to version control your dotfiles and easily synchronize them across multiple machines. +## Setting Up Your Dotfiles Repository + +1. Create a Git Repository: + +First, create a Git repository to store your dotfiles. You can do this on GitHub, GitLab, or any other Git hosting service. Initialize the repository on your local machine: + +``` +mkdir ~/dotfiles +cd ~/dotfiles +git init +``` + +2. Organize Your Dotfiles: + +Organize your dotfiles into subdirectories within your ~/dotfiles directory. Each subdirectory should correspond to a different application or configuration set. For example: + +``` +~/dotfiles +├── bash +│ └── .bashrc +├── vim +│ └── .vimrc +└── git + └── .gitconfig +``` + +3. Symlink Dotfiles with Stow: + +Use GNU Stow to create symbolic links in your home directory pointing to the actual files in your ~/dotfiles directory. Install GNU Stow if you haven't already: + +``` +sudo apt-get install stow # On Debian-based systems +sudo pacman -S stow # On Arch-based systems +brew install stow # On macOS with Homebrew +``` + +Navigate to your ~/dotfiles directory and use Stow to create the symlinks: + +``` +cd ~/dotfiles +stow bash +stow vim +stow git +``` + +This will create symlinks in your home directory like ~/.bashrc pointing to ~/dotfiles/bash/.bashrc. + +## Committing and Pushing Your Dotfiles + +1. Add and Commit Changes: + +After organizing and symlinking your dotfiles, add and commit the changes to your Git repository: + +``` +git add . +git commit -m "Initial commit of dotfiles" +``` + +2. Push to Remote Repository: + +Push the changes to your remote Git repository: + +``` +git remote add origin +git branch -M main +git push -u origin main +``` + +## Cloning and Deploying Dotfiles on a New Machine + +When setting up a new machine, you can easily clone your dotfiles repository and use Stow to deploy your configuration: + +1. Clone the Repository: + +``` +git clone ~/dotfiles +cd ~/dotfiles +``` + +2. Deploy Dotfiles with Stow: + +``` +stow bash +stow vim +stow git +``` + +## Managing Updates + +To update your dotfiles, simply make changes to the files in your ~/dotfiles directory, commit the changes, and push to your remote repository: + +``` +git add . +git commit -m "Update vim configuration" +git push +``` + +On other machines, pull the changes and re-stow the updated directories: + +``` +cd ~/dotfiles +git pull +stow vim +``` + +## Conclusion + +Using GNU Stow in combination with Git provides a robust and flexible method for managing your dotfiles. It ensures that your configurations are version-controlled, easily deployable, and consistent across multiple systems. By following the steps outlined in this guide, you can streamline your dotfile management and focus on what truly matters—your development work. diff --git a/content/posts/netflix-ad-free-tier-phaseout-anti-consumer.md b/content/posts/netflix-ad-free-tier-phaseout-anti-consumer.md new file mode 100644 index 0000000..06c17ab --- /dev/null +++ b/content/posts/netflix-ad-free-tier-phaseout-anti-consumer.md @@ -0,0 +1,45 @@ ++++ +title = "Netflix's Strategy to Phase Out Ad-Free, Affordable Tiers: A Concern for Consumers" +description = "Discover why Netflix's decision to phase out affordable, ad-free tiers is raising consumer concerns about privacy, choice, and viewing experience quality in the evolving streaming industry." +date = 2024-07-06T07:37:07+01:00 +draft = false +categories = [ "Streaming Services", "Consumer Rights", "Digital Privacy"] +tags = ["Netflix", "Ad-Free Streaming", "Subscription Models", "Consumer Advocacy", "Privacy Concerns"] ++++ + + +Netflix, a household name in streaming services, has been at the forefront of revolutionizing how we consume entertainment. With its vast library of movies, series, and original content, Netflix has attracted millions of subscribers worldwide. However, recent decisions to phase out ad-free, affordable tiers have sparked controversy, raising concerns about consumer rights and the future of streaming services. + +#### Understanding Netflix's Business Evolution + +Since its inception, Netflix has offered various subscription plans tailored to different consumer preferences. Initially, the platform focused on a single ad-free tier, emphasizing uninterrupted viewing experiences at a reasonable price. Over time, as competition in the streaming market intensified, Netflix introduced tiered pricing to accommodate diverse consumer demands and enhance revenue streams. + +#### The Shift Towards Ad-Supported Models + +In response to changing market dynamics and the need for sustainable growth, Netflix has begun exploring ad-supported subscription models. This strategic shift aims to diversify revenue sources and potentially lower entry barriers for new subscribers by offering cheaper plans supported by advertisements. + +#### Consumer Backlash and Anti-Consumer Sentiment + +Despite Netflix's business rationale, the decision to phase out ad-free, affordable tiers has generated significant backlash among consumers and industry observers alike. Here are key concerns raised: + +1. **Loss of Choice and Value**: Subscribers who value ad-free experiences view the removal of affordable, ad-free tiers as a loss of choice and value. For many, the appeal of Netflix lies in its uninterrupted viewing experience, and any deviation from this model is seen as a step backward. + +2. **Privacy Concerns**: Ad-supported models often involve tracking consumer behavior to deliver targeted advertisements. This raises privacy concerns among subscribers who prioritize data security and prefer not to have their viewing habits monetized by third parties. + +3. **Quality of Experience**: Ad-supported tiers may potentially compromise the quality of user experience. Intrusive or poorly targeted advertisements could disrupt viewing, diminish satisfaction, and undermine Netflix's reputation for premium content delivery. + +4. **Perception of Consumer Exploitation**: Critics argue that phasing out ad-free options in favor of ad-supported models prioritizes revenue over consumer preferences. This perception of consumer exploitation could erode trust and loyalty, impacting Netflix's long-term sustainability. + +#### Impact on Netflix's Competitive Position + +While Netflix's strategic pivot aims to bolster revenue and market competitiveness, it also underscores the evolving dynamics of the streaming industry. Competitors offering ad-supported tiers, such as Hulu and Paramount+, have carved out niches appealing to budget-conscious consumers, intensifying pressure on Netflix to adapt its pricing and service offerings. + +#### Consumer Advocacy and Transparency + +In response to consumer concerns, transparency and proactive communication are crucial. Netflix must engage openly with subscribers, addressing privacy safeguards, user experience enhancements, and the rationale behind strategic shifts. By prioritizing consumer advocacy and dialogue, Netflix can mitigate negative sentiment and foster trust in its evolving business strategies. + +#### Conclusion: Balancing Innovation and Consumer Trust + +Netflix's decision to phase out ad-free, affordable tiers reflects its evolving strategy to navigate competitive pressures and sustain growth. However, the move has ignited debate over consumer rights, privacy, and the future of ad-supported streaming models. As Netflix continues to innovate and adapt, striking a balance between profitability and consumer-centricity will be pivotal in shaping its reputation and market position. + +Ultimately, consumers play a vital role in shaping the streaming landscape. By advocating for transparency, choice, and consumer rights, subscribers can influence industry practices and ensure that streaming services like Netflix prioritize their needs and preferences. As the streaming industry evolves, maintaining a consumer-centric approach remains essential for fostering trust, loyalty, and long-term success. diff --git a/content/posts/setup-lookback-audio-device-pipewire.md b/content/posts/setup-lookback-audio-device-pipewire.md new file mode 100644 index 0000000..d1c49bb --- /dev/null +++ b/content/posts/setup-lookback-audio-device-pipewire.md @@ -0,0 +1,89 @@ ++++ +title = 'Setting Up a Loopback Audio Device with Pipewire' +description = 'Learn how to set up a loopback audio device using Pipewire. Follow our step-by-step guide for seamless audio routing and recording.' +date = 2024-07-13T07:07:07+01:00 +draft = false +categories = [ "Audio Configuration", "Linux", "Pipewire"] +tags = ["Loopback Audio", "Pipewire Setup", "Focusrite Scarlett 2i2", "Linux Sound System", "Audio Routing", "Recording Audio", "Audio Interface Configuration"] ++++ + +Creating a loopback audio device in Pipewire can be useful for routing audio between different applications or capturing audio from one application to another. This guide will walk you through the steps to set up a loopback device for your Focusrite Scarlett 2i2 audio interface. + +## Prerequisites + +Ensure you have Pipewire installed and running on your system. This guide assumes you are familiar with basic terminal commands and have access to edit configuration files. + +## Step-by-Step Instructions + +1. **Identify the Target Output Device** + + First, you need to identify the name of the target output device for your audio interface. Run the following command to list all audio nodes: + + ``` + pw-dump | grep "node.name" + ``` + + Look for the output node of your audio interface. For the Focusrite Scarlett 2i2, it might look something like \ + `alsa_output.usb-Focusrite_Scarlett_2i2_USB-00.pro-output-0`. + +2. **Create the Configuration File** + + Next, create a new configuration file for the loopback module. This file should be placed in `~/.config/pipewire/pipewire.conf.d/`. You might need to create the directory if it does not exist: + + ``` + mkdir -p ~/.config/pipewire/pipewire.conf.d/ + ``` + + Then, create and open the configuration file: + + ``` + vim ~/.config/pipewire/pipewire.conf.d/90-loopback.conf + ``` + +3. **Add the Loopback Configuration** + + Copy and paste the following configuration into the file. Adjust the parameters as needed to match your setup: + + ``` + context.modules = [ + { + name = libpipewire-module-loopback + args = { + node.description = "Scarlett 2i2 Loopback" + capture.props = { + node.name = "Scarlett_2i2_Loopback" + media.class = "Audio/Sink" + audio.position = [ FL FR ] + } + playback.props = { + node.name = "playback.Scarlett_2i2_Loopback" + audio.position = [ AUX0 AUX1 ] + target.object = "alsa_output.usb-Focusrite_Scarlett_2i2_USB-00.pro-output-0" + stream.dont-remix = true + node.dont-reconnect = false + node.passive = true + } + } + } + ] + ``` + + - **node.description**: A descriptive name for your loopback device. + - **node.name**: An identifier for the node. Ensure it starts with `playback.` for playback properties. This should match the `node.name` of `capture.props`. + - **target.object**: The output node you identified earlier. + +4. **Restart Pipewire** + + After saving the configuration file, restart Pipewire to apply the changes: + + ```sh + systemctl --user restart pipewire + ``` + +## Additional Notes + +- **node.description**: You can change this to a name that best describes its purpose, such as "Scarlett 2i2 Loopback for Recording". +- **node.name**: This should be a unique identifier without spaces. For playback nodes, it should start with `playback.`. This should match the `node.name` of `capture.props`. +- **target.object**: Ensure you are using the correct output node for your audio interface. If your device has both input and output nodes, make sure to select the output node. + +By following these steps, you should have a loopback audio device set up with Pipewire, allowing you to route audio from your Scarlett 2i2 audio interface for various purposes like recording or live streaming. diff --git a/content/posts/zsh-displacement-fix.md b/content/posts/zsh-displacement-fix.md new file mode 100644 index 0000000..7b8265f --- /dev/null +++ b/content/posts/zsh-displacement-fix.md @@ -0,0 +1,48 @@ ++++ +title = 'How to fix ZSH cursor displacement on Linux' +description = 'Simple step by step guide to fixing your ZSH displacing when connecting to a remote server via SSH' +date = 2024-07-06T07:07:07+01:00 +draft = false +categories = [ "Open-Source", "ZSH", "Linux"] +tags = ["tutorial", "locale", "shell", "zshell", "terminal", "SSH", "issue"] ++++ + +Recently, I encountered an issue with my ZSH configuration where the cursor was displaced, making it difficult to use the terminal effectively. After some troubleshooting, I found a simple solution that involved setting the language locale on my Linux system. Here's a step-by-step guide to help you fix this issue if you run into it. +## Step-by-Step Guide to Fix ZSH Cursor Displacement +### Step 1: Set the Locale + +First, you need to set the language locale to en_US.UTF8. This can be done using the set-locale command: + +``` +set-locale LANG=en_US.UTF8 +``` + +This command sets the system's language to English (United States) with UTF-8 encoding, which is essential for proper character display and cursor positioning in the terminal. +### Step 2: Enable the Locale in /etc/locale.gen + +Before setting the locale, you need to ensure that it is enabled in the /etc/locale.gen file. Open this file in your preferred text editor (you'll need superuser permissions to edit it): + +``` +sudo nano /etc/locale.gen +``` + +Look for the line that contains en_US.UTF8 and make sure it is uncommented (remove the # at the beginning of the line). It should look like this: `en_US.UTF-8 UTF-8` + +### Step 3: Generate the Locale + +After enabling the locale in /etc/locale.gen, you need to generate it. This can be done by running the locale-gen command with superuser permissions: + +``` +sudo locale-gen +``` + +This command generates the locale data, making it available for use on your system. +### Final Thoughts + +After completing these steps, your ZSH cursor displacement issue should be resolved. These changes ensure that your terminal can correctly handle and display characters, which is crucial for the proper functioning of ZSH. + +By setting the language locale and ensuring it's enabled and generated, you can avoid issues with cursor displacement and improve your overall terminal experience. If you have any questions or run into any problems, feel free to contact me. Happy coding! + +--- + +I hope this guide helps you fix any ZSH cursor displacement issues you encounter. If you found this post useful, consider sharing it with others who might benefit from it. diff --git a/static/android-chrome-192x192.png b/static/android-chrome-192x192.png new file mode 100644 index 0000000..3c443b1 Binary files /dev/null and b/static/android-chrome-192x192.png differ diff --git a/static/android-chrome-512x512.png b/static/android-chrome-512x512.png new file mode 100644 index 0000000..f02956f Binary files /dev/null and b/static/android-chrome-512x512.png differ diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png new file mode 100644 index 0000000..3d0a03c Binary files /dev/null and b/static/apple-touch-icon.png differ diff --git a/static/favicon-16x16.png b/static/favicon-16x16.png new file mode 100644 index 0000000..b8d52d9 Binary files /dev/null and b/static/favicon-16x16.png differ diff --git a/static/favicon-32x32.png b/static/favicon-32x32.png new file mode 100644 index 0000000..accf892 Binary files /dev/null and b/static/favicon-32x32.png differ diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..3dc24c5 Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/site.webmanifest b/static/site.webmanifest new file mode 100644 index 0000000..a493a91 --- /dev/null +++ b/static/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file