Skip to content

nMaax/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

427 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿฅฎ dotfiles

Personal dotfiles and system configurations, just the way I like it.

These dotfiles are heavily based on CachyOS (not just Arch), specifically the various packages that Cachy ships with it's own base installation (fish, sddm, various KDE bloat etc.).

Ideally you should have installed CachyOS selecting for hyprland during the Calamares installation, or without any DE (in such case ๐Ÿฅฎ will install Hyprland automatically).

Managed using chezmoi.

๐Ÿง Installation

Warning

This is NOT a run-and-forget installation. The install script will prompt you at several points. Keep an eye on the terminal throughout the entire process.

  1. Prepare your ~/.config/chezmoi/chezmoi.toml configuration file with your specific variables
[data]
  name = "nMaax"
  email = "you@example.com"
  tailscale_authkey = "tskey-auth-XXXXXXXXXXXXX" # Leave "" if you want to skip tailscale
  nordvpn_token = "nvpnkey-auth-XXXXXXXXXXXXX" # Leave "" if you want to skip nordvpn
  gaming = true

During install, you will have the option to automatically wipe tailscale_authkey / nordvpn_token from ~/.config/chezmoi/chezmoi.toml right after their use.

  1. Install chezmoi and apply the dotfiles
pacman -S chezmoi
chezmoi init --apply nMaax

Warning

ddcutil will been installed, which may cause instability with certain monitors. You can remove it via sudo pacman -Rns ddcutil if you encounter any issue.

Note

During log-in in SDDM choose systemd-owned Hyprland instead of the plain one, to ensure autostart scripts function correctly (e.g. cachy-update tray icon).

Handling missing polkit agent password prompt in CachyOS Hello

If CachyHello won't accept your password on a Hyprland-only installation (i.e., no Plasma), the polkit-kde-agent is likely missing from your background processes. You must ensure this agent is running so CachyHello can trigger the authentication pop-up required to apply your changes. This will likely happen if you proceed to use CachyHello before ๐Ÿฅฎ installation, as the below is already implemented in ๐Ÿฅฎ.

To fix, do the following:

  1. Open your hyprland.conf: vim ~/.config/hypr/hyprland.conf.
  2. Add this line to your "exec-once" section (or anywhere at the bottom):
exec-once = /usr/lib/polkit-kde-authentication-agent-1
  1. Save and restart Hyprland (Super + M or just log out).
  2. Now you should be able to tweak cachy as you like, and proceed with ๐Ÿฅฎ installation.

Note

If you aren't using KDE, the path might be /usr/lib/lxpolkit or similar. Cachy usually defaults to the KDE agent even on Hyprland anyway, so this should be quite rare.

๐Ÿฅž Post-Installation Notes

โ˜๏ธ MEGA & KeePassXC

Both megacmd-bin and keepassxc are installed by the script as regular packages.

Set them up manually after installation:

  1. Log into MEGA and configure your sync:

    mega-login
    mkdir -p ~/MEGA
    mega-sync ~/MEGA/ /
  2. Open KeePassXC and point it at your database once the MEGA sync completes. Remember to place the key-file as well!

๐Ÿ”‘ Keyring and SDDM

KWallet presents some issues in non-Plasma environments, the install scripts tried to cleanly patch these issues out of the box, however some may still be present, especially with Electron apps that rely on safe-storage.

When you are prompted to create a wallet (i.e. the first time an application requests one), use exactly these settings:

  • Name: kdewallet (the default; any other name will not be unlocked automatically by PAM)
  • Encryption: Blowfish (required for kwallet-pam auto-unlock; GnuPG encryption is incompatible)
  • Password: your current user login password (PAM unlocks the wallet by matching it against the login password)

Further information can be found at Arch Wiki: KDE Wallet and Electron Safe Storage Info.

Warning

๐Ÿฅฎ will default on a custom SilentSDDM them which should work out of the box, if you ever modify it remind to first run ./test.sh in /usr/share/sddm/themes/silent/ to ensure SDDM works before rebooting, and avoiding being locked out at login!

๐Ÿ” SSH

The install script enables and starts both sshd and the user-level ssh-agent automatically. But you still need to create a key pair and distribute your public key wherever you want to authenticate. Here are some common procedures you may want to do:

Generating a key

ssh-keygen -t ed25519 -C "axew"

Accept the default path (~/.ssh/id_ed25519) and choose a strong passphrase. The new key is picked up automatically by the running ssh-agent.

Connecting to GitHub

  1. Copy your public key to the clipboard:

    cat ~/.ssh/id_ed25519.pub | wl-copy
  2. Go to GitHub โ†’ Settings โ†’ SSH and GPG keys โ†’ New SSH key, paste it and save.

  3. Test the connection:

    ssh -T git@github.com

    You should see: Hi <username>! You've successfully authenticatedโ€ฆ

Note

You could be prompted to either create a new wallet, or to unlock the current one, refer to the Keyring section for details.

  1. Tell Git to use SSH for GitHub remotes (optional, but recommended):

    git config --global url."git@github.com:".insteadOf "https://github.com/"

Connecting to another machine

Copy your public key to the remote host (replace user@host with your target):

ssh-copy-id user@host

Or manually append ~/.ssh/id_ed25519.pub to ~/.ssh/authorized_keys on the remote.

Optionally, create or edit ~/.ssh/config to define shortcuts:

Host myserver
    HostName 192.168.1.10
    User myuser
    IdentityFile ~/.ssh/id_ed25519

Then connect simply with ssh myserver.

๐ŸŽจ Theming

Noctalia presents a standard approach to sync apps colorschemes with its own theme, each app requires its own procedure, part of it can be automated via code, and some other not. Further information at docs.noctalia.dev/theming.

You can retrieve the list of apps on which automatic theming is set on the Noctalia settings themselves. Note however that part of those may still require some in-app manual intervention, here below are some steps you shall take to complete the theming:

GTK and Qt

  • qt5ct (qt5ct command): Set Color scriptheme to noctalia, General font to SF Pro, Fixed-width font to CaskaydiaCove Nerd Font Mono
  • qt6ct (qt6ct command): Same as above.
    • Qt theming via qt6ct with QT_QPA_PLATFORMTHEME has been already set in Hyprland config files for environment variables (env.conf).
  • GTK (nwg-look): Set general font to SF Pro Regular, then ensure Preferences > .config/gtk-4.0 is disabled, eventually clear if you found it enabled.
    • adw-gtk3 + prefer-dark was already applied via gsettings during the install script.
  • GTK apps will automatically fetch the color scheme from the above, while Qt apps must be configured separately going inside app-settings and finding the colorscheme item.

Specific apps

  • Zen Browser: Open about:config โ†’ set toolkit.legacyUserProfileCustomizations.stylesheets to true; then open Settings โ†’ General โ†’ set Website Appearance to Auto; finally Restart Zen Browser.
  • Discord: Open Equibop โ†’ Settings โ†’ Themes โ†’ enable one of the two Noctalia themes.
  • VSCode: Install the NoctaliaTheme extension from the marketplace, then select it via Ctrl+Shift+P โ†’ Preferences: Color Theme.
  • Telegram: Open Settings โ†’ Chat Settings โ†’ scroll to the bottom and enable the custom color theme.
  • Steam: Install Material-Theme and add it in Millenium Settings > Theme, then click the three dots > configure > style > colors > select Matugen in the theme color dropdown.
  • All others apps should not require any intervention (e.g. neovim, btop etc.), hopefully.

Note

If some apps do not properly fetch the color scheme even after having followed the noctalia guidelines, try to disable and re-enable them, as well as changing color-scheme as a whole.\

Furthermore, you can install other themes for apps yourself, have a look at:

๐Ÿฅฎ also supports linux-wallpaperengine! If you installed Steam you can see how to set it up and related plugin

๐ŸŒ Browser(s) setup

The stuff that I usually use during my browsing experience, these are completely optional and at your preference, do what you want with them:

Eventually consider also Volume Control, Web Archives, YouTube Improved, etc.

Furthermore, here is a list of some good misc websites for assets:

๐Ÿ”ฅ Spicetify Extension

Other stuff I use on Spicetify, my advice is to use the marketplace as much as possible

  • Spicy Lyrics (instead of Beautiful Lyrics, which seem to be deprecated!)
  • Global Stats for songs, to fetch info on different songs.
  • Lucid Theme (instead of the Confy default one, tho this one looks quite heavy, bloated and dirty, ngl.)

Warning

Disable Comfy theme via spicetify cli if you want to install a different one! Run the following:

spicetify config current_theme " "
spicetify apply

๐ŸŽฎ Gaming

Of course ๐Ÿฅฎ is designed with gaming in mind too, ๐Ÿฅฎ will apply some common installations and tweaks if cachyos gaming packages are detected. For more details, visit the CachyOS Gaming Wiki. Here are some handy notes at your disposal to complete your gaming experience:

๐Ÿš€ Steam Launch Options

  • NVIDIA: PROTON_ENABLE_WAYLAND=1 PROTON_DLSS_UPGRADE=1 PROTON_NVIDIA_LIBS_NO_32BIT=1 PROTON_ENABLE_HDR=1 ENABLE_HDR_WSI=1 game-performance %command%
  • AMD: PROTON_USE_NTSYNC=1 ENABLE_LAYER_MESA_ANTI_LAG=1 PROTON_FSR4_UPGRADE=1 game-performance %command%

โš™๏ธ Steam/Proton Settings

  • Compatibility: Set proton-cachyos (slr) as your default Proton layer.
  • Pre-caching: If using Proton-CachyOS, navigate to Steam -> Settings -> Downloads and UNCHECK:
    • "Enable Shader Pre-caching"
    • "Allow background processing of Vulkan shaders"

๐Ÿท Lutris, Heroic and other Launchers Settings

  • System Options: Enable "Disable Lutris Runtime" and "Prefer system libraries".
  • Compatibility: Ensure the layer is set to proton-cachyos (slr). Just as in Steam.
  • Launch Options: Mirror the launch options used in Steam, each launcher has its own way to do that, which usually do not differ much from Steam anyway, refer to documentation. (e.g. Heroic will provide some form entries for variables and values)

๐Ÿ“น Streaming (P2P)

Open your terminal and use your preferred AUR helper (like yay or paru) to install the core capture tools. We will also pull down the 32-bit library for vkcapture so older or indie games running through Proton capture correctly.

# Install the Vulkan/OpenGL video capture plugin
paru -S obs-vkcapture lib32-obs-vkcapture

# Install the PipeWire application audio capture plugin
paru -S obs-pipewire-audio-capture

If you are not satisyied with the Wayland screenshare when streaming gaming on your Electron app (e.g. Discord) then ๐Ÿฅฎ brings some plugins to stream your games with low latency and low added input latency on the game. Namely using obs-vkcapture, lib32-obs-vkcapture, obs-pipewire-audio-capture.

  1. Launch your game, so its audio and video hooks are active in your system.
  2. Open OBS Studio. Under the Sources dock, click the + icon.
  3. Add a Game Capture (Vulkan/OpenGL) source. Leave its properties on default; it will automatically hook into your game's engine.
  4. Click + again and add an Application Audio Capture (PipeWire) source.
  5. Inside its properties, find the Application dropdown menu and select wine64-preloader (this represents your Steam Proton / Wine game process).

Because you are explicitly capturing the game audio now, you must turn off OBS's global desktop capture so your friends don't hear everything twice:

  • Go to Settings $\rightarrow$ Audio.
  • Under Global Audio Devices, change Desktop Audio to Disabled. Click Apply.

To drop your hardware encoding delay down to less than 15 milliseconds, you need to adjust your video framing and reconfigure the NVIDIA NVENC encoder pipeline.

On the left menu, select the Video tab. Do not use the "Rescale Output" checkbox in the encoder menu; handle it here instead:

  • Base (Canvas) Resolution: Match this to your monitor's native resolution (e.g., 2560x1440).
  • Output (Scaled) Resolution: Set this to 1920x1080 (1080p is the sweet spot).
  • Downscale Filter: Bicubic (Sharpened scaling, 16 samples).
  • Common FPS Values: 60.

Go to the Output tab and flip the Output Mode at the very top from Simple to Advanced. In the Streaming tab, mirror these exact specifications:

Setting Field Value to Select / Type Why it matters
Audio Encoder FFmpeg Opus Enforced by WebRTC for instant, crisp sound.
Video Encoder NVIDIA NVENC H.264 Uses your GPU hardware so your game doesn't lag.
Rate Control CBR Delivers a smooth, predictable data stream.
Bitrate 6000 Kbps Pristine quality for 1080p60 without network bloating.
Keyframe Interval 1 s Allows the web player to recover instantly from dropped packets.
Preset P1: Fastest (Lowest Latency) Bypasses complex frame analysis to prioritize speed.
Tuning Low Latency Cuts out internal encoder buffer queues.
Multipass Mode Single Pass Processes the frame once instead of twice.
Profile baseline Strips out heavy compression loops that cause player buffering.
Look-ahead ๐ŸŸฉ Uncheck Prevents the GPU from processing future frames in advance.
Adaptive Quantization ๐ŸŸฉ Uncheck Eliminates extra algorithmic calculation passes.
B-Frames 0 Most Important: Sends frames out instantly as they render.

Go to the Advanced tab on the left sidebar. Under General, change Process Priority from Normal to Above Normal or High. This stops the Linux kernel from starving OBS of resources when your game hits an intense scene.

Now we are ready to fire Up the Meshcast Stream

  1. Open your web browser and navigate to Meshcast.io.
  2. Scroll to the Stream using WHIP section, type a unique ID, select your closest regional server location, and click the link generation button.
  3. Meshcast will hand you a WHIP URL that looks similar to this: https://cae2.meshcast.io/whip/MadaMada1234.
  4. In OBS, go to Settings > Stream.
  5. Set Service to WHIP.
  6. Split your Meshcast link across the two input boxes like this:
  • Server: https://cae2.meshcast.io/whip/
  • Bearer Token: MadaMada1234 (The unique string at the very end of your link) (or just skip the token and put the whole link in the server field)
  1. Click Apply and OK.

Now you can copy the Watch Page Link provided by the Meshcast interface (e.g., https://meshcast.io/view.html?geo=cae2&id=MadaMada1234) and send it over to your friends.

Hit Start Streaming in OBS. Your game stream will bypass your local home firewall completely via Meshcast's edge servers, and your friends will see your high-framerate gameplay and isolated audio with a sub-second delay.


๐Ÿ“ TODOs

For the future

  • Prepare WALLHACK Wallpapers -> Make a release for dotfiles-assets if files are too large
  • Enhance assets by introducing a github CI action that autogenerates README with gallery, like dharmx
  • Try out these QyLock as new SDDM presets
  • Try out Hyprland Scroll Overview plugin instead of qs overiview
  • Try out Noctalia Polkit Agent (you must uninstall kde polking agent, maybe this is not the right choice in cachy)
  • Generalize for pure Arch by reproducing what Cachy installs, including fundamentals like bluetooth, networkmanager, fish, cachyos fish setup, gpu drivers etc.

About

CachyOS + Hyprland + Noctalia

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors