{"id":20491415,"url":"https://github.com/midhunterx/hunter-os","last_synced_at":"2026-04-20T01:05:05.505Z","repository":{"id":225430992,"uuid":"765967283","full_name":"MidHunterX/Hunter-OS","owner":"MidHunterX","description":"⌨️ Linux desktop environment focusing on cognitive ergonomics in computing, modal workflow, vim keybindings, automation, aesthetics, battery optimization and more...","archived":false,"fork":false,"pushed_at":"2026-03-24T20:18:24.000Z","size":20862,"stargazers_count":44,"open_issues_count":2,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-03-26T01:41:21.316Z","etag":null,"topics":["code-oss","feh","firefox","fish-shell","fuzzel","hyprland-config","keyd","kitty-config","linux","starship-prompt","tmux-conf","vifmrc","waybar","wlogout","zathurarc"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MidHunterX.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-02T01:28:48.000Z","updated_at":"2026-03-24T20:18:29.000Z","dependencies_parsed_at":"2025-07-23T03:18:20.680Z","dependency_job_id":"6a355d16-ed0c-40ca-b3b4-b84463678375","html_url":"https://github.com/MidHunterX/Hunter-OS","commit_stats":null,"previous_names":["midhunterx/hunter-os"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MidHunterX/Hunter-OS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MidHunterX%2FHunter-OS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MidHunterX%2FHunter-OS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MidHunterX%2FHunter-OS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MidHunterX%2FHunter-OS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MidHunterX","download_url":"https://codeload.github.com/MidHunterX/Hunter-OS/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MidHunterX%2FHunter-OS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32028550,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"ssl_error","status_checked_at":"2026-04-20T00:17:31.068Z","response_time":55,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["code-oss","feh","firefox","fish-shell","fuzzel","hyprland-config","keyd","kitty-config","linux","starship-prompt","tmux-conf","vifmrc","waybar","wlogout","zathurarc"],"created_at":"2024-11-15T17:23:46.843Z","updated_at":"2026-04-20T01:05:05.494Z","avatar_url":"https://github.com/MidHunterX.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"= Hunter OS\n\n// ============================= [ VARIABLES ] ============================= //\n\n// Repository Links\n:gh-user: https://github.com/MidHunterX\n:gh-repo: {gh-user}/Hunter-OS\n:gh-repo-master: {gh-repo}/tree/master\n:gh-nvim: {gh-user}/NvME\n:gh-intention: {gh-user}/Intention\n:gh-expression: {gh-user}/Expression\n:gh-run: {gh-user}/Project-Launcher\n\n// GitHub specific tags\nifdef::env-github[]\n:tip-caption: :bulb:\n:note-caption: :information_source:\n:important-caption: :heavy_exclamation_mark:\n:caution-caption: :fire:\n:warning-caption: :warning:\nendif::[]\n\n// NOTE:\n// * Use subs=attributes+ to enable attributes inside codeblock.\n\n// ========================================================================= //\n\n== 📜 Philosophy\n\n*Terminal Centric and Reliable*: The terminal is the heart of this environment,\nproviding CLI/TUI tools and utilities for efficient workflow tailored to\npersonal preference. Even if the Display Server (central point of failure)\nfails, navigate comfortably in TTY interface without feeling homesick.\n\n*Optimized, and Battery Efficient*: Perfectly engineered to use the most\noptimal amount of system resources, ensuring smooth performance while not\nsacrificing on the amount of features and ability.\n\n*Cohesive Universal Interface with Vim Keybindings*: Keyboard-centric approach,\nwith standardized Vim-style keybindings deeply integrated into every tools,\napps and utilities. This allows to navigate and interact with speed, precision\nand comfort without even thinking about keybindings.\n\n== 💼 Carefully Concocted Custom Configurations\n\nClick the links below for a detailed documentation.\n\n[%header,cols=3*]\n|===\n| Name | Description | Preview\n\n| link:.config/keyd/[🎹 KeyD]\n| Keyboard Layout/Mapping\n|\n\n| link:.config/vifm/[📁 ViFM]\n| File Manager\n| image:.config/vifm/.assets/vifm.jpg[,128,link=.config/vifm/]\n\n| link:{gh-nvim}[📝 NeoVim]\n| TUI Code Editor\n| image:{gh-nvim}/blob/37a9ab0ee56159f744e670831e315ca085a7b218/img/nvim_dashboard.jpg[,128,link={gh-nvim}]\n\n| link:.mozilla/[🦊 FireFox]\n| Web Browser\n| image:.mozilla/assets/firefox.jpg[,128,link=.mozilla/]\n\n| link:.config/fish/[🐟 Fish]\n| Shell\n| image:.config/fish/.assets/fish_lscd.jpg[,128,link=.config/fish/]\n\n| link:.config/tmux/[🍱 Tmux]\n| Terminal Multiplexer\n| image:.config/tmux/.assets/tmux.jpg[,128,link=.config/tmux/]\n\n| link:.config/zathura/[📄 Zathura]\n| PDF Frontend\n| image:.config/zathura/.assets/zathura.jpg[,128,link=.config/zathura/]\n\n| link:.config/cava/[📊 Cava]\n| Music Visualizer\n| image:.config/cava/.assets/cava.jpg[,128,link=.config/cava/]\n\n| link:.config/feh/[🌄 Feh]\n| Image Viewer\n| image:.config/feh/.assets/feh.jpg[,128,link=.config/feh/]\n\n| link:.config/fuzzel/[📜 Fuzzel]\n| App Launcher\n| image:.config/fuzzel/.assets/fuzzel.jpg[,128,link=.config/fuzzel/]\n\n| link:.config/hypr/[💧 Hyprland]\n| Wayland Compositor\n| image:.config/hypr/.assets/hypr.jpg[,128,link=.config/hypr/]\n\n| link:.config/kitty/[🐱 Kitty]\n| Terminal Emulator\n| image:.config/kitty/.assets/kitty_nvim.jpg[,128,link=.config/kitty/]\n\n| link:.config/lazygit/[😴 LazyGit]\n| TUI Git Frontend\n| image:.config/lazygit/.assets/lazygit.jpg[,128,link=.config/lazygit/]\n\n| link:.config/mpv/[🎬 Mpv]\n| Video Player\n| image:.config/mpv/.assets/mpv.jpg[,128,link=.config/mpv/]\n\n| link:Mid_Hunter/scripts/[⚙️ Scripts]\n| Scripts\n| image:Mid_Hunter/scripts/.assets/script_fetch.jpg[,128,link=Mid_Hunter/scripts/]\n\n| link:.config/starship/[🚀 Starship]\n| Shell Prompt Engine\n| image:.config/starship/.assets/prompt.png[,128,link=.config/starship/]\n\n| link:.config/waybar/[🍫 WayBar]\n| Status Bar\n| image:.config/waybar/.assets/waybar.png[,128,link=.config/waybar/]\n\n| link:.config/wlogout/[🌳 Wlogout]\n| Logout Menu\n| image:.config/wlogout/.assets/wlogout.jpg[,128,link=.config/wlogout/]\n|===\n\n== 🍇 Directed Diagram Denoting Documented Dependencies\n\n|===\n| 🔴 | Required Dependency\n| 🟡 | Optional Dependency\n|===\n\n[source,mermaid,subs=attributes+]\n----\nflowchart LR\n\nsubgraph Orchestration Layer\n  hypr(\u003ca href='{gh-repo-master}/.config/hypr'\u003eHyprland\u003c/a\u003e)\n  run(\u003ca href='{gh-run}'\u003eProject Launcher\u003c/a\u003e)\n  expression(\u003ca href='{gh-expression}'\u003eExpression\u003c/a\u003e)\n  kitty(\u003ca href='{gh-repo-master}/.config/kitty/'\u003eKitty\u003c/a\u003e)\nend\n\nswww{{🔴 swww}}\nvifm(\u003ca href='{gh-repo-master}/.config/vifm'\u003eViFM\u003c/a\u003e)\nls{{🟡 lsd / ls}}\ncat{{🟡 bat / cat}}\nfind{{🟡 fd / find}}\ngrep{{🟡 ripgrep / grep}}\nexif{{🟡 exiv2}}\ntmux{{🟡 tmux}}\nsyntax{{🟡 highlight}}\nnvim(\u003ca href='{gh-nvim}'\u003eNeoVim\u003c/a\u003e)\nfish(\u003ca href='{gh-repo-master}/.config/fish/'\u003eFish Shell\u003c/a\u003e)\ncd{{🟡 zoxide / cd}}\nvolume{{🔴 pamixer}}\nbrillo{{🔴 brillo}}\nwaybar(\u003ca href='{gh-repo-master}/.config/waybar/'\u003eWaybar\u003c/a\u003e)\nnf(Nerd Font)\nfzf{{🔴 fzf}}\ngit{{🟡 git / lazygit}}\nprompt(\u003ca href='{gh-repo-master}/.config/starship/'\u003eStarship Prompt\u003c/a\u003e)\n\nhypr --\u003e kitty\nhypr --startup--\u003e expression --\u003e swww --wayland--\u003e hypr\nhypr --startup--\u003e swww \u0026 waybar\nhypr --textinput--\u003e nvim\nwaybar --submap--\u003e hypr\nrun --\u003e tmux \u0026 nvim\n\nkitty --scrollback pager--\u003e nvim\nkitty --default shell--\u003e fish\nfish --\u003e ls \u0026 vifm \u0026 cd \u0026 git \u0026 cat \u0026 find \u0026 prompt\ncd --\u003e ls --\u003e nf\nprompt \u0026 fish --$VIFM_MODE--\u003e vifm\nfish --$editor--\u003e nvim\nvifm --\u003e ls \u0026 nf\nvifm --exif data--\u003e exif\nvifm --syntax highlighting--\u003e syntax\nvifm --file search--\u003e fzf \u0026 find\nnvim --vifm.vim--\u003e vifm\nvifm --$editor--\u003e nvim\nnvim --\u003e nf \u0026 find \u0026 git \u0026 grep\nnvim --graphics_protocol--\u003e kitty\nwaybar --\u003e volume \u0026 brillo \u0026 nf\n----\n\n.🎨 Dynamic UI Coloring Diagram\n[%collapsible]\n====\n[discrete]\n=== 🎨 Dynamic UI Coloring Diagram\n\n`matugen` is used to generate dynamic Material You colors for applications.\n\nIMPORTANT: Color generators like matugen are so pervasive, it becomes a dependency for app config colors unless there's a way to set fallback colors on app configs. This makes the configs non-plug-n-play for other systems until all variables are replaced with hex colorcodes. The main focus of this section is to make every configs independent (matugen Optional) and plug-n-play friendly again.\n\n|===\n| 🟢 | matugen Optional (Fallback Colors)     | [11/16]\n| 🟡 | matugen Optional (Fallback to Pink)    | [02/16]\n| 🔴 | matugen Required (No Fallback Colors)  | [03/16]\n|===\n\n[source,mermaid,subs=attributes+]\n----\ngraph TD\nexpression(\u003ca href='{gh-expression}'\u003eExpression\u003c/a\u003e)\nvifm(\u003ca href='{gh-repo-master}/.config/vifm'\u003eViFM\u003c/a\u003e)\niris(\u003ca href='{gh-repo-master}/automata'\u003eIris\u003c/a\u003e)\n\n%% ========================== Sourcing Techniques ========================== %%\n\nconditional_sourcing{{Conditional Sourcing}}\noverride_sourcing{{Override Sourcing}}\ndefault_fallback{{Fallback Defaults}}\nansi{{\u003ca href='{gh-repo-master}/.config/matugen/templates/kitty.conf'\u003eANSI Convention\u003c/a\u003e}}\nsettings{{UI Settings}}\n\n%% ======================== Implementation Progress ======================== %%\n\nexpression \u0026 vifm --\u003e iris\niris --\u003e gen[matugen] \u0026 hypr[🟢 hyprland]\ngen --\u003e hypr --colors/2_colors.conf--\u003e override_sourcing\ngen --\u003e notif[🟢 dunst] --dunstrc.d/99-colors.conf--\u003e override_sourcing\ngen --\u003e kitty[🟢 kitty] --colors/colors.conf--\u003e override_sourcing\ngen --\u003e tmux[🟢 tmux] --colors.conf--\u003e conditional_sourcing\ngen --\u003e qml[🟢 QuickShell] --colors.json--\u003e conditional_sourcing\ngen --\u003e vifm[🟢 vifm] --colors/colors.vifm--\u003e conditional_sourcing\ngen --\u003e nvim[🟢 nvim] --colors/colors.lua--\u003e conditional_sourcing\ngen --\u003e app[🟢 fuzzel] --themes/colors.ini--\u003e default_fallback\ngen --\u003e top[🟢 btop] --themes/colors.theme--\u003e settings\ngen --\u003e app2[🟢 vicinae] --(Plugins UI)--\u003e settings\ngen --\u003e power[🔴 wlogout]\ngen --\u003e waybar[🔴 waybar]\ngen --\u003e vis[🔴 cava]\n\nansi --\u003e kitty\ngit[🟢 lazygit] --\u003e ansi\nfish[🟡 fish] --\u003e ansi\nprompt[🟡 starship] --\u003e ansi\n\n%% ========================================================================= %%\n----\n\n[discrete]\n==== Techniques Used\n\n- **Override Sourcing**: Sourcing the generated file which replaces the pre-existing color variables. Programs which allow to source non-existing files without errors or uses a special directory to source files can do this. This is the most preferred solution as all it takes is just one source command in config.\n- **Conditional Sourcing**: Conditionally source the generated file if it exists. Programs which has well designed DSLs with file operations or has embedded language can do this. This is second most preferred way as changing the DSL syntax can break things and it'll be time consuming if there are many different configs like this.\n- **Default Fallback**: The program have in-built fallback configs which can be used if the generated file doesn't exist.\n- **ANSI Convention**: Using specific 16 color ANSI codes to represent semantic colors. This should only be used as a last resort if all other methods fail. Most likely TUI apps which doesn't provide robust way of configuring colors and especially it uses a simplistic config like yaml or have no config at all but uses 16 colors. Primary colors will revert to pink without a color generator.\n- **UI Settings**: This is the least preferred method and it's a terrible design. Should use in-built UI to set the dynamic theme because the config files are used as a cache instead like btop.\n\n[discrete]\n==== Notes\n\n- Waybar \u0026 Wlogout: There's no way to conditionally source/implement fallback in GTK-CSS. Only way is to copy a generated file initially.\n- cava: No option for theme fallback in config as it is doing an in-built parsing. The least resistant path would be to generate config file directly from matugen.\n\nBoth solutions are non-plug-n-play friendly on their own unless you provide copy of a pre-generated file before running. Therefore use custom made status bar, logout screen etc. with a GUI shell framework like Astal with AGS (`aylurs-gtk-shell-git` Still uses GTK. GTK = lesser flexibility) or QuickShell (uses Qt = better flexibility).\n====\n\n.🌊 Personal Workflow Diagram\n[%collapsible]\n====\n[discrete]\n=== 🌊 Personal Workflow Diagram\n\nThis is my most frequently used workflow out of all other possibilities.\n\n[source,mermaid,subs=attributes+]\n----\ngraph LR\n\n%% ============= Cross Operating System Context Relay Protocol ============= %%\nsubgraph XOSCRP\n  intention(\u003ca href='{gh-intention}'\u003eIntention\u003c/a\u003e)\n  linux(Linux)\n  windows(Windows)\n  grub{\u003ca href='{gh-repo}?tab=readme-ov-file#-grub-bootloader'\u003eGRUB\u003c/a\u003e}\n  keyd{{\u003ca href='{gh-repo-master}/.config/keyd/'\u003eKeyD\u003c/a\u003e}}\nend\n\nintention --\u003e grub --\u003e linux \u0026 windows\nlinux -.SEND.-\u003e intention -.RECV.-\u003e linux \u0026 windows\n\n%% ============================= Core Workflow ============================= %%\nnvim(\u003ca href='{gh-nvim}'\u003eNeoVim\u003c/a\u003e)\nfish(\u003ca href='{gh-repo-master}/.config/fish/'\u003eFish Shell\u003c/a\u003e)\nvifm(\u003ca href='{gh-repo-master}/.config/vifm'\u003eViFM\u003c/a\u003e)\nkitty(\u003ca href='{gh-repo-master}/.config/kitty/'\u003eKitty\u003c/a\u003e)\nhypr(\u003ca href='{gh-repo-master}/.config/hypr'\u003eHyprland\u003c/a\u003e)\nfirefox(\u003ca href='{gh-repo-master}/.mozilla/'\u003eFirefox\u003c/a\u003e)\n\nkeyd --- linux ==Bash Shell==\u003e hypr\n\nsubgraph Development Area\ntmux(\u003ca href='{gh-repo-master}/.config/tmux/'\u003eTMUX\u003c/a\u003e)\nrun(\u003ca href='{gh-run}'\u003eProject Launcher\u003c/a\u003e)\ngit(\u003ca href='{gh-repo-master}/.config/lazygit/'\u003eLazygit\u003c/a\u003e)\nend\n\nfish ==Edit Command (alt+e)==\u003e nvim\nnvim ==Nested Terminal (alt+/)==\u003e fish\nvifm ==Edit Files (i/l)==\u003e nvim\nnvim ==Open Files (leader pf)==\u003e vifm\nvifm ==cd Temporarily (s)==\u003e fish\nfish ==(vm/vc)==\u003e vifm\n\nhypr_exec{{Execute Mode}}\nhypr --(Meta+e)--\u003e hypr_exec\n\nhypr_exec --(k)--\u003e kitty\nhypr_exec --Nvim TextInput (n)--\u003e nvim\nkitty --Scrollback History(alt+n)--\u003e nvim\n\n%% ========================== Development Workflow ========================== %%\nfish --(run)--- run --\u003e tmux --\u003e nvim \u0026 fish\ngit --Edit Commit (ctrl+o e)--\u003e nvim\nnvim --Git UI (leader gc)--\u003egit\n\n%% ============================= Jump Workflow ============================= %%\ncursor{{Cursor Target}}\n\nhypr_cur{{Cursor Mode}}\nhypr -.Cursor Mode (Meta+c).-\u003e hypr_cur\nhypr_cur \u003c-.Pixel Jump (f).-\u003e cursor\n\nhypr_col{{ColorPicker Mode}}\nhypr_cur -.(c).-\u003e hypr_col\nhypr_col -.Select Pixel Color (i).-\u003e cursor\nhypr_col -.go back (esc).-\u003e hypr_cur\n\nnvim -.Immediate Jump (f).-\u003e cursor\nnvim -.Local Jump (s).-\u003e cursor\nnvim -.Global Jump (leader sf).-\u003e cursor\nfirefox -.Element Focus (f).-\u003e cursor\nfirefox -.TextInput Focus (gi).-\u003e cursor\n\n%% ======================== Entertainment Workflow ======================== %%\nhypr_exec --(f)--\u003e firefox\nfirefox --Global Video (ctrl+shift+})--\u003e hypr\n----\n====\n\n== 📦 Preeminently Preferred Primary Packages\n\nClick the following categories to toggle the list of packages in that category.\n\n.🐧 Linux System\n[%collapsible]\n====\n[discrete]\n=== 🐧 Linux System\n[%header]\n|===\n| Package Name   | Description                                     | Src\n| base           | Base Arch Installation                          | pacman\n| base-devel     | Basic tools to build Arch Linux packages        | pacman\n| linux          | The Linux kernel and modules                    | pacman\n| linux-firmware | Firmware files for Linux                        | pacman\n| linux-headers  | Headers and scripts for building modules        | pacman\n| pacman-contrib | Scripts and tools for pacman systems (paccache) | pacman\n| systemctl-tui  | TUI for systemd services and their logs         | pacman\n|===\n\n[discrete]\n==== Yay - Yet Another Yogurt AUR Helper\n[source,bash]\n----\ngit clone https://aur.archlinux.org/yay-bin.git\ncd yay-bin\nmakepkg -si\n----\n====\n\n.👢 Boot\n[%collapsible]\n====\n[discrete]\n=== 👢 Boot\n[%header]\n|===\n| Package Name    | Description                             | Src\n| dosfstools      | DOS Filesystem Utilities                | pacman\n| efibootmgr      | Utility to modify the EFI Boot Manager  | pacman\n| grub            | GNU GRand Unified Bootloader            | pacman\n| ntfs-3g         | NTFS filesystem driver and utilities    | pacman\n| os-prober       | Utility to detect other OSes            | pacman\n| plymouth        | Graphical boot splash screen            | pacman\n| cantarell-fonts | Humanist sans serif font (for plymouth) | pacman\n|===\n====\n\n.💾 Hardware\n[%collapsible]\n====\n[discrete]\n=== 💾 Hardware\n[%header]\n|===\n| Package Name | Description                                    | Src\n| acpi         | Client for battery, power and thermal readings | pacman\n| acpi_call    | Kernel module call ACPI (/proc/acpi/call)      | pacman\n| acpid        | Daemon for ACPI power management events        | pacman\n| amd-ucode    | Microcode update image for AMD CPUs            | pacman\n| amdvlk       | AMD's standalone Vulkan driver                 | pacman\n| mesa-utils   | Essential Utilities for Open-source OpenGL     | pacman\n|===\n====\n\n.📦 Development\n[%collapsible]\n====\n[discrete]\n=== 📦 Development\n[%header]\n|===\n| Package Name      | Description                       | Src\n| git               | Version control system            | pacman\n| lazygit           | TUI for Git                       | pacman\n| git-delta         | Git Syntax Highlighted Pager      | pacman\n| meson             | Nice build system                 | pacman\n| nodejs            | JavaScript Runtime Env            | pacman\n| npm               | NodeJS package manager            | pacman\n| python            | Python Interpreter                | pacman\n| python-uv         | Rust python Package Installer     | pacman\n| sqlitebrowser     | DB Browser for SQLite             | pacman\n| jdk-openjdk       | Java Development Kit              | pacman\n| perl-term-readkey | Read Keystrokes from the Terminal | pacman\n| perl-yaml-libyaml | YAML Parser for Perl              | pacman\n|===\n\nNOTE: Before installing jdk-openjdk, make sure to yeet out the pre-installed java package.\n====\n\n.⚙️ Utilities\n[%collapsible]\n====\n[discrete]\n=== ⚙️ Utilities\n[%header]\n|===\n| Package Name      | Description                           | Src\n| sudo              | Run commands as root                  | pacman\n| bat               | cat with syntax highlighting          | pacman\n| zoxide            | Better alternative to cd command      | pacman\n| dust              | Disk usage analyzer (static)          | pacman\n| ncdu              | Disk space cleaner (interactive)      | pacman\n| exiv2             | Image EXIF Manipulation Tool          | pacman\n| fd                | Faster alternative to find command    | pacman\n| ffmpegthumbnailer | Video Thumbnailer                     | pacman\n| fzf               | Fuzzy Finder Utility                  | pacman\n| highlight         | Syntax Highlighter                    | pacman\n| jq                | CLI JSON Processor                    | pacman\n| libqalculate      | CLI NLP Calculator                    | pacman\n| lsd               | ls with Nerd Font support             | pacman\n| man-db            | Utility for reading man pages         | pacman\n| poppler           | PDF Rendering Engine                  | pacman\n| ripgrep           | Text Search Tool                      | pacman\n| xsv               | CLI CSV Processor                     | pacman\n| fastfetch         | Fetch System Information              | pacman\n| localsend-bin     | Air-drop like Local File Transfer     | aur\n| onefetch          | Fetch Git Project Information         | aur\n| brillo            | Brightness based on human perception  | aur\n| tgpt              | CLI AI Chat without API keys          | aur\n| wl-kbptr          | Cursor Modal Keyboard Driven Pointer  | aur\n| wlrctl            | Cursor Control Utility                | aur\n| voxtype-bin       | Voice-to-text Tool                    | aur\n|===\n\nNOTE: To install Voice Typing Feature, download whisper model with `voxtype setup --download`. Run daemon with `voxtype`. Then use `ScrollLock` as push-to-talk.\n====\n\n.📷 Audio, Video and Image\n[%collapsible]\n====\n[discrete]\n=== 📢 Audio\n[%header]\n|===\n| Package Name    | Description                                     | Src\n| pamixer         | CLI Volume Control Tool                         | pacman\n| pavucontrol     | GUI Volume Control Tool                         | pacman\n| pipewire        | Audio and Video streaming server                | pacman\n| pipewire-pulse  | A/V router \u0026 processor - PulseAudio replacement | pacman\n| wireplumber     | PipeWire session/policy manager - wpctl         | pacman\n| easyeffects     | Loudness Equalization                           | pacman\n| lsp-plugins-lv2 | easyeffects: equalizer, compressor, loudness    | pacman\n| calf            | easyeffects: limiter, exciter, bass enhancer    | pacman\n| cava            | Cross Platform Audio Visualizer                 | aur\n|===\n\n[discrete]\n==== Fix Low Volume Dialogue + Blown Out Sound FX in Movies\nInstall `easyeffects`, `lsp-plugins-lv2` and `calf`. Open `easyeffects` and add the effect *\"Autogain\"*. It will automatically detect and calibrate volume gain in real-time. After this, just open up `easyeffects` whenever you are watching any movies.\n\n[discrete]\n=== 🎬 Video\n[%header]\n|===\n| Package Name | Description                                        | Src\n| ffmpeg       | Super advanced library for handling Audio / Video  | pacman\n| handbrake    | GUI Video Transcoder                               | pacman\n| mpv          | Video Player - Minimal and integrates well with WM | pacman\n| yt-dlp       | Video Downloader                                   | pacman\n|===\n\n[discrete]\n=== 🌄 Image\n[%header]\n|===\n| Package Name | Description                          | Src\n| feh          | Image Viewer - Super light weight    | pacman\n| nomacs       | Image Viewer - Touch screen friendly | aur\n|===\n====\n\n.🌐 Network and Security\n[%collapsible]\n====\n[discrete]\n=== 🌐 Network and Security\n[%header]\n|===\n| Package Name              | Description                        | Src\n| android-file-transfer     | Mount Android Device               | pacman\n| blueman                   | GUI Bluetooth Manager              | pacman\n| bluez                     | Bluetooth Protocol Daemon          | pacman\n| bluez-utils               | Bluetooth Utilities - bluetoothctl | pacman\n| curlftpfs                 | FUSE mount ftp sites               | pacman\n| termscp                   | TUI client for SCP, FTP, Kube, S3  | pacman\n| dhcpcd                    | DHCP Client Daemon                 | pacman\n| firefox                   | Internet Browser                   | pacman\n| keepassxc                 | Password Manager                   | pacman\n| networkmanager            | CLI Network Manager - nmcli, nmtui | pacman\n| openssh                   | SSH protocol implementation        | pacman\n| torbrowser-launcher       | Anonnymous Onion Browser           | pacman\n| transmission-gtk          | GUI Torrent Client                 | pacman\n| wpa_supplicant            | WLAN Daemon                        | pacman\n| speedometer               | TUI Network Speed Monitor          | aur\n|===\n\n[discrete]\n==== FUSE Mounted FTP File Transfer Issue\nWhen using `curlftpfs` to FUSE mount and copy files over FTP, there's a common issue with not being able to copy over file names/paths containing spaces because of how the FTP protocol and the FUSE layer handle escaping (files should be URL-encoded). As a workaround you can:\n* Just rename the file before copying\n* Use `termscp` but you'll have to use their TUI interface instead of direct filesystem access.\n\n====\n\n.🌲 Desktop\n[%collapsible]\n====\n[discrete]\n=== 🌲 Desktop\n[%header]\n|===\n| Package Name                | Description                  | Src\n| libnotify                   | Notification library         | pacman\n| matugen                     | Material You Color Generator | pacman\n| dunst                       | Notification Daemon          | pacman\n| fuzzel                      | Wayland App Launcher         | pacman\n| hyprland                    | Wayland compositor           | pacman\n| hyprpicker                  | Hypr Color Picker            | pacman\n| xdg-desktop-portal-hyprland | Hypr Desktop Portal          | pacman\n| swayidle                    | Wayland Idle Manager         | pacman\n| swayosd                     | On Screen Display Window     | pacman\n| waybar                      | Wayland Status Bar           | pacman\n| wl-clipboard                | wl-copy + wl-paste           | pacman\n| wtype                       | Wayland Keystrokes Emulation | pacman\n| quickshell-git              | Qt GUI Shell                 | aur\n| vicinae-bin                 | Raycast Launcher alt         | aur\n| wf-recorder                 | Wayland Screen Recorder      | aur\n| keyd                        | Key Remapping Daemon         | aur\n| swww                        | Wayland Wallpaper Daemon     | aur\n| wlogout                     | Logout Screen                | aur\n| clock-tui                   | TUI Clock (tclock)           | aur\n|===\n\nNOTE: wl-screenrec might be optimized, fast, efficient and Lightweight but it doesn't work in battery saver mode unlike wf-recorder.\n\nNOTE: Firefox supports the Wayland inhibit protocol, but it attempts to use the DBus interfaces first. It never reaches its Wayland inhibit-idle protocol fallback because the portal returns success. See issue https://github.com/flatpak/xdg-desktop-portal-gtk/issues/465[#465] created at 2024. `sway-audio-idle-inhibit-git` Prevents swayidle/hypridle from sleeping while any application is outputting or receiving audio but has limitations.\n\nWARNING: xdg-desktop-portal-hyprland enables features like screen sharing. There is a bug when the display is rotated, screen sharing shows it as default landscape mode. This is because `SPA_META_VideoTransform` is not present in the buffer metadata for **PipeWire streams**. This is what many apps, including browsers use to determine if and how the captured image needs to be rotated and Browser WebRTC doesn't support the SPA_META_VideoTransform metadata as well. This issue can be tracked here: https://github.com/hyprwm/xdg-desktop-portal-hyprland/issues/292[issue 292] and in WebRTC: https://issues.webrtc.org/issues/42226058[issue 42226058]. Have to wait (most likely a decade or two) until WebRTC fixes it.\n\n====\n\n.💻 2-in-1 Laptop Specific\n[%collapsible]\n====\n[discrete]\n=== 💻 2-in-1 Laptop Specific\n[%header]\n|===\n| Package Name             | Description                            | Src\n| iio-sensor-proxy         | Accelerometer Sensor Driver            | pacman\n| tlp                      | Laptop Power Optimization              | pacman\n| auto-cpufreq             | Dynamic CPU Clock Cycle Frequency      | aur\n| detect-tablet-mode-git   | Tablet mode scripts - watch_tablet     | aur\n| iio-hyprland-git         | Set Hyprland Orientation automatically | aur\n| yoga-usage-mode-dkms-git | ACPI driver for Tablet mode detection  | aur\n|===\n====\n\n.📄 Document viewers and editors\n[%collapsible]\n====\n[discrete]\n=== 📄 Document viewers and editors\n[%header]\n|===\n| Package Name        | Description                 | Src\n| neovim              | Text Editor                 | pacman\n| obsidian            | MarkDown Note taker         | pacman\n| pdfarranger         | PDF Page Arranger           | pacman\n| xournalpp           | PDF Annotation / Drawing    | pacman\n| zathura             | PDF Graphical Viewer        | pacman\n| zathura-pdf-poppler | Zathura Poppler Backend     | pacman\n|===\n====\n\n.📁 Archivers and File Manager\n[%collapsible]\n====\n[discrete]\n=== 📁 Archivers and File Manager\n[%header]\n|===\n| Package Name | Description          | Src\n| fuse-zip     | FUSE mount zip files | pacman\n| nemo         | GUI File Manager     | pacman\n| p7zip        | CLI 7 Zip Archiver   | pacman\n| unzip        | Unzip .zip archives  | pacman\n| vifm         | TUI File Manager     | pacman\n| docx2txt     | View .docx files     | pacman\n| odt2txt      | View .odt files      | pacman\n| rar2fs       | FUSE mount rar files | aur\n|===\n====\n\n.📊 System Monitors and Managers\n[%collapsible]\n====\n[discrete]\n=== 📊 System Monitors and Managers\n[%header]\n|===\n| Package Name | Description           | Src\n| nvtop        | GPU process monitor   | pacman\n| powertop     | Battery usage monitor | pacman\n| htim         | CPU process monitor   | aur\n|===\n====\n\n.🖥️ Terminal\n[%collapsible]\n====\n[discrete]\n=== 🖥️ Terminal\n[%header]\n|===\n| Package Name | Description                        | Src\n| fish         | Modern Shell used as a Commandline | pacman\n| kitty        | best of all terminals out there    | pacman\n| starship     | Cross Platform Prompt              | pacman\n| tmux         | Terminal Multiplexer               | pacman\n|===\n====\n\n.🖋️ Fonts\n[%collapsible]\n====\n[discrete]\n=== 🖋️ Fonts\n[%header]\n|===\n| Package Name            | Description                     | Src\n| fontconfig              | Font Configuration              | pacman\n| noto-fonts              | Google Font for Unicode Support | pacman\n| noto-fonts-cjk          | Google Font for Unicode Support | pacman\n| ttf-jetbrains-mono-nerd | Nerd Font Icons patch           | pacman\n|===\n\n[discrete]\n=== 😀 Emojis\nWith no emoji fonts installed, all of the emojis should look like boxes.\nInstall any one of the following to use systemwide:\n\n[%header]\n|===\n| Package Name     | Description         | Src\n| noto-fonts-emoji | Emoji by Google     | pacman\n| ttf-joypixels    | High quality emojis | pacman\n| ttf-twemoji      | Emoji by Twitter    | yay\n|===\n\n* noto-fonts-emoji emojis are easily distinguishable from each other when font size is small; like on terminals. Uses COLRv1.\n* ttf-twemoji is perfect for bigger font size. Perfect for Web Browsers.\n* ttf-joypixels has that premium feel. Search it up.\n\nMy Recommendation: Install `ttf-joypixels` and `noto-fonts-emoji`\n\n* On every GUI apps, high quality ttf-joypixels is used.\n* On Kitty terminal, it will fallback to using noto-fonts-emoji.\n\n.To make ttf-twemoji take precedence over noto-fonts-emoji on GUI:\n[source,bash]\n----\nsudo ln -s /usr/share/fontconfig/conf.avail/75-twemoji.conf /etc/fonts/conf.d/\n----\n====\n\n.🥃 Screenshot\n[%collapsible]\n====\n[discrete]\n=== 🥃 Screenshot\n[%header]\n|===\n| Package Name       | Description                    | Src\n| grim               | Screenshot Utility for Wayland | pacman\n| slurp              | Region Selector for Wayland    | pacman\n| tesseract          | OCR Utility                    | pacman\n| tesseract-data-eng | Tesseract OCR Data English     | pacman\n|===\n====\n\n== 🛎️ Sustained System Services\n\n[%header]\n|===\n| Service Name           | Description\n| dhcpcd.service         | DHCP/ IPv4LL/ IPv6RA/ DHCPv6 client\n| NetworkManager.service | Network connection manager\n\n| {gh-repo-master}/.config/keyd/[keyd.service]\n| A key remapping daemon for linux\n\n| swayosd-libinput-backend.service\n| Libinput daemon for sway OSD server\n|===\n\n== 💽 Core Computational Configurations\n\n=== 👢 GRUB Bootloader\nimage:.config/GRUB/.assets/cyberexs.jpg[]\n[source,bash]\n----\nsudo cp -R ~/.config/GRUB/CyberEXS /boot/grub/themes\nsudoedit /etc/default/grub\nsudo grub-mkconfig -o /boot/grub/grub.cfg\n----\n.📝 /etc/default/grub [add]\n[source,bash]\n----\nGRUB_THEME=/boot/grub/themes/CyberEXS/theme.txt\n----\n.📝 /etc/default/grub [replace]\n[source,bash]\n----\nGRUB_TIMEOUT=1\n# Setting \"splash\" for boot splash screen with plymouth\nGRUB_CMDLINE_LINUX_DEFAULT=\"loglevel=3 quiet splash\"\n# Read other EFI with os-prober\nGRUB_DISABLE_OS_PROBER=false\n----\n\n=== 🫟 Plymouth Splash Screen\nimage:./.config/PLYMOUTH/.assets/cuts_alt.gif[]\n[source,bash]\n----\nsudo cp -R ~/.config/PLYMOUTH/cuts_alt /usr/share/plymouth/themes\nsudo plymouth-set-default-theme -R cuts_alt\n----\n\nNOTE: The splash screen included here is one from the 80+ plymouth splash screens from https://github.com/adi1090x/plymouth-themes[adi1090x/plymouth-themes].\n\n.👥 Usergroups\n[%collapsible]\n====\n[discrete]\n=== 👥 Usergroups\n\nList all available groups that you can assign:\n[source,bash]\n----\ncat /etc/group\n----\n\n[source,bash]\n----\nsudo usermod -G wheel,audio,video,power,input,storage midhunter\n----\n[%header]\n|===\n| Group   | Purpose\n| wheel   | Grants sudo privileges\n| audio   | Access to audio devices\n| video   | Access to GPU and hardware acceleration.\n| power   | Control power states (suspend, reboot, etc.)\n| input   | Access to input devices\n| storage | Raw access to storage devices\n|===\n\nVerify currently active groups:\n[source,bash]\n----\ngroups midhunter\n----\n====\n\n.🎹 KeyD Setup\n[%collapsible]\n====\n[discrete]\n=== 🎹 KeyD Setup\n[source,bash]\n----\nsudo ln -s ~/.config/keyd/default.conf /etc/keyd/default.conf\nsystemctl enable keyd.service\nsystemctl start keyd.service\n----\n====\n\n.🔑 Sudoers\n[%collapsible]\n====\n[discrete]\n=== 🔑 Sudoers\n[source,bash]\n----\nsudoedit /etc/sudoers\n----\n.📝 /etc/sudoers [add]\n[source,bash]\n----\n# Sudo Stuff\n# Defaults timestamp_type=global      # Activate Sudo across terminals (not recommended)\nDefaults timestamp_timeout = 10     # Activate Sudo for 10 minutes\nDefaults passwd_timeout = 5         # Sudo prompt timeout after 5 minutes\n# Login Stuff\nDefaults insults                    # Incorrect Password Easteregg\nDefaults pwfeedback                 # Visible Password Feedback\n----\n====\n\n.🚪 Skip Username\n[%collapsible]\n====\n[discrete]\n=== 🚪 Skip Username\n[source,bash]\n----\nsudo mkdir -p /etc/systemd/system/getty@tty1.service.d/\nsudo touch /etc/systemd/system/getty@tty1.service.d/skip-username.conf\nsudoedit /etc/systemd/system/getty@tty1.service.d/skip-username.conf\n----\n.📝 /etc/systemd/system/getty@tty1.service.d/skip-username.conf [add]\n[source,bash]\n----\n[Service]\nExecStart=\nExecStart=-/sbin/agetty -o '-p -- midhunter' --noclear --skip-login - $TERM\n----\n\nor use this line if you want to **auto login** to a specific user on TTY1\n\n.📝 /etc/systemd/system/getty@tty1.service.d/skip-username.conf [add]\n[source,bash]\n----\n[Service]\nExecStart=\nExecStart=-/sbin/agetty --noissue --autologin 'midhunter' - $TERM\n----\n====\n\n.🍬 Colorful Pacman\n[%collapsible]\n====\n[discrete]\n=== 🍬 Colorful Pacman\n[source,bash]\n----\nsudoedit /etc/pacman.conf\n----\n.📝 /etc/pacman.conf [add]\n[source,bash]\n----\nParallelDownloads = 5\nColor\nILoveCandy\n----\n====\n\n.🚫 Rage against the Censorship\n[%collapsible]\n====\n[discrete]\n=== 🚫 Rage against the Censorship\n\n*dhcpcd* brings up the networking interface (wlp2s0/eth0), assigns IP and other host configurations.\n\n*NetworkManager* gives tools like nmcli and nmtui to connect to WiFi and manage network related tasks more easily.\n\nBoth *dhcpcd* and *NetworkManager* have the ability to configure DNS nameservers from your *ISP* in `/etc/resolv.conf`.\nSince we are going to use our own custom DNS config, we need to tell them both to stop auto-generating DNS configurations.\n\nTell dhcpcd:\n\n[source,bash]\n----\nsudoedit /etc/dhcpcd.conf\nsudo systemctl restart dhcpcd\n----\n\n.📝 /etc/dhcpcd.conf [append]\n[source,bash]\n----\nnohook resolv.conf\n----\n\nTell NetworkManager:\n\n[source,bash]\n----\nsudoedit /etc/NetworkManager/conf.d/dns.conf\nsudo systemctl restart NetworkManager\n----\n\n.📝 /etc/NetworkManager/conf.d/dns.conf\n[source,bash]\n----\n[main]\ndns=none\n----\n\nNow, set all the DNS nameservers you want to use instead.\n\n[source,bash]\n----\nsudoedit /etc/resolv.conf\n----\n\n.📝 /etc/resolv.conf\n[source,bash]\n----\n# Custom static DNS configuration\nnameserver 1.1.1.1     # Cloudflare\nnameserver 1.0.0.1     # Cloudflare secondary\nnameserver 8.8.8.8     # Google\nnameserver 8.8.4.4     # Google secondary\n----\n\nNOTE: systemd-resolved can also set DNS config but since we are not enabling that service, it will not do anything.\n====\n\n== ⚗️ Empathic Environment Exploration\n\nExploring reduction of Cognitive Load by Intent based context switching, Calm\ntechnology inspired ambient nudging, Automation and Proactive Computing.\n\n[discrete]\n.Core Philosophies\n- Computers and tools should understand context, intent and work for humans.\n- Environment should support cognitive flow, not disrupt or redirect it.\n- Interactions should be reproducible and logically consistent to create a mental model that will be transferred to human muscle memory so that the interface disappears over time and only intent exists.\n\nlink:{gh-run}[Run]: Automating project initialization and environment setup.\nHelps to maintain cognitive context of task without distracting yourself from\nmanual setup. `EF.TaskInitiation`\n\nlink:{gh-expression}[Expression]: Expressing a non-intrusive ambient\nnotification of life events and schedules. Know time schedule without knowing\nthe time. Useful for humans with low interoception who works on computers all\nday. `#Hidden_UI: Wallpaper as an indicator of hours`\n\nlink:{gh-intention}[Intention]: An implementation of Proactive computing where\nyou simply state your intent and let your computer change and modify its\nenvironment to adapt to your intention. Abstracts away Operating Systems to use\nit as specialized environment for a specific intent. `EF.TaskInitiation`\n\nlink:automata/stasis[Auto Idle]: The device will shutdown itself when it's left\nunattended for a long time at sleeping hours but if it's working hours, the\ndevice will suspend instead to save power. So, just go to sleep if you are\ntired and let the computer do the powering off for you.\n\nlink:automata/iris[Adaptive Window Contrast]: An adaptive\ninterface design solution for UI contrast issues with transparent windows. It\nmakes the window text readable against both light and dark wallpapers by\ndetecting the brightness of the Wallpaper and adjusting the perceived\ntransparency of the window (via blur brightness + contrast).\n\n.`Fig: Window brightness (perceived) auto adapted to comfortable levels across wallpapers with varying brightness`\nimage:automata/.assets/auto_adaptation.jpg[link=automata/iris/]\n\n= Personal Notes\n\n.🗒️ Partition Proportions\n[%collapsible]\n====\n[discrete]\n== 🗒️ Partition Proportions\n[%header]\n|===\n| Partition   | Recommended Size | Max Used\n| /           | \u003e 50G            | 45G\n| /boot       | = 256M           | 230M\n| /tmp (swap) | = 4G             | 200M\n| /home       | \u003e 128G           | 40G\n|===\n\n[discrete]\n=== Dynamic Resizing\n\nUse BTRFS to create a single logical volume and make the partitions into\nlogical sub-volumes. No more unmounting, no fsck, no live USB to resize\npartitions.\n====\n\n.🤫 SSH Work-Life Separation (Multiple GitHub Accounts)\n[%collapsible]\n====\n[discrete]\n== 🤫 SSH Work-Life Separation\n\nCreate separate SSH keys for separate stuff.\n\n[source,bash]\n----\nssh-keygen -t ed25519 -f ~/.ssh/id_ed25519          # Personal Key\nssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_company  # Work Key\n----\n\n.📝 $HOME/.ssh/config\n[source,config]\n----\nHost github.com\n  IdentityFile ~/.ssh/id_ed25519\n  IdentitiesOnly yes\n\nHost github-company\n  IdentityFile ~/.ssh/id_ed25519_company\n  IdentitiesOnly yes\n----\n\n.📝 $HOME/.gitconfig-company\n[source,config]\n----\n[url \"git@github-company:\"]\n  insteadOf = git@github.com:\n  insteadOf = https://github.com/\n----\n\n.📝 $HOME/.gitconfig\n[source,config]\n----\n[includeIf \"gitdir:~/projects/work/\"]\n  path = ~/.gitconfig-company\n----\n\n- `~/projects/personal/` → personal account\n- `~/projects/work/` → work account\n\nNow you just clone normally. Git and SSH handle the rest. No more manual switching, no more mistakes.\n====\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmidhunterx%2Fhunter-os","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmidhunterx%2Fhunter-os","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmidhunterx%2Fhunter-os/lists"}