commit a07bd5fd9b087008f1e8b748a9e60d0a40a098bd Author: foxora Date: Thu Feb 12 18:53:24 2026 +0000 init diff --git a/README.md b/README.md new file mode 100644 index 0000000..36d887e --- /dev/null +++ b/README.md @@ -0,0 +1,83 @@ +## My NixOS Flake +### Philosophy +> [!TODO] My philosophy has kinda changed since the beginning + +### Repo Structure +Modules are organised into groups (ie "Core"), from here a module is structured as either: +1. a single `.nix` file (ie bluetooth.nix). I do this when I won't implement an alternative +2. a directory (ie `sound`) containing a set of alternative implementations and a `default.nix` +that simply imports one of the implementations. For the `sound` example I currently have it structured +to default to `pipewire.nix`. I haven't made alternatives yet but the idea is that it is HIGHLY likely +I do in future. + +### Security Considerations +###### Hashing +For services where password hashing is done infrequently (ie my forgejo instance with signups disabled) +use argon2 (argon2id) with default `argon2$2$65536$8$50` (typically). Otherwise bcrypt is preferred. + +### TODO +There are a lot of commented `# TODO: ...` items in this repository. +All (most) of my commented directives can be found via this pattern: +```sh +grep -rnE '^\s*(//|#)\s*[A-Z]*:\s*.+$' --exclude-dir=.git 2>/dev/null +``` + +### Random Explanation of Fonts +There are four types of fonts (to my knowledge at least): +1. serif (funny squigles / small elegant strokes included) +2. sans-serif (meaning "without serifs") +3. monospace (all glyphs are of a uniform size) +4. emoji (cute lil faces) + +Fun fact: on Android, the emojis you are seeing are part of the noto-emoji font :) + +For finding a font for programming I highly recommend trying https://www.codingfont.com/ + + +### Links +#### Inspiration +##### Explaining my Vision with r/unixporn posts +I want the side panel from https://www.reddit.com/r/unixporn/comments/12wpvyf/hyprland_eww_is_all_i_need/ +but not the colour scheme and I'm 50/50 on the bar being on th eleft side lol. Also I love the volume bar on the right! + +https://www.reddit.com/r/unixporn/comments/12uy6q6/hyprland_first_time_trying_a_wm_ended_up/ +I love love love their rofi theme, everything else is eh (except the background switching is cool) + +https://www.reddit.com/r/unixporn/comments/1avnfjn/hyprland_animations_theme_generation_settings/ +I love their settings apps + +https://www.reddit.com/r/unixporn/comments/u7vgej/desktop_endeavouros_gnome_42/ +I like to imagine they have the ability to have nothing but apps on their screen (like a do not disturb / focus mode) + +https://www.reddit.com/r/unixporn/comments/xkvmhy/hyprland_dreamy/ +Their window decorations and bar are great, also being able to hide everything upwards is so cool + +https://www.reddit.com/r/unixporn/comments/vkcasz/i3gaps_i_prefer_light_mode/ +If their colour scheme was a little less white I'd love it but overall one of my favourites every + +##### Other Inspiring Shtuff +1. https://github.com/sabrehagen/desktop-environment + +#### Wallpaper Sources +1. https://www.wallpaperflare.com/ +2. https://alphacoders.com + especially this one person: https://alphacoders.com/users/profile/69089/robokoboto + and also the lofi category: https://alphacoders.com/lofi + +#### Teach Yourself Nix +1. https://github.com/XNM1/linux-nixos-hyprland-config-dotfiles) + Really good security oriented NixOS stuff +2. https://jade.fyi/blog/flakes-arent-real/ + Interesting blog post on using flakes + +#### Credits +1. https://github.com/XNM1/linux-nixos-hyprland-config-dotfiles + The simplicity of their layout is amazing, was really good to pick out small modules and learn how something works / is configured. +2. https://github.com/Misterio77/nix-starter-configs + Really great starter config for learning how parts interact and how to generally structure flakes +3. https://nixos.wiki/wiki/Fonts + Wiki page explaining how to install fonts and nerd fonts on NixOS +4. https://github.com/adi1090x/rofi + For the Rofi theme +5. https://github.com/zDyanTB/HyprNova + For the really cool hyprlock theme diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..73d8139 --- /dev/null +++ b/flake.lock @@ -0,0 +1,1805 @@ +{ + "nodes": { + "abseil-src": { + "flake": false, + "locked": { + "lastModified": 1722535511, + "narHash": "sha256-51jpDhdZ0n+KLmxh8KVaTz53pZAB0dHjmILFX+OLud4=", + "owner": "abseil", + "repo": "abseil-cpp", + "rev": "4447c7562e3bc702ade25105912dce503f0c4010", + "type": "github" + }, + "original": { + "owner": "abseil", + "ref": "20240722.0", + "repo": "abseil-cpp", + "type": "github" + } + }, + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland-git", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland-git", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "systems" + ] + }, + "locked": { + "lastModified": 1765900596, + "narHash": "sha256-+hn8v9jkkLP9m+o0Nm5SiEq10W0iWDSotH2XfjU45fA=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "d83c97f8f5c0aae553c1489c7d9eff3eadcadace", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", + "type": "github" + } + }, + "asio-src": { + "flake": false, + "locked": { + "lastModified": 1702548444, + "narHash": "sha256-8Xo6J6+dTvDtsthjbLMMTInHMDnMMM0rQwzbZu70J/s=", + "owner": "chriskohlhoff", + "repo": "asio", + "rev": "22ccfc94fc77356f7820601f9f33b9129a337d2d", + "type": "github" + }, + "original": { + "owner": "chriskohlhoff", + "ref": "asio-1-30-0", + "repo": "asio", + "type": "github" + } + }, + "awww": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1770895252, + "narHash": "sha256-TUGZVDcC5xsrWVnpBNosAG1cTy+aWchCWXPyeLZdnGM=", + "ref": "refs/heads/main", + "rev": "2c86d41d07471f518e24f5cd1f586e4d2a32d12c", + "revCount": 1331, + "type": "git", + "url": "https://codeberg.org/LGFae/awww" + }, + "original": { + "type": "git", + "url": "https://codeberg.org/LGFae/awww" + } + }, + "cachyos": { + "inputs": { + "cachyos-kernel": "cachyos-kernel", + "cachyos-kernel-patches": "cachyos-kernel-patches", + "flake-compat": "flake-compat_2", + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1770834979, + "narHash": "sha256-gh7GOW1y06dsfCnzBlx+qkkDUqnr1AhXBRjihUTB3w4=", + "owner": "xddxdd", + "repo": "nix-cachyos-kernel", + "rev": "36658048dacf3e409f17dfd1465eee1e4e217432", + "type": "github" + }, + "original": { + "owner": "xddxdd", + "repo": "nix-cachyos-kernel", + "type": "github" + } + }, + "cachyos-kernel": { + "flake": false, + "locked": { + "lastModified": 1770747435, + "narHash": "sha256-MR4xm9zQZ5LuoHWWdrlWJyEJablzx36nY19dXpY4VE4=", + "owner": "CachyOS", + "repo": "linux-cachyos", + "rev": "661da6f123bf3984e462fe9f932a38e643d6e081", + "type": "github" + }, + "original": { + "owner": "CachyOS", + "repo": "linux-cachyos", + "type": "github" + } + }, + "cachyos-kernel-patches": { + "flake": false, + "locked": { + "lastModified": 1770760828, + "narHash": "sha256-bcAZJG390mv9fFJwzyFl3iRyrTpSTWsra14qBJujR4A=", + "owner": "CachyOS", + "repo": "kernel-patches", + "rev": "87a5bb45dfee4cf31a57472591cb5013a7e9afcf", + "type": "github" + }, + "original": { + "owner": "CachyOS", + "repo": "kernel-patches", + "type": "github" + } + }, + "cerulean": { + "inputs": { + "deploy-rs": "deploy-rs", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-unstable": [ + "nixpkgs-unstable" + ], + "nt": "nt", + "systems": [ + "systems" + ] + }, + "locked": { + "lastModified": 1770914135, + "narHash": "sha256-gAOwv1il9GUxsS7XGF612Ftm9+cMvd1QOINwJlWpCnQ=", + "owner": "emilelcb", + "repo": "Cerulean", + "rev": "b151f45dfbdb0849d3c24940af946f11652dd8bf", + "type": "github" + }, + "original": { + "owner": "emilelcb", + "repo": "Cerulean", + "type": "github" + } + }, + "crane": { + "locked": { + "lastModified": 1759893430, + "narHash": "sha256-yAy4otLYm9iZ+NtQwTMEbqHwswSFUbhn7x826RR6djw=", + "owner": "ipetkov", + "repo": "crane", + "rev": "1979a2524cb8c801520bd94c38bb3d5692419d93", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "curl-src": { + "flake": false, + "locked": { + "lastModified": 1743572790, + "narHash": "sha256-huAGWNm2rYBmgzUuYQ21IYp2skyQECelEkXPMBJY3cE=", + "owner": "curl", + "repo": "curl", + "rev": "1c3149881769e7bd79b072e48374e4c2b3678b2f", + "type": "github" + }, + "original": { + "owner": "curl", + "ref": "curl-8_13_0", + "repo": "curl", + "type": "github" + } + }, + "deploy-rs": { + "inputs": { + "flake-compat": "flake-compat_3", + "nixpkgs": "nixpkgs_3", + "utils": "utils" + }, + "locked": { + "lastModified": 1766051518, + "narHash": "sha256-znKOwPXQnt3o7lDb3hdf19oDo0BLP4MfBOYiWkEHoik=", + "owner": "serokell", + "repo": "deploy-rs", + "rev": "d5eff7f948535b9c723d60cd8239f8f11ddc90fa", + "type": "github" + }, + "original": { + "owner": "serokell", + "repo": "deploy-rs", + "type": "github" + } + }, + "fenix": { + "inputs": { + "nixpkgs": [ + "iamb", + "nixpkgs" + ], + "rust-analyzer-src": "rust-analyzer-src" + }, + "locked": { + "lastModified": 1760510549, + "narHash": "sha256-NP+kmLMm7zSyv4Fufv+eSJXyqjLMUhUfPT6lXRlg/bU=", + "owner": "nix-community", + "repo": "fenix", + "rev": "ef7178cf086f267113b5c48fdeb6e510729c8214", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "fenix", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1761588595, + "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_4": { + "flake": false, + "locked": { + "lastModified": 1761588595, + "narHash": "sha256-XKUZz9zewJNUj46b4AJdiRZJAvSZ0Dqj2BNfXvFlJC4=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "f387cd2afec9419c8ee37694406ca490c3f34ee5", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_5": { + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_6": { + "locked": { + "lastModified": 1733328505, + "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", + "revCount": 69, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": [ + "cerulean", + "nt", + "nix-unit", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1762440070, + "narHash": "sha256-xxdepIcb39UJ94+YydGP221rjnpkDZUlykKuF54PsqI=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "26d05891e14c88eb4a5d5bee659c0db5afb609d8", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib_2" + }, + "locked": { + "lastModified": 1768135262, + "narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems_4" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "fmt-src": { + "flake": false, + "locked": { + "lastModified": 1758127535, + "narHash": "sha256-AZDmIeU1HbadC+K0TIAGogvVnxt0oE9U6ocpawIgl6g=", + "owner": "fmtlib", + "repo": "fmt", + "rev": "e424e3f2e607da02742f73db84873b8084fc714c", + "type": "github" + }, + "original": { + "owner": "fmtlib", + "ref": "12.0.0", + "repo": "fmt", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "hyprland-git", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770910055, + "narHash": "sha256-6HJVLBtbf2ub4a3P9YG+a3CTzzUcy4HpLz4IQdiyVxY=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "0825a0922a5d677f5f984bb79524569bbd1f9954", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "zen", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769872935, + "narHash": "sha256-07HMIGQ/WJeAQJooA7Kkg1SDKxhAiV6eodvOwTX6WKI=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "f4ad5068ee8e89e4a7c2e963e10dd35cd77b37b7", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "hyprcursor": { + "inputs": { + "hyprlang": [ + "hyprland-git", + "hyprlang" + ], + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "systems" + ] + }, + "locked": { + "lastModified": 1753964049, + "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, + "hyprgraphics": { + "inputs": { + "hyprutils": [ + "hyprland-git", + "hyprutils" + ], + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "systems" + ] + }, + "locked": { + "lastModified": 1763733840, + "narHash": "sha256-JnET78yl5RvpGuDQy3rCycOCkiKoLr5DN1fPhRNNMco=", + "owner": "hyprwm", + "repo": "hyprgraphics", + "rev": "8f1bec691b2d198c60cccabca7a94add2df4ed1a", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprgraphics", + "type": "github" + } + }, + "hyprland-git": { + "inputs": { + "aquamarine": "aquamarine", + "hyprcursor": "hyprcursor", + "hyprgraphics": "hyprgraphics", + "hyprland-guiutils": "hyprland-guiutils", + "hyprland-protocols": "hyprland-protocols", + "hyprlang": "hyprlang", + "hyprutils": "hyprutils", + "hyprwayland-scanner": "hyprwayland-scanner", + "hyprwire": "hyprwire", + "nixpkgs": "nixpkgs_5", + "pre-commit-hooks": "pre-commit-hooks", + "systems": "systems_3", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1766604420, + "narHash": "sha256-2Kqg1YNtjPGXc1DIzBeESL8hiuUNUn3c3Oimab19Zn8=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "25250527793eb04bb60f103abe7f06370b9f6e1c", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "25250527793eb04bb60f103abe7f06370b9f6e1c", + "type": "github" + } + }, + "hyprland-guiutils": { + "inputs": { + "aquamarine": [ + "hyprland-git", + "aquamarine" + ], + "hyprgraphics": [ + "hyprland-git", + "hyprgraphics" + ], + "hyprlang": [ + "hyprland-git", + "hyprlang" + ], + "hyprtoolkit": "hyprtoolkit", + "hyprutils": [ + "hyprland-git", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland-git", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "systems" + ] + }, + "locked": { + "lastModified": 1765643131, + "narHash": "sha256-CCGohW5EBIRy4B7vTyBMqPgsNcaNenVad/wszfddET0=", + "owner": "hyprwm", + "repo": "hyprland-guiutils", + "rev": "e50ae912813bdfa8372d62daf454f48d6df02297", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-guiutils", + "type": "github" + } + }, + "hyprland-plugins": { + "inputs": { + "hyprland": [ + "hyprland-git" + ], + "nixpkgs": [ + "hyprland-plugins", + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland-plugins", + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1770899531, + "narHash": "sha256-UBrWjh0DR8db60aLNkTnZTJ9F4kWK0Y7rUDNJC88W7A=", + "owner": "hyprwm", + "repo": "hyprland-plugins", + "rev": "e03c34ccd51280a44ea6d1f5c040cd81ecca25ed", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-plugins", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "systems" + ] + }, + "locked": { + "lastModified": 1765214753, + "narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "hyprlang": { + "inputs": { + "hyprutils": [ + "hyprland-git", + "hyprutils" + ], + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "systems" + ] + }, + "locked": { + "lastModified": 1764612430, + "narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "0d00dc118981531aa731150b6ea551ef037acddd", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprtoolkit": { + "inputs": { + "aquamarine": [ + "hyprland-git", + "hyprland-guiutils", + "aquamarine" + ], + "hyprgraphics": [ + "hyprland-git", + "hyprland-guiutils", + "hyprgraphics" + ], + "hyprlang": [ + "hyprland-git", + "hyprland-guiutils", + "hyprlang" + ], + "hyprutils": [ + "hyprland-git", + "hyprland-guiutils", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland-git", + "hyprland-guiutils", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland-git", + "hyprland-guiutils", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "hyprland-guiutils", + "systems" + ] + }, + "locked": { + "lastModified": 1764592794, + "narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=", + "owner": "hyprwm", + "repo": "hyprtoolkit", + "rev": "5cfe0743f0e608e1462972303778d8a0859ee63e", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprtoolkit", + "type": "github" + } + }, + "hyprutils": { + "inputs": { + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "systems" + ] + }, + "locked": { + "lastModified": 1766160771, + "narHash": "sha256-roINUGikWRqqgKrD4iotKbGj3ZKJl3hjMz5l/SyKrHw=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "5ac060bfcf2f12b3a6381156ebbc13826a05b09f", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprutils", + "type": "github" + } + }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "systems" + ] + }, + "locked": { + "lastModified": 1763640274, + "narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, + "hyprwire": { + "inputs": { + "hyprutils": [ + "hyprland-git", + "hyprutils" + ], + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "systems" + ] + }, + "locked": { + "lastModified": 1766253200, + "narHash": "sha256-26qPwrd3od+xoYVywSB7hC2cz9ivN46VPLlrsXyGxvE=", + "owner": "hyprwm", + "repo": "hyprwire", + "rev": "1079777525b30a947c8d657fac158e00ae85de9d", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwire", + "type": "github" + } + }, + "iamb": { + "inputs": { + "crane": "crane", + "fenix": "fenix", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_6" + }, + "locked": { + "lastModified": 1768868561, + "narHash": "sha256-nvEOtV1Y5K9E1Lj+bPnQ6k1AneDM9OT3RbV3Urm/1Qs=", + "owner": "ulyssa", + "repo": "iamb", + "rev": "93fc47d019cd6a9d56f163aa6ba819ef1fd309d6", + "type": "github" + }, + "original": { + "owner": "ulyssa", + "repo": "iamb", + "type": "github" + } + }, + "incbin-src": { + "flake": false, + "locked": { + "lastModified": 1748303270, + "narHash": "sha256-vgOfViZnWTKpBB6vDNDJSB3YuuGGVhg++zsi9Ubatno=", + "owner": "graphitemaster", + "repo": "incbin", + "rev": "22061f51fe9f2f35f061f85c2b217b55dd75310d", + "type": "github" + }, + "original": { + "owner": "graphitemaster", + "repo": "incbin", + "rev": "22061f51fe9f2f35f061f85c2b217b55dd75310d", + "type": "github" + } + }, + "json-src": { + "flake": false, + "locked": { + "lastModified": 1744360948, + "narHash": "sha256-cECvDOLxgX7Q9R3IE86Hj9JJUxraDQvhoyPDF03B2CY=", + "owner": "nlohmann", + "repo": "json", + "rev": "55f93686c01528224f448c19128836e7df245f72", + "type": "github" + }, + "original": { + "owner": "nlohmann", + "ref": "v3.12.0", + "repo": "json", + "type": "github" + } + }, + "libgit2-src": { + "flake": false, + "locked": { + "lastModified": 1749227175, + "narHash": "sha256-/xI3v7LNhpgfjv/m+sZwYDhhYvS6kQYxiiiG3+EF8Mw=", + "owner": "libgit2", + "repo": "libgit2", + "rev": "0060d9cf5666f015b1067129bd874c6cc4c9c7ac", + "type": "github" + }, + "original": { + "owner": "libgit2", + "ref": "v1.9.1", + "repo": "libgit2", + "type": "github" + } + }, + "luajit-src": { + "flake": false, + "locked": { + "lastModified": 1763177035, + "narHash": "sha256-oYD86MqmlJpiCuEs4LwVtxvarPtz1RPWm8nJqNE0sBs=", + "owner": "SteamClientHomebrew", + "repo": "LuaJIT", + "rev": "89550023569c3e195e75e12951c067fe5591e0d2", + "type": "github" + }, + "original": { + "owner": "SteamClientHomebrew", + "ref": "v2.1", + "repo": "LuaJIT", + "type": "github" + } + }, + "luajson-src": { + "flake": false, + "locked": { + "lastModified": 1763065879, + "narHash": "sha256-5Mdp4jp+rqz2ufkBa1gMfd8nep+Um+mBdr6+Ut6yz9I=", + "owner": "SteamClientHomebrew", + "repo": "LuaJSON", + "rev": "0c1fabf07c42f3907287d1e4f729e0620c1fe6fd", + "type": "github" + }, + "original": { + "owner": "SteamClientHomebrew", + "repo": "LuaJSON", + "rev": "0c1fabf07c42f3907287d1e4f729e0620c1fe6fd", + "type": "github" + } + }, + "millennium": { + "inputs": { + "abseil-src": "abseil-src", + "asio-src": "asio-src", + "curl-src": "curl-src", + "fmt-src": "fmt-src", + "incbin-src": "incbin-src", + "json-src": "json-src", + "libgit2-src": "libgit2-src", + "luajit-src": "luajit-src", + "luajson-src": "luajson-src", + "millennium-src": "millennium-src", + "minhook-src": "minhook-src", + "mini-src": "mini-src", + "minizip-src": "minizip-src", + "nixpkgs": "nixpkgs_7", + "re2-src": "re2-src", + "websocketpp-src": "websocketpp-src", + "zlib-src": "zlib-src" + }, + "locked": { + "dir": "packages/nix", + "lastModified": 1770489586, + "narHash": "sha256-JMN7T1ZrQ7PjSsgKobxtEENHiBAxqHNNIAaJcPnCeHM=", + "owner": "trivaris", + "repo": "millennium", + "rev": "19656df9f9c8dfa0b7c6a4d2d25073b78efc4eda", + "type": "github" + }, + "original": { + "dir": "packages/nix", + "owner": "trivaris", + "repo": "millennium", + "type": "github" + } + }, + "millennium-src": { + "flake": false, + "locked": { + "lastModified": 1770463863, + "narHash": "sha256-MceGTpXobCAh5Ll/1iTWcEf6/nHY3Ll1t06JxbYc+Co=", + "owner": "SteamClientHomebrew", + "repo": "Millennium", + "rev": "1bc62c94a06f25f7e8d7e269f11cd968cf576bff", + "type": "github" + }, + "original": { + "owner": "SteamClientHomebrew", + "repo": "Millennium", + "rev": "1bc62c94a06f25f7e8d7e269f11cd968cf576bff", + "type": "github" + } + }, + "minhook-src": { + "flake": false, + "locked": { + "lastModified": 1743163800, + "narHash": "sha256-0eGFfg365bb4zic1WTHMvKHbxuhhGp72/clu8OklHXs=", + "owner": "TsudaKageyu", + "repo": "minhook", + "rev": "c3fcafdc10146beb5919319d0683e44e3c30d537", + "type": "github" + }, + "original": { + "owner": "TsudaKageyu", + "ref": "v1.3.4", + "repo": "minhook", + "type": "github" + } + }, + "mini-src": { + "flake": false, + "locked": { + "lastModified": 1743356736, + "narHash": "sha256-zBFFOlECbie7+62fTGf+NP4gNmfv2Qddw3ys6xn7o9U=", + "owner": "metayeti", + "repo": "mINI", + "rev": "52b66e987cb56171dc91d96115cdf094b6e4d7a0", + "type": "github" + }, + "original": { + "owner": "metayeti", + "ref": "0.9.18", + "repo": "mINI", + "type": "github" + } + }, + "minizip-src": { + "flake": false, + "locked": { + "lastModified": 1746408966, + "narHash": "sha256-I3CZwtfJMsZYQOMdGhooUN8vssnQj6rCzv8F+rne3vg=", + "owner": "zlib-ng", + "repo": "minizip-ng", + "rev": "f3ed731e27a97e30dffe076ed5e0537daae5c1bd", + "type": "github" + }, + "original": { + "owner": "zlib-ng", + "ref": "4.0.10", + "repo": "minizip-ng", + "type": "github" + } + }, + "nix-alien": { + "inputs": { + "flake-compat": "flake-compat_5", + "nix-index-database": "nix-index-database", + "nixpkgs": "nixpkgs_8" + }, + "locked": { + "lastModified": 1768904356, + "narHash": "sha256-TIG8J+Or8nOydy8TztvtIshnprlf1q6XDIJnopLtMlA=", + "owner": "thiagokokada", + "repo": "nix-alien", + "rev": "d95b25a4dd6da2a1dfeaaf66163d0a281a8270e9", + "type": "github" + }, + "original": { + "owner": "thiagokokada", + "repo": "nix-alien", + "type": "github" + } + }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "cerulean", + "nt", + "nix-unit", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1737420293, + "narHash": "sha256-F1G5ifvqTpJq7fdkT34e/Jy9VCyzd5XfJ9TO8fHhJWE=", + "owner": "nix-community", + "repo": "nix-github-actions", + "rev": "f4158fa080ef4503c8f4c820967d946c2af31ec9", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nix-index-database": { + "inputs": { + "nixpkgs": [ + "nix-alien", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1765267181, + "narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=", + "owner": "nix-community", + "repo": "nix-index-database", + "rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-index-database", + "type": "github" + } + }, + "nix-unit": { + "inputs": { + "flake-parts": "flake-parts_2", + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "cerulean", + "nt", + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1762774186, + "narHash": "sha256-hRADkHjNt41+JUHw2EiSkMaL4owL83g5ZppjYUdF/Dc=", + "owner": "nix-community", + "repo": "nix-unit", + "rev": "1c9ab50554eed0b768f9e5b6f646d63c9673f0f7", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-unit", + "type": "github" + } + }, + "nixcats": { + "locked": { + "lastModified": 1770584904, + "narHash": "sha256-9Zaz8lbKF2W9pwXZEnbiGsicHdBoU+dHt3Wv3mCJoZ8=", + "owner": "BirdeeHub", + "repo": "nixCats-nvim", + "rev": "538fdde784d2909700d97a8ef307783b33a86fb1", + "type": "github" + }, + "original": { + "owner": "BirdeeHub", + "repo": "nixCats-nvim", + "type": "github" + } + }, + "nixcord": { + "inputs": { + "flake-compat": "flake-compat_6", + "flake-parts": "flake-parts_3", + "nixpkgs": "nixpkgs_9" + }, + "locked": { + "lastModified": 1770365342, + "narHash": "sha256-jV5tAs67HSBWz/ePEp1eyoUK3Lqfc1fEAvt2wC6reFc=", + "owner": "FlameFlag", + "repo": "nixcord", + "rev": "51db830336715209a4a213aa985f4d405ff0be69", + "type": "github" + }, + "original": { + "owner": "FlameFlag", + "repo": "nixcord", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1763934636, + "narHash": "sha256-9glbI7f1uU+yzQCq5LwLgdZqx6svOhZWkd4JRY265fc=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "ee09932cedcef15aaf476f9343d1dea2cb77e261", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1769909678, + "narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "72716169fe93074c333e8d0173151350670b824c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-lib_2": { + "locked": { + "lastModified": 1761114652, + "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-unstable": { + "locked": { + "lastModified": 1770914792, + "narHash": "sha256-QpCRgIbupASO9adsg2kFNNUnOIQq0vJ9g6HCxlOA7v8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "3b285f04c85ceacf7a53cfa21b2f5cb60a2d06e2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "staging-next", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_10": { + "locked": { + "lastModified": 1770562336, + "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_11": { + "locked": { + "lastModified": 1770197578, + "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_12": { + "locked": { + "lastModified": 1769461804, + "narHash": "sha256-msG8SU5WsBUfVVa/9RPLaymvi5bI8edTavbIq3vRlhI=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1770818322, + "narHash": "sha256-tttCN+yrhM7svQW6DqtS3JV9POrRJAaS/e0xuUHBTEM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d9ca3a4b73f19ea147c9d977d3dde8f612ac648f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1743014863, + "narHash": "sha256-jAIUqsiN2r3hCuHji80U7NNEafpIMBXiwKlSrjWMlpg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "bd3bac8bfb542dbde7ffffb6987a1a1f9d41699f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1767313136, + "narHash": "sha256-16KkgfdYqjaeRGBaYsNrhPRRENs0qzkQVUooNHtoy2w=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ac62194c3917d5f474c1a844b6fd6da2db95077d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1766070988, + "narHash": "sha256-G/WVghka6c4bAzMhTwT2vjLccg/awmHkdKSd2JrycLc=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c6245e83d836d0433170a16eb185cefe0572f8b8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1760284886, + "narHash": "sha256-TK9Kr0BYBQ/1P5kAsnNQhmWWKgmZXwUQr4ZMjCzWf2c=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "cf3f5c4def3c7b5f1fc012b3d839575dbe552d43", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1770115704, + "narHash": "sha256-KHFT9UWOF2yRPlAnSXQJh6uVcgNcWlFqqiAZ7OVlHNc=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "e6eae2ee2110f3d31110d5c222cd395303343b08", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1768305791, + "narHash": "sha256-AIdl6WAn9aymeaH/NvBj0H9qM+XuAuYbGMZaP0zcXAQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1412caf7bf9e660f2f962917c14b1ea1c3bc695e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_9": { + "locked": { + "lastModified": 1770770419, + "narHash": "sha256-iKZMkr6Cm9JzWlRYW/VPoL0A9jVKtZYiU4zSrVeetIs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "6c5e707c6b5339359a9a9e215c5e66d6d802fd7a", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nt": { + "inputs": { + "nix-unit": "nix-unit", + "nixpkgs": "nixpkgs_4", + "systems": "systems_2" + }, + "locked": { + "lastModified": 1770911021, + "narHash": "sha256-8FcXBu0CjeeZeq3uW2h/c5AV+hqELuyPiHsUogOSmZM=", + "owner": "emilelcb", + "repo": "nt", + "rev": "471e1617e8cc0bc749712a7a6af2b2e9f988ffbf", + "type": "github" + }, + "original": { + "owner": "emilelcb", + "repo": "nt", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat_4", + "gitignore": "gitignore", + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1765911976, + "narHash": "sha256-t3T/xm8zstHRLx+pIHxVpQTiySbKqcQbK+r+01XVKc0=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "b68b780b69702a090c8bb1b973bab13756cc7a27", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "re2-src": { + "flake": false, + "locked": { + "lastModified": 1762353507, + "narHash": "sha256-0J1HVk+eR7VN0ymucW9dNlT36j16XIfCzcs1EVyEIEU=", + "owner": "google", + "repo": "re2", + "rev": "927f5d53caf8111721e734cf24724686bb745f55", + "type": "github" + }, + "original": { + "owner": "google", + "ref": "2025-11-05", + "repo": "re2", + "type": "github" + } + }, + "root": { + "inputs": { + "awww": "awww", + "cachyos": "cachyos", + "cerulean": "cerulean", + "home-manager": "home-manager", + "hyprland-git": "hyprland-git", + "hyprland-plugins": "hyprland-plugins", + "iamb": "iamb", + "millennium": "millennium", + "nix-alien": "nix-alien", + "nixcats": "nixcats", + "nixcord": "nixcord", + "nixpkgs": "nixpkgs_10", + "nixpkgs-unstable": "nixpkgs-unstable", + "sddm-silent": "sddm-silent", + "spicetify-nix": "spicetify-nix", + "systems": "systems_6", + "zen": "zen" + } + }, + "rust-analyzer-src": { + "flake": false, + "locked": { + "lastModified": 1760457219, + "narHash": "sha256-WJOUGx42hrhmvvYcGkwea+BcJuQJLcns849OnewQqX4=", + "owner": "rust-lang", + "repo": "rust-analyzer", + "rev": "8747cf81540bd1bbbab9ee2702f12c33aa887b46", + "type": "github" + }, + "original": { + "owner": "rust-lang", + "ref": "nightly", + "repo": "rust-analyzer", + "type": "github" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "awww", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1764038373, + "narHash": "sha256-M6w2wNBRelcavoDAyFL2iO4NeWknD40ASkH1S3C0YGM=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "ab3536fe850211a96673c6ffb2cb88aab8071cc9", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "sddm-silent": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769900466, + "narHash": "sha256-WeoJBj/PhqFCCJEIycTipqPbKm5BpQT2uzFTYcYZ30I=", + "owner": "uiriansan", + "repo": "SilentSDDM", + "rev": "a44caf771b4cb72f5c2514f7d488455b0fa860d2", + "type": "github" + }, + "original": { + "owner": "uiriansan", + "repo": "SilentSDDM", + "type": "github" + } + }, + "spicetify-nix": { + "inputs": { + "nixpkgs": "nixpkgs_11", + "systems": "systems_5" + }, + "locked": { + "lastModified": 1770846656, + "narHash": "sha256-wdYpo8++TqKp3GdRgLFykjuIVW1m9GlUnxID2FG74cE=", + "owner": "Gerg-L", + "repo": "spicetify-nix", + "rev": "40e65cfc4608402674e1efaac3fccce20d2a72d3", + "type": "github" + }, + "original": { + "owner": "Gerg-L", + "repo": "spicetify-nix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_5": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_6": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "cerulean", + "nt", + "nix-unit", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1762410071, + "narHash": "sha256-aF5fvoZeoXNPxT0bejFUBXeUjXfHLSL7g+mjR/p5TEg=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "97a30861b13c3731a84e09405414398fbf3e109f", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "websocketpp-src": { + "flake": false, + "locked": { + "lastModified": 1587320717, + "narHash": "sha256-9fIwouthv2GcmBe/UPvV7Xn9P2o0Kmn2hCI4jCh0hPM=", + "owner": "zaphoyd", + "repo": "websocketpp", + "rev": "56123c87598f8b1dd471be83ca841ceae07f95ba", + "type": "github" + }, + "original": { + "owner": "zaphoyd", + "ref": "0.8.2", + "repo": "websocketpp", + "type": "github" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland-git", + "hyprland-protocols" + ], + "hyprlang": [ + "hyprland-git", + "hyprlang" + ], + "hyprutils": [ + "hyprland-git", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland-git", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland-git", + "nixpkgs" + ], + "systems": [ + "hyprland-git", + "systems" + ] + }, + "locked": { + "lastModified": 1761431178, + "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } + }, + "zen": { + "inputs": { + "home-manager": "home-manager_2", + "nixpkgs": "nixpkgs_12" + }, + "locked": { + "lastModified": 1770910552, + "narHash": "sha256-iJ9c0ZewfRRYUflaEOj43n5TWaB6Ezygn2UA/ZHGQJA=", + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "rev": "15656b755cf2e75bd3e67ded6c7709bc09262c27", + "type": "github" + }, + "original": { + "owner": "0xc000022070", + "repo": "zen-browser-flake", + "type": "github" + } + }, + "zlib-src": { + "flake": false, + "locked": { + "lastModified": 1754565515, + "narHash": "sha256-c2RYqHi3hj/ViBzJcYWoNib27GAbq/B1SJUfvG7CPG4=", + "owner": "zlib-ng", + "repo": "zlib-ng", + "rev": "425439062b114a0f6cf625022c41d929c7e879f9", + "type": "github" + }, + "original": { + "owner": "zlib-ng", + "ref": "2.2.5", + "repo": "zlib-ng", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..4184706 --- /dev/null +++ b/flake.nix @@ -0,0 +1,92 @@ +{ + description = "main nixos flake :3"; + + inputs = { + systems.url = "github:nix-systems/default"; + + # WARNING: don't remove duplicate!! (cry64 will fix) + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + nixpkgs-unstable.url = "github:NixOS/nixpkgs/staging-next"; + + home-manager = { + url = "github:nix-community/home-manager/master"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + cerulean = { + url = "github:emilelcb/Cerulean"; + inputs = { + systems.follows = "systems"; + nixpkgs.follows = "nixpkgs"; + nixpkgs-unstable.follows = "nixpkgs-unstable"; + }; + }; + + cachyos.url = "github:xddxdd/nix-cachyos-kernel"; + + nix-alien = { + # silly alien :3 + url = "github:thiagokokada/nix-alien"; + # inputs.nixpkgs.follows = "nixpkgs"; + }; + + # wm/de/apps/theming flakes + hyprland-git = { + url = "github:hyprwm/Hyprland/25250527793eb04bb60f103abe7f06370b9f6e1c"; + #url = "github:hyprwm/Hyprland"; + }; + hyprland-plugins = { + url = "github:hyprwm/hyprland-plugins"; + inputs.hyprland.follows = "hyprland-git"; + }; + + nixcats.url = "github:BirdeeHub/nixCats-nvim"; + awww.url = "git+https://codeberg.org/LGFae/awww"; + zen.url = "github:0xc000022070/zen-browser-flake"; + iamb.url = "github:ulyssa/iamb"; + spicetify-nix.url = "github:Gerg-L/spicetify-nix"; + nixcord.url = "github:FlameFlag/nixcord"; + millennium.url = "github:trivaris/millennium?dir=packages/nix"; + + # temp theme until i bother creating my own box { + margin: 0px 12px; +} + +tooltip { + background: @colorbg; + color: @colorfg; + opacity: 0.9; + padding: 4px; + border-radius: 12px; + border: 1px solid @color01; +} +tooltip label { + background: rgba(0, 0, 0, 0); + color: @colorfg; +} + +#clock, +#memory, +#network, +#workspaces, +#taskbar, +#cpu, +#pulseaudio, +#privacy, +#tray, +#custom-media { + background: @colorbg; + color: @colorfg; + opacity: 0.9; + padding: 4px 16px; + border-radius: 32px; + border: 1px solid @color01; +} + +/* +left-side modules +*/ +#workspaces, +#taskbar, +#custom-media { + margin: 4px 4px 4px 0px; +} + +/* +center modules +*/ +#clock { + margin: 4px 0px 4px 0px; +} + +/* +right-side modules +*/ +#memory, +#network, +#cpu, +#pulseaudio, +#tray, +#privacy { + margin: 4px 0px 4px 4px; +} + +#workspaces, +#taskbar { + padding: 0px; +} + +#taskbar.empty { + opacity: 0; + padding: 0px; + margin: 0px; + border: none; +} +#tray.empty { + opacity: 0; + padding: 0; + margin: 0; + border: none; +} + +/* + connects the workspace and taskbar together :3 +*/ +/* +#workspaces { + margin: 4px 0px 4px 12px; + padding: 0px 8px 0px 0px; + border-radius: 100px 0px 0px 100px; + border-width: 1px 0px 1px 1px; +} +#taskbar { + margin: 4px 0px 4px 0px; + padding: 0px 0px 0px 8px; + border-radius: 0px 100px 100px 0px; +} +*/ + +#cpu { + margin: 4px 0 4px 0; + border-radius: 32px 0px 0px 32px; +} +#memory { + margin: 4px 0 4px 0; + border-radius: 0px; + border-width: 1px 0px 1px 0px; +} +#network { + margin: 4px 0 4px 0; + border-radius: 0px 32px 32px 0px; +} + +#workspaces button { + padding: 2px 4px; + border-radius: 32px; + color: @colorfg; +} +#workspaces button:hover { + background: @colorfg; + color: @colorbg; + opacity: 0.8; +} +#workspaces button.active { + background: @colorfg; + color: @colorbg; +} + +#taskbar button { + padding: 2px 4px; + border-radius: 32px; + color: @colorfg; +} +#taskbar button:hover { + background: @colorfg; + color: @colorbg; + opacity: 0.8; +} +#taskbar button.active { + background: @colorfg; + color: @colorbg; +} +/* + icons in each button on the taskbar to correct + for them not being properly centred sometimes :3 +*/ +#taskbar button box image { + padding-left: 2px; +} diff --git a/homes/modules/de/waybar/waybar.nix b/homes/modules/de/waybar/waybar.nix new file mode 100644 index 0000000..7859d4e --- /dev/null +++ b/homes/modules/de/waybar/waybar.nix @@ -0,0 +1,104 @@ +{ config, inputs, lib, pkgs, ... }: +let + unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + programs.waybar = { + enable = true; + settings = { + mainBar = { + layer = "top"; + position = "top"; + height = 20; + modules-left = [ "hyprland/workspaces" "wlr/taskbar" "custom/media" ]; + modules-center = [ "clock" ]; + modules-right = [ "cpu" "memory" "network" "pulseaudio" "privacy" "tray" ]; + + # left + "hyprland/workspaces" = { + format = "{id}"; + }; + "wlr/taskbar" = { + format = "{icon}"; + icon-size = 12; + }; + "custom/media" = { + exec = "auroramedia"; + return-type = "json"; + escape = true; + restart-interval = 1; + }; + + # center + "clock" = { + format = "{:%Y %b %a %d %H:%M:%S}"; + interval = 1; + tooltip = false; + }; + + # right + "cpu" = { + format = " {usage}%"; + interval = 1; + }; + "memory" = { + format = " {used:0.1f} / {total:0.1f} GiB"; + interval = 1; + }; + "network" = { + format = "{bandwidthUpBytes}  {bandwidthDownBytes}  {ifname}"; + format-wifi = " {bandwidthUpBytes}  {bandwidthDownBytes} "; + format-ethernet = "󰈀 {bandwidthUpBytes}  {bandwidthDownBytes} "; + format-disconnected = "no internet ~ rawr! ~ x3"; # empty format hides module + interval = 1; + max-length = 32; + }; + "pulseaudio" = { + format = "{icon} {volume}%"; + format-muted = " {volume}%"; + format-icons = { + default = [ + "" + "" + "" + ]; + }; + "scroll-step" = 5; + }; + "privacy" = { + icon-size = 12; + icon-spacing = 5; + transition-duration = 200; + modules = [ + { + type = "screenshare"; + tooltip = true; + tooltip-icon-size = 12; + } + { + type = "audio-in"; + tooltip = true; + tooltip-icon-size = 12; + } + ]; + }; + "tray" = { + icon-size = 12; + spacing = 10; + # fixes spotify not showing up when "close button should minimize the Spotify window" is false + show-passive-items = true; + }; + + # i only enable this for debugging of window rules lol + "hyprland/window" = { + format = "{class} | {title}"; + }; + }; + }; + + style = pkgs.writeTextFile { + name = "waybar-style.css"; + text = builtins.readFile ./style.css; + }; + }; +} diff --git a/homes/modules/programs/iamb/config.toml b/homes/modules/programs/iamb/config.toml new file mode 100644 index 0000000..1577437 --- /dev/null +++ b/homes/modules/programs/iamb/config.toml @@ -0,0 +1,10 @@ +[profiles.auroraveon-matrix] +user_id = "@auroraveon:matrix.org" +url = "https://matrix.org" + +[settings.notifications] +enabled = true +show_message = false + +[image_preview] +protocol.type = "kitty" diff --git a/homes/modules/programs/iamb/iamb.nix b/homes/modules/programs/iamb/iamb.nix new file mode 100644 index 0000000..ab84c56 --- /dev/null +++ b/homes/modules/programs/iamb/iamb.nix @@ -0,0 +1,13 @@ +{ config, inputs, lib, pkgs, ... }: +let + unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + home.packages = with pkgs; [ + inputs.iamb.packages."${stdenv.hostPlatform.system}".default + ]; + + xdg.configFile."iamb/config.toml" = { + source = ./config.toml; + }; +} diff --git a/homes/modules/programs/neovim/init.lua b/homes/modules/programs/neovim/init.lua new file mode 100644 index 0000000..b46afbe --- /dev/null +++ b/homes/modules/programs/neovim/init.lua @@ -0,0 +1,69 @@ +vim.g.mapleader = " " + +vim.opt.termguicolors = true -- use terminal colors +vim.opt.relativenumber = true +vim.opt.wrap = false +vim.opt.colorcolumn = "80" + +require("plugins") +require("lsp") + +local uv = vim.loop +local colorscheme_filepath = "/home/aurora/.cache/nvim/neovim-colors" +local colors = {} + +-- function to load colors +local function load_colors() + local new_colors = {} + for line in io.lines(colorscheme_filepath) do + table.insert(new_colors, line) + end + + -- ensure the table has enough entries to avoid indexing issues + if #new_colors >= 18 then + colors = new_colors + require('base16-colorscheme').setup({ + base00 = colors[17], base01 = colors[1], base02 = colors[3], base03 = colors[3], + base04 = colors[5], base05 = colors[8], base06 = colors[5], base07 = colors[8], + base08 = colors[18], base09 = colors[4], base0A = colors[11], base0B = colors[5], + base0C = colors[6], base0D = colors[7], base0E = colors[6], base0F = colors[16], + }) + + -- set colors for blink.cmp's completion menu + vim.api.nvim_set_hl(0, 'BlinkCmpMenu', { bg = colors[17] }) + vim.api.nvim_set_hl(0, 'BlinkCmpMenuBorder', { bg = colors[17], fg = colors[13] }) + vim.api.nvim_set_hl(0, 'BlinkCmpMenuSelection', { bg = colors[15], fg = colors[17] }) + vim.api.nvim_set_hl(0, 'BlinkCmpScrollBarThumb', { bg = colors[18] }) + vim.api.nvim_set_hl(0, 'BlinkCmpKind', { bg = colors[17], fg = colors[14] }) + vim.api.nvim_set_hl(0, 'BlinkCmpLabel', { bg = colors[17], fg = colors[18] }) + vim.api.nvim_set_hl(0, 'BlinkCmpLabelMatch', { bg = colors[17], fg = colors[18] }) + vim.api.nvim_set_hl(0, 'BlinkCmpLabelDetail', { bg = colors[17], fg = colors[18] }) + vim.api.nvim_set_hl(0, 'BlinkCmpLabelDescription', { bg = colors[17], fg = colors[18] }) + else + print("Error: Not enough colors in file") + end +end + +-- initial load +load_colors() + +-- vim.defer_fn(load_colors, 1) + +-- set up a file watcher +local function watch_colorscheme() + local handle + handle = uv.new_fs_event() + if handle then + uv.fs_event_start(handle, colorscheme_filepath, {}, function(err, _, _) + if err then + print("Error watching colorscheme file:", err) + return + end + -- debounce by adding a slight delay before reloading + vim.defer_fn(load_colors, 100) + end) + end +end + +watch_colorscheme() + diff --git a/homes/modules/programs/neovim/lua/lsp/capabilities.lua b/homes/modules/programs/neovim/lua/lsp/capabilities.lua new file mode 100644 index 0000000..9256965 --- /dev/null +++ b/homes/modules/programs/neovim/lua/lsp/capabilities.lua @@ -0,0 +1,59 @@ +local M = {} + +function M.on_attach(_, bufnr) + -- we create a function that lets us more easily define mappings specific + -- for LSP related items. It sets the mode, buffer and description for us each time. + + local nmap = function(keys, func, desc) + if desc then + desc = 'LSP: ' .. desc + end + + vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) + end + + nmap('rn', vim.lsp.buf.rename, '[R]e[n]ame') + nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') + + nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') + + -- NOTE: why are these functions that call the telescope builtin? + -- because otherwise they would load telescope eagerly when this is defined. + -- due to us using the on_require handler to make sure it is available. + if nixCats('general.telescope') then + nmap('gr', function() require('telescope.builtin').lsp_references() end, '[G]oto [R]eferences') + nmap('gI', function() require('telescope.builtin').lsp_implementations() end, '[G]oto [I]mplementation') + nmap('ds', function() require('telescope.builtin').lsp_document_symbols() end, '[D]ocument [S]ymbols') + nmap('ws', function() require('telescope.builtin').lsp_dynamic_workspace_symbols() end, '[W]orkspace [S]ymbols') + nmap('dd', "Telescope diagnostics bufnr=0", '[D]ocument [D]iagnostics') + nmap('wd', "Telescope diagnostics", '[W]orkspace [D]iagnostics') + end -- TODO: someone who knows the builtin versions of these to do instead help me out please. + + nmap('D', vim.lsp.buf.type_definition, 'Type [D]efinition') + nmap('e', vim.diagnostic.open_float, 'Show [E]rror') + + -- See `:help K` for why this keymap + nmap('K', vim.lsp.buf.hover, 'Hover Documentation') + nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') + + -- Lesser used LSP functionality + nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') + nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') + nmap('wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, '[W]orkspace [L]ist Folders') + + -- Create a command `:Format` local to the LSP buffer + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format() + end, { desc = 'Format current buffer with LSP' }) + +end + +function M.get(server_name) + local capabilities = require('blink.cmp').get_lsp_capabilities() + + return capabilities +end +return M diff --git a/homes/modules/programs/neovim/lua/lsp/completion.lua b/homes/modules/programs/neovim/lua/lsp/completion.lua new file mode 100644 index 0000000..cdbc9db --- /dev/null +++ b/homes/modules/programs/neovim/lua/lsp/completion.lua @@ -0,0 +1,88 @@ +return { + { + "friendly-snippets", + dep_of = { "blink.cmp" }, + }, + { + "blink.cmp", + event = { "InsertEnter", "CmdlineEnter" }, + on_require = "blink", + load = function (name) + vim.cmd.packadd(name) + end, + after = function(plugin) + local blink = require('blink.cmp') + + blink.setup({ + keymap = { + preset = 'default', + }, + + appearance = { + nerd_font_variant = 'mono', + }, + + sources = { + default = { 'lsp', 'path', 'snippets', 'buffer' }, + providers = { + lsp = { + name = 'LSP', + module = 'blink.cmp.sources.lsp', + enabled = true, + }, + path = { + name = 'Path', + module = 'blink.cmp.sources.path', + enabled = true, + }, + snippets = { + name = 'Snippets', + module = 'blink.cmp.sources.snippets', + enabled = true, + }, + buffer = { + name = 'Buffer', + module = 'blink.cmp.sources.buffer', + enabled = true, + }, + }, + }, + + completion = { + accept = { + auto_brackets = { + enabled = true, + }, + }, + + menu = { + border = 'rounded', + max_height = 12, + scrolloff = 2, + + draw = { + columns = { + { "kind_icon", gap = 1, }, + { "label", "label_description", gap = 1, }, + }, + }, + }, + + documentation = { + auto_show = false, + window = { + border = 'rounded', + }, + }, + }, + + signature = { + enabled = true, + window = { + border = 'rounded', + }, + }, + }) + end + }, +} diff --git a/homes/modules/programs/neovim/lua/lsp/completion.lua.old b/homes/modules/programs/neovim/lua/lsp/completion.lua.old new file mode 100644 index 0000000..f40853f --- /dev/null +++ b/homes/modules/programs/neovim/lua/lsp/completion.lua.old @@ -0,0 +1,203 @@ +---packadd + after/plugin +---@type fun(names: string[]|string) +local load_w_after_plugin = require('nixCatsUtils.lzUtils').make_load_with_after({ "plugin" }) + +-- NOTE: packadd doesnt load after directories. +-- hence, the above function that you can get from luaUtils that exists to make that easy. + +return { + { + "cmp-buffer", + on_plugin = { "nvim-cmp" }, + load = load_w_after_plugin, + }, + { + "cmp-cmdline", + on_plugin = { "nvim-cmp" }, + load = load_w_after_plugin, + }, + { + "cmp-cmdline-history", + on_plugin = { "nvim-cmp" }, + load = load_w_after_plugin, + }, + { + "cmp-nvim-lsp", + on_plugin = { "nvim-cmp" }, + dep_of = { "nvim-lspconfig" }, + load = load_w_after_plugin, + }, + { + "cmp-nvim-lsp-signature-help", + on_plugin = { "nvim-cmp" }, + load = load_w_after_plugin, + }, + { + "cmp-nvim-lua", + on_plugin = { "nvim-cmp" }, + load = load_w_after_plugin, + }, + { + "cmp-path", + on_plugin = { "nvim-cmp" }, + load = load_w_after_plugin, + }, + { + "cmp_luasnip", + on_plugin = { "nvim-cmp" }, + load = load_w_after_plugin, + }, + { + "friendly-snippets", + dep_of = { "nvim-cmp" }, + load = load_w_after_plugin, + }, + { + "lspkind.nvim", + dep_of = { "nvim-cmp" }, + load = load_w_after_plugin, + }, + { + "luasnip", + dep_of = { "nvim-cmp" }, + after = function (plugin) + local luasnip = require 'luasnip' + require('luasnip.loaders.from_vscode').lazy_load() + luasnip.config.setup {} + + local ls = require('luasnip') + + vim.keymap.set({ "i", "s" }, "", function() + if ls.choice_active() then + ls.change_choice(1) + end + end) + end, + }, + { + "nvim-cmp", + -- cmd = { "" }, + event = { "DeferredUIEnter" }, + on_require = { "cmp" }, + -- ft = "", + -- keys = "", + -- colorscheme = "", + after = function (plugin) + -- [[ Configure nvim-cmp ]] + -- See `:help cmp` + local cmp = require 'cmp' + local luasnip = require 'luasnip' + local lspkind = require 'lspkind' + + cmp.setup { + formatting = { + format = lspkind.cmp_format { + mode = 'text', + with_text = true, + maxwidth = 50, -- prevent the popup from showing more than provided characters (e.g 50 will not show more than 50 characters) + ellipsis_char = '...', -- when popup menu exceed maxwidth, the truncated part would show ellipsis_char instead (must define maxwidth first) + + menu = { + buffer = '[BUF]', + nvim_lsp = '[LSP]', + nvim_lsp_signature_help = '[LSP]', + nvim_lsp_document_symbol = '[LSP]', + nvim_lua = '[API]', + path = '[PATH]', + luasnip = '[SNIP]', + }, + }, + }, + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert { + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete {}, + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }, + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { 'i', 's' }), + }, + + sources = cmp.config.sources { + -- The insertion order influences the priority of the sources + { name = 'nvim_lsp'--[[ , keyword_length = 3 ]] }, + { name = 'nvim_lsp_signature_help'--[[ , keyword_length = 3 ]]}, + { name = 'path' }, + { name = 'luasnip' }, + { name = 'buffer' }, + }, + enabled = function() + return vim.bo[0].buftype ~= 'prompt' + end, + experimental = { + native_menu = false, + ghost_text = false, + }, + } + + cmp.setup.filetype('lua', { + sources = cmp.config.sources { + { name = 'nvim_lua' }, + { name = 'nvim_lsp'--[[ , keyword_length = 3 ]]}, + { name = 'nvim_lsp_signature_help'--[[ , keyword_length = 3 ]]}, + { name = 'path' }, + { name = 'luasnip' }, + { name = 'buffer' }, + },{ + { + name = 'cmdline', + option = { + ignore_cmds = { 'Man', '!' }, + }, + }, + }, + }) + + -- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). + cmp.setup.cmdline({ '/', '?' }, { + mapping = cmp.mapping.preset.cmdline(), + sources = { + { name = 'nvim_lsp_document_symbol'--[[ , keyword_length = 3 ]]}, + { name = 'buffer' }, + { name = 'cmdline_history' }, + }, + view = { + entries = { name = 'wildmenu', separator = '|' }, + }, + }) + + -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). + cmp.setup.cmdline(':', { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources { + { name = 'cmdline' }, + -- { name = 'cmdline_history' }, + { name = 'path' }, + }, + }) + end, + }, +} diff --git a/homes/modules/programs/neovim/lua/lsp/init.lua b/homes/modules/programs/neovim/lua/lsp/init.lua new file mode 100644 index 0000000..1fae8a8 --- /dev/null +++ b/homes/modules/programs/neovim/lua/lsp/init.lua @@ -0,0 +1,5 @@ +require("lze").load { + { import = "lsp.completion", }, +} + +require("lsp.lsp") diff --git a/homes/modules/programs/neovim/lua/lsp/lsp.lua b/homes/modules/programs/neovim/lua/lsp/lsp.lua new file mode 100644 index 0000000..6548bf3 --- /dev/null +++ b/homes/modules/programs/neovim/lua/lsp/lsp.lua @@ -0,0 +1,123 @@ +local servers = {} + +servers.lua_ls = { + settings = { + Lua = { + formatters = { + ignoreComments = false, + }, + signatureHelp = { enable = true }, + diagnostics = { + globals = { 'nixCats', 'vim' }, + -- disable = { 'missing-fields' }, + }, + workspace = { + -- make the server aware of the neovim runtime files + library = vim.api.nvim_get_runtime_file("", true), + checkThirdParty = false, + }, + }, + telemetry = { enabled = false }, + }, +} + +local rust_analyzer_cmd = os.getenv("RUST_ANALYZER_CMD") +servers.rust_analyzer = { + cmd = { rust_analyzer_cmd }, + settings = { + server = { + -- For debugging rust-analyzer, to see log location do :LspInfo in neovim + -- extraEnv = { {["RA_LOG"]="project_model=debug"} }, + }, + cargo = { + allFeatures = false, + allTargets = false, + buildScripts = { enable = true }, + target = "x86_64-unknown-linux-gnu", + }, + diagnostics = { + enable = true, + }, + }, +} + +servers.zls = { + settings = {}, +} + +local elixir_ls_cmd = os.getenv("ELIXIR_LS_CMD") +servers.elixirls = { + cmd = { elixir_ls_cmd }, + settings = {}, +} + +servers.gleam = { + settings = {}, +} + +local java_home = os.getenv("JAVA_HOME") +servers.jdtls = { + settings = { + java = { + contentProvider = { preferred = 'fernflower' }, + configuration = { + runtimes = { + { + name = "OpenJDK 17", + path = os.getenv("OPENJDK_17"), + }, + { + name = "OpenJDK 21", + path = os.getenv("OPENJDK_21"), + }, + } + } + }, + } +} + +-- Taken from nixCats example: +-- If you were to comment out this autocommand +-- and instead pass the on attach function directly to +-- nvim-lspconfig, it would do the same thing. +-- come to think of it, it might be better because then lspconfig doesnt have to be called before lsp attach? +-- but you would still end up triggering on a FileType event anyway, so, it makes little difference. +vim.api.nvim_create_autocmd('LspAttach', { + group = vim.api.nvim_create_augroup('nixCats-lsp-attach', { clear = true }), + callback = function(event) + require('lsp.capabilities').on_attach(vim.lsp.get_client_by_id(event.data.client_id), event.buf) + end +}) + +require("lze").load { + { + "nvim-lspconfig", + event = "FileType", + after = function(plugin) + -- Just register configs, don't enable yet + for server_name, cfg in pairs(servers) do + vim.lsp.config(server_name, { + capabilities = require('lsp.capabilities').get(server_name), + settings = (cfg or {}).settings, + filetypes = (cfg or {}).filetypes, + cmd = (cfg or {}).cmd, + root_pattern = (cfg or {}).root_pattern, + }) + end + + -- Enable on-demand per filetype + for server_name, cfg in pairs(servers) do + local filetypes = cfg.filetypes or vim.lsp.config[server_name].filetypes + if filetypes then + vim.api.nvim_create_autocmd('FileType', { + pattern = filetypes, + callback = function() + vim.lsp.enable(server_name) + end, + }) + end + end + end, + }, +} + diff --git a/homes/modules/programs/neovim/lua/nixCatsUtils/lzUtils.lua b/homes/modules/programs/neovim/lua/nixCatsUtils/lzUtils.lua new file mode 100644 index 0000000..0667276 --- /dev/null +++ b/homes/modules/programs/neovim/lua/nixCatsUtils/lzUtils.lua @@ -0,0 +1,135 @@ +--[[ + This directory is the luaUtils template. + You can choose what things from it that you would like to use. + And then delete the rest. + Everything in this directory is optional. +--]] + +local M = {} +-- NOTE: This file contains 2 utilities for making good use of lze and lz.n with nixCats +-- The function for loading after directories is useful for both plugins, and also for lazy loading without a plugin, +-- but the custom handler will only work with lze. +-- If you dont use these plugins, you probably don't need this file. + +---This function is useful for sourcing the after directories of lazily loaded plugins +---because vim.cmd.packadd does not do this for you. +--- +---This might be useful when doing lazy loading the vanilla way +---as well as when using plugins like lz.n for lazy loading +---It is primarily useful for lazily loading nvim-cmp sources, +---as they often rely on the after directory to work +--- +---Recieves the names of directories from a plugin's after directory +---that you wish to source files from. +---Will return a load function that can take a name, or list of names, +---and will load a plugin and its after directories. +---The function returned is a suitable substitute for the load field of a plugin spec. +--- +---Only makes sense for plugins added via optionalPlugins +---or some other opt directory on your packpath +--- +---e.g. in the following example: +---load_with_after_plugin will load the plugin names it is given, and their after/plugin dir +--- +---local load_with_after_plugin = require('nixCatsUtils').make_load_with_after({ 'plugin' }) +---load_with_after_plugin('some_plugin') +---@overload fun(dirs: string[]|string): fun(names: string|string[]) +---It also optionally recieves a function that should load a plugin and return its path +---for if the plugin is not on the packpath, or return nil +---to load from the packpath or nixCats list as normal +---@overload fun(dirs: string[]|string, load: fun(name: string):string|nil): fun(names: string|string[]) +function M.make_load_with_after(dirs, load) + dirs = (type(dirs) == "table" and dirs) or { dirs } + local fromPackpath = function(name) + for _, packpath in ipairs(vim.opt.packpath:get()) do + local plugin_path = vim.fn.globpath(packpath, "pack/*/opt/" .. name, nil, true, true) + if plugin_path[1] then + return plugin_path[1] + end + end + return nil + end + ---@param plugin_names string[]|string + return function(plugin_names) + local names = type(plugin_names) == "table" and plugin_names or { plugin_names } + local to_source = {} + for _, name in ipairs(names) do + if type(name) == "string" then + local path = (type(load) == "function" and load(name)) or nil + if type(path) == "string" then + table.insert(to_source, { name = name, path = path }) + else + local ok, err = pcall(vim.cmd.packadd, name) + if ok then + table.insert(to_source, { name = name, path = nil }) + else + vim.notify( + '"packadd ' + .. name + .. '" failed, and path provided by custom load function (if provided) was not a string\n' + .. err, + vim.log.levels.WARN, + { title = "nixCatsUtils.load_with_after" } + ) + end + end + else + vim.notify( + "plugin name was not a string and was instead of value:\n" .. vim.inspect(name), + vim.log.levels.WARN, + { title = "nixCatsUtils.load_with_after" } + ) + end + end + for _, info in pairs(to_source) do + local plugpath = info.path or vim.tbl_get(package.loaded, "nixCats", "pawsible", "allPlugins", "opt", info.name) or fromPackpath(info.name) + if type(plugpath) == "string" then + local afterpath = plugpath .. "/after" + for _, dir in ipairs(dirs) do + if vim.fn.isdirectory(afterpath) == 1 then + local plugin_dir = afterpath .. "/" .. dir + if vim.fn.isdirectory(plugin_dir) == 1 then + local files = vim.fn.glob(plugin_dir .. "/*", false, true) + for _, file in ipairs(files) do + if vim.fn.filereadable(file) == 1 then + vim.cmd("source " .. file) + end + end + end + end + end + end + end + end +end + +-- A nixCats specific lze handler that you can use to conditionally enable by category easier. +-- at the start of your config, register with +-- require('lze').register_handlers(require('nixCatsUtils.lzUtils').for_cat) +-- before any calls to require('lze').load using the handler have been made. +-- accepts: +-- for_cat = { "your" "cat" }; for_cat = { cat = { "your" "cat" }, default = bool } +-- for_cat = "your.cat"; for_cat = { cat = "your.cat", default = bool } +-- where default is an alternate value for when nixCats was NOT used to install the config +M.for_cat = { + spec_field = "for_cat", + set_lazy = false, + modify = function(plugin) + if type(plugin.for_cat) == "table" then + if plugin.for_cat.cat ~= nil then + if vim.g[ [[nixCats-special-rtp-entry-nixCats]] ] ~= nil then + plugin.enabled = (nixCats(plugin.for_cat.cat) and true) or false + else + plugin.enabled = nixCats(plugin.for_cat.default) + end + else + plugin.enabled = (nixCats(plugin.for_cat) and true) or false + end + else + plugin.enabled = (nixCats(plugin.for_cat) and true) or false + end + return plugin + end, +} + +return M diff --git a/homes/modules/programs/neovim/lua/plugins/dressing.lua b/homes/modules/programs/neovim/lua/plugins/dressing.lua new file mode 100644 index 0000000..bca1775 --- /dev/null +++ b/homes/modules/programs/neovim/lua/plugins/dressing.lua @@ -0,0 +1,5 @@ +return { + { + "dressing.nvim" + }, +} diff --git a/homes/modules/programs/neovim/lua/plugins/fyler.lua b/homes/modules/programs/neovim/lua/plugins/fyler.lua new file mode 100644 index 0000000..dd2bdab --- /dev/null +++ b/homes/modules/programs/neovim/lua/plugins/fyler.lua @@ -0,0 +1,15 @@ +return { + { + "fyler.nvim", + cmd = { "Fyler" }, + keys = { + { "tf", function() return require('fyler').toggle({ kind = "split_right" }) end, mode = {"n"}, desc = 'Open [F]yler' }, + }, + load = function (name) + vim.cmd.packadd(name) + end, + after = function(plugin) + local fyler = require("fyler").setup() + end, + }, +} diff --git a/homes/modules/programs/neovim/lua/plugins/init.lua b/homes/modules/programs/neovim/lua/plugins/init.lua new file mode 100644 index 0000000..20c38db --- /dev/null +++ b/homes/modules/programs/neovim/lua/plugins/init.lua @@ -0,0 +1,8 @@ +require("lze").load { + { import = "plugins.dressing", }, + { import = "plugins.telescope", }, + { import = "plugins.treesitter", }, + { import = "plugins.fyler", }, + { import = "plugins.mini-hipatterns", }, + --{ import = "plugins.neocord", }, +} diff --git a/homes/modules/programs/neovim/lua/plugins/mini-hipatterns.lua b/homes/modules/programs/neovim/lua/plugins/mini-hipatterns.lua new file mode 100644 index 0000000..a7c6c2a --- /dev/null +++ b/homes/modules/programs/neovim/lua/plugins/mini-hipatterns.lua @@ -0,0 +1,76 @@ +return { + { + "mini.hipatterns", + after = function(plugin) + local hipatterns = require("mini.hipatterns") + + -- Returns hex color group for matching short hex color. + -- + ---@param match string + ---@return string + local hex_color_short = function(_, match) + local style = 'fg' -- 'fg' or 'bg', for extmark_opts_inline use 'fg' + local r, g, b = match:sub(2, 2), match:sub(3, 3), match:sub(4, 4) + local hex = string.format('#%s%s%s%s%s%s', r, r, g, g, b, b) + return hipatterns.compute_hex_color_group(hex, style) + end + + -- Returns hex color group for matching alpha hex color. + -- + ---@param match string + ---@return string + local hex_color_alpha = function(_, match) + local style = 'fg' -- 'fg' or 'bg', for extmark_opts_inline use 'fg' + local r, g, b = match:sub(2, 3), match:sub(4, 5), match:sub(6, 7) + local hex = string.format('#%s%s%s', r, g, b) + return hipatterns.compute_hex_color_group(hex, style) + end + + -- Returns extmark opts for highlights with virtual inline text. + -- + ---@param data table Includes `hl_group`, `full_match` and more. + ---@return table + local extmark_opts_inline = function(_, _, data) + return { + virt_text = { { '󰧞', data.hl_group } }, + virt_text_pos = 'inline', + right_gravity = false, + } + end + + -- Returns extmark opts for highlights with virtual inline text. + -- + ---@param data table Includes `hl_group`, `full_match` and more. + ---@return table + local extmark_opts_inline_alpha = function(_, _, data) + return { + virt_text = { { '󱡓', data.hl_group } }, + virt_text_pos = 'inline', + right_gravity = false, + } + end + + hipatterns.setup({ + highlighters = { + -- #rrggbb + hex_color = hipatterns.gen_highlighter.hex_color({ + style = "inline", + inline_text = '󰧞', + }), + -- #rgb + hex_color_short = { + pattern = "#%x%x%x%f[%X]", + group = hex_color_short, + extmark_opts = extmark_opts_inline, + }, + -- #rrggbbaa + hex_color_alpha = { + pattern = "#%x%x%x%x%x%x%x%x%f[%X]", + group = hex_color_alpha, + extmark_opts = extmark_opts_inline_alpha, + }, + }, + }) + end, + }, +} diff --git a/homes/modules/programs/neovim/lua/plugins/neocord.lua b/homes/modules/programs/neovim/lua/plugins/neocord.lua new file mode 100644 index 0000000..5efb242 --- /dev/null +++ b/homes/modules/programs/neovim/lua/plugins/neocord.lua @@ -0,0 +1,5 @@ +return { + { + "neocord", + }, +} diff --git a/homes/modules/programs/neovim/lua/plugins/telescope.lua b/homes/modules/programs/neovim/lua/plugins/telescope.lua new file mode 100644 index 0000000..919f3bd --- /dev/null +++ b/homes/modules/programs/neovim/lua/plugins/telescope.lua @@ -0,0 +1,36 @@ +return { + { + "telescope.nvim", + cmd = { "Telescope" }, + keys = { + { "f", function() return require('telescope.builtin').find_files() end, mode = {"n"}, desc = 'Telescope search [F]iles' }, + { "tr", function() return require('telescope.builtin').oldfiles() end, mode = {"n"}, desc = '[T]elescope search [R]ecent files' }, + { "ts", function() return require('telescope.builtin').live_grep() end, mode = {"n"}, desc = '[T]elescope [S]earch cwd with grep' }, + { "tw", function() return require('telescope.builtin').grep_string() end, mode = {"n"}, desc = '[T]elescope search current [W]ord' }, + { "tk", function() return require('telescope.builtin').keymaps() end, mode = {"n"}, desc = '[T]elescope search [K]eymaps' }, + { "tb", function() return require('telescope.builtin').buffers() end, mode = {"n"}, desc = '[T]elescope search [B]uffers' }, + }, + load = function (name) + vim.cmd.packadd(name) + vim.cmd.packadd("telescope-fzf-native.nvim") + end, + after = function(plugin) + local telescope = require("telescope") + local actions = require("telescope.actions") + + telescope.setup { + defaults = { + mappings = { + i = { + [""] = actions.move_selection_previous, -- move to prev result + [""] = actions.move_selection_next, -- move to next result + [""] = actions.send_selected_to_qflist + actions.open_qflist + } + } + } + } + + pcall(telescope.load_extension, "fzf") + end, + }, +} diff --git a/homes/modules/programs/neovim/lua/plugins/treesitter.lua b/homes/modules/programs/neovim/lua/plugins/treesitter.lua new file mode 100644 index 0000000..489ecf9 --- /dev/null +++ b/homes/modules/programs/neovim/lua/plugins/treesitter.lua @@ -0,0 +1,95 @@ +-- to help me write this after nvim-treesitter updated, i used: +-- https://github.com/BirdeeHub/nixCats-nvim/blob/3c9bc4d7123e1b48d92f25ba505b889af541e897/templates/example/lua/myLuaConf/plugins/treesitter.lua + +return { + { + "nvim-treesitter", + lazy = false, + after = function (plugin) + --@param buf integer + --@param language string + local function treesitter_try_attach(buf, language) + --check if parser exists and load it + if not vim.treesitter.language.add(language) then + return + end + + -- enables syntax highlight and other treesitter features + vim.treesitter.start(buf, language) + + -- enables treesitter based folds + vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()" + + -- enables treesiter based indentation + vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" + end + + local available_parsers = require("nvim-treesitter").get_available() + vim.api.nvim_create_autocmd("FileType", { + callback = function(args) + local buf, filetype = args.buf, args.match + local language = vim.treesitter.language.get_lang(filetype) + if not language then + return + end + + local installed_parsers = require("nvim-treesitter").get_installed("parsers") + + if vim.tbl_contains(installed_parsers, language) then + -- enable the parser if it is installed + treesitter_try_attach(buf, language) + elseif vim.tbl_contains(available_parsers, language) then + -- if a parser is available in `nvim-treesitter` enable it after ensuring it is installed + require("nvim-treesitter").install(language):await(function() + treesitter_try_attach(buf, language) + end) + else + -- try to enable treesitter features in case the parser exists but is not available from `nvim-treesitter` + treesitter_try_attach(buf, language) + end + end, + }) + end, + }, + { + "nvim-treesitter-textobjects", + lazy = false, + before = function(plugin) + vim.g.no_plugin_maps = true + end, + after = function(plugin) + require("nvim-treesitter-textobjects").setup { + select = { + lookahead = true, + selection_modes = { + ['@parameter.outer'] = 'v', -- charwise + ['@function.outer'] = 'V', -- linewise + }, + include_surrounding_whitespace = false, + }, + } + + -- keymaps + vim.keymap.set({ "x", "o" }, "am", function() + require "nvim-treesitter-textobjects.select".select_textobject("@function.outer", "textobjects") + end) + vim.keymap.set({ "x", "o" }, "im", function() + require "nvim-treesitter-textobjects.select".select_textobject("@function.inner", "textobjects") + end) + vim.keymap.set({ "x", "o" }, "ac", function() + require "nvim-treesitter-textobjects.select".select_textobject("@class.outer", "textobjects") + end) + vim.keymap.set({ "x", "o" }, "ic", function() + require "nvim-treesitter-textobjects.select".select_textobject("@class.inner", "textobjects") + end) + -- You can also use captures from other query groups like `locals.scm` + vim.keymap.set({ "x", "o" }, "as", function() + require "nvim-treesitter-textobjects.select".select_textobject("@local.scope", "locals") + end) + + -- NOTE: for more textobjects options, see the following link. + -- This template is using the new `main` branch of the repo. + -- https://github.com/nvim-treesitter/nvim-treesitter-textobjects/tree/main + end, + }, +} diff --git a/homes/modules/programs/neovim/nixcats.nix b/homes/modules/programs/neovim/nixcats.nix new file mode 100644 index 0000000..169b2f8 --- /dev/null +++ b/homes/modules/programs/neovim/nixcats.nix @@ -0,0 +1,213 @@ +{ config, lib, inputs, upkgs, ... }: let + utils = inputs.nixcats.utils; +in { + imports = [ + inputs.nixcats.homeModule + ]; + + config = { + # this value, nixCats is the defaultPackageName you pass to mkNixosModules + # it will be the namespace for your options. + nixCats = { + enable = true; + nixpkgs_version = inputs.nixpkgs; + # this will add the overlays from ./overlays and also, + # add any plugins in inputs named "plugins-pluginName" to pkgs.neovimPlugins + # It will not apply to overall system, just nixCats. + addOverlays = /* (import ./overlays inputs) ++ */ [ + (utils.standardPluginOverlay inputs) + ]; + # see the packageDefinitions below. + # This says which of those to install. + packageNames = [ "auroranvim" ]; + + luaPath = "${./.}"; + + # the .replace vs .merge options are for modules based on existing configurations, + # they refer to how multiple categoryDefinitions get merged together by the module. + # for useage of this section, refer to :h nixCats.flake.outputs.categories + categoryDefinitions.replace = ({ pkgs, settings, categories, extra, name, mkNvimPlugin, ... }@packageDef: { + lspsAndRuntimeDeps = { + general = with pkgs; [ + ripgrep + fd + ]; + treesitter = with pkgs; [ + tree-sitter + ]; + lang = with pkgs; { + lua = [ + lua-language-server + ]; + nix = [ + nil + nix-doc + ]; + rust = with pkgs; [ + cargo + rust-analyzer + ]; + zig = with pkgs; [ + upkgs.zls # FIX: using upkgs version as zls is broken rn ;-; + ]; + elixir = with pkgs; [ + elixir-ls + ]; + gleam = with pkgs; [ + gleam + ]; + java = with pkgs; [ + jdt-language-server + javaPackages.compiler.openjdk17 + javaPackages.compiler.openjdk21 + ]; + }; + }; + + startupPlugins = { + general = with pkgs.vimPlugins; [ + lze + plenary-nvim + nvim-notify + nvim-web-devicons + base16-nvim + mini-nvim + ]; + treesitter = with pkgs.vimPlugins; [ + nvim-treesitter-textobjects + nvim-treesitter.withAllGrammars + ]; + }; + optionalPlugins = { + general = with pkgs.vimPlugins; [ + ]; + ui = with pkgs.vimPlugins; [ + dressing-nvim + ]; + qol = with pkgs.vimPlugins; [ + undotree + mini-hipatterns + ]; + telescope = with pkgs.vimPlugins; [ + telescope-nvim + telescope-fzf-native-nvim + telescope-ui-select-nvim + ]; + fyler = with pkgs.vimPlugins; [ + fyler-nvim + ]; + lsp = with pkgs.vimPlugins; [ + nvim-lspconfig + ]; + completion = with pkgs.vimPlugins; [ + blink-cmp + nvim-cmp + luasnip + friendly-snippets + cmp_luasnip + cmp-buffer + cmp-path + cmp-nvim-lua + cmp-nvim-lsp + cmp-cmdline + cmp-nvim-lsp-signature-help + cmp-cmdline-history + lspkind-nvim + ]; + lang = with pkgs.vimPlugins; { + java = [ + nvim-jdtls + ]; + }; + discord = with pkgs.vimPlugins; [ + neocord # discord presence plugin :3 + ]; + }; + + # shared libraries to be added to LD_LIBRARY_PATH + # variable available to nvim runtime + sharedLibraries = { + general = with pkgs; [ + # libgit2 + ]; + }; + environmentVariables = { + lang = { + rust = { + # it literally won't see the rust-analyzer provided to it + # if you don't use an envrionment variable to tell it + RUST_ANALYZER_CMD = "${pkgs.rust-analyzer}/bin/rust-analyzer"; + }; + elixir = { + ELIXIR_LS_CMD = "${pkgs.elixir-ls}/scripts/language_server.sh"; + }; + java = { + JAVA_HOME = "${pkgs.javaPackages.compiler.openjdk17}"; + OPENJDK_17 = "${pkgs.javaPackages.compiler.openjdk17}"; + OPENJDK_21 = "${pkgs.javaPackages.compiler.openjdk21}"; + }; + }; + }; + extraWrapperArgs = { + test = [ + '' --set CATTESTVAR2 "It worked again!"'' + ]; + }; + # lists of the functions you would have passed to + # python.withPackages or lua.withPackages + + # get the path to this python environment + # in your lua config via + # vim.g.python3_host_prog + # or run from nvim terminal via :!-python3 + extraPython3Packages = { + test = (_:[]); + }; + # populates $LUA_PATH and $LUA_CPATH + extraLuaPackages = { + test = [ (_:[]) ]; + }; + }); + + # see :help nixCats.flake.outputs.packageDefinitions + packageDefinitions.replace = { + # these are the names of your packages + # you can include as many as you wish. + auroranvim = {pkgs , ... }: { + # they contain a settings set defined above + # see :help nixCats.flake.outputs.settings + settings = { + wrapRc = true; + # IMPORTANT: + # your alias may not conflict with your other packages. + aliases = [ "auroravim" "auravim" "foxyvim" "avix" "fvix" "auim" ]; + }; + # and a set of categories that you want + # (and other information to pass to lua) + categories = { + general = true; + + ui = true; + qol = true; + telescope = true; + fyler = true; + lsp = true; + completion = true; + treesitter = true; + discord = false; + + lang = { + lua = true; + nix = true; + rust = true; + zig = true; + elixir = true; + gleam = true; + java = true; + }; + }; + }; + }; + }; + }; +} diff --git a/homes/modules/programs/nixcord.nix b/homes/modules/programs/nixcord.nix new file mode 100644 index 0000000..d1d9e2b --- /dev/null +++ b/homes/modules/programs/nixcord.nix @@ -0,0 +1,250 @@ +{ config, inputs, lib, pkgs, ... }: +{ + imports = [ + inputs.nixcord.homeModules.nixcord + ]; + + programs.nixcord = { + enable = true; + equibop.enable = true; + + discord = { + vencord.enable = false; + equicord.enable = true; + }; + + config = { + enabledThemes = [ + "aurorastheme.css" + "base16-colors.css" + ]; + plugins = { + anonymiseFileNames = { + enable = true; + anonymiseByDefault = true; + method = 0; + randomisedLength = 16; + }; + betterSessions = { + backgroundCheck = true; + checkInterval = 1; + }; + biggerStreamPreview.enable = true; + callTimer.enable = true; + fixYoutubeEmbeds.enable = true; + fixSpotifyEmbeds.enable = true; + tidalEmbeds.enable = true; + youtubeAdblock.enable = true; + followVoiceUser.enable = true; + friendsSince.enable = true; + ircColors = { + enable = true; + lightness = 80; + memberListColors = true; + applyColorOnlyInDms = false; + applyColorOnlyToUsersWithoutColor = false; + }; + messageLogger = { + enable = true; + showEditDiffs = true; + separatedDiffs = false; + }; + fakeNitro.enable = true; + ghosted.enable = true; + noF1.enable = true; + noMaskedUrlPaste.enable = true; + messageLatency = { + enable = false; + latency = -1; + showMillis = true; + }; + openInApp.enable = true; + crashHandler.enable = true; + disableCallIdle.enable = true; + experiments.enable = true; + expressionCloner.enable = true; + favoriteGifSearch.enable = true; + fixImagesQuality.enable = true; + forceOwnerCrown.enable = true; + forwardAnywhere.enable = true; + spotifyCrack.enable = true; + spotifyShareCommands.enable = true; + spotifyControls.enable = true; + fullUserInChatbox.enable = true; + gifPaste.enable = true; + ignoreActivities = { + enable = true; + ignorePlaying = true; + ignoreStreaming = true; + ignoreListening = true; + ignoreWatching = true; + ignoreCompeting = true; + }; + imageLink.enable = true; + imageZoom.enable = true; + memberCount.enable = true; + noDevtoolsWarning.enable = true; + noUnblockToJump.enable = true; + pauseInvitesForever.enable = true; + permissionsViewer.enable = true; + pictureInPicture = { + enable = true; + loop = true; + }; + platformIndicators.enable = true; + previewMessage.enable = true; + relationshipNotifier.enable = true; + revealAllSpoilers.enable = true; + serverInfo.enable = true; + serverListIndicators.enable = true; + showHiddenChannels.enable = true; + showHiddenThings.enable = true; + showTimeoutDuration = { + enable = true; + displayStyle = "tooltip"; + }; + silentTyping = { + enable = true; + enabledGlobally = false; + }; + startupTimings.enable = true; + typingIndicator.enable = true; + unlockedAvatarZoom = { + enable = true; + zoomMultiplier = 4.0; + }; + userMessagesPronouns.enable = true; + validUser.enable = true; + validReply.enable = true; + viewIcons = { + enable = true; + format = "webp"; + imgSize = "4096"; + }; + voiceChatDoubleClick.enable = true; + voiceDownload.enable = true; + voiceMessages = { + enable = true; + noiseSuppression = false; + echoCancellation = true; + }; + volumeBooster.enable = true; + webKeybinds.enable = true; + webScreenShareFixes.enable = true; + whoReacted.enable = true; + whosWatching.enable = true; + quickReply.enable = true; + questCompleter.enable = true; + shikiCodeblocks = { + enable = true; + useDevIcon = "COLOR"; + theme = "https://raw.githubusercontent.com/shikijs/textmate-grammars-themes/2d87559c7601a928b9f7e0f0dda243d2fb6d4499/packages/tm-themes/themes/kanagawa-wave.json"; + }; + }; + }; + }; + + programs.nixcord.config.plugins.PinDMs = { + enable = true; + canCollapseDmSection = true; + userBasedCategoryList = { + "1202666382760607774" = [ + { + id = "i9dflmraztc"; + name = "🏳️‍⚧️ girlfriends!!! :3 🏳️‍⚧️"; + color = 16359423; + collapsed = false; + channels = [ + "1436964273162289185" + "1436988320474206311" + "1449837047383855119" + "1436965652861685891" + "1436968495190642722" + "1465424321919975454" + ]; + } + { + id = "p2v1f5y9zbd"; + name = "🦋 best frens <3 🦋"; + color = 10223511; + collapsed = false; + channels = [ + "1436985374286155799" + "1436965657076826222" + "1429921297160212681" + "1394808379381387385" + "1433593753183977545" + "1438254055452446881" + "1436966389549236376" + "1202678007026819134" + "1437151552224624660" + "1441906462094921789" + "1450340272079769712" + "1458123717124165764" + "1436975341129306155" + "1461885176534794427" + "1462155159470866443" + "1468735915076878407" + ]; + } + { + id = "c0mg5w635j8"; + name = "🏳️‍🌈 close frens x3 🏳️‍🌈"; + color = 10780927; + collapsed = false; + channels = [ + "1437077103873888290" + "1436975346338762823" + "1437123353101205590" + "1441516692164575283" + "1419557866502754334" + "1436985041203892315" + "1438071327515742229" + ]; + } + { + id = "ghjrq5el3b"; + name = "frens :3"; + color = 7334399; + collapsed = false; + channels = [ + "1437007154132422701" + "1437006448948416526" + "1446781617422209068" + "1444723474835837103" + "1437098569483161721" + "1437237573146771469" + "1436973705421914123" + "1437135359359320125" + "1438010723837022343" + "1440553969461104740" + "1437097082887475201" + "1447222320015085740" + "1462624704027164824" + "1449513783893692589" + "1463737720961634461" + "1463000874392748249" + "1461929299727749145" + "1436984534712451105" + "1436983282582683813" + "1437283420312047659" + "1437089201651847315" + "1468324280445046824" + "1467307140443148288" + ]; + } + { + id = "zbmj00xw7d8"; + name = "goop chats"; + color = 14876549; + collapsed = false; + channels = [ + "1437132769141719040" + "1445549416516681902" + "1458849972815663209" + ]; + } + ]; + }; + }; +} diff --git a/homes/modules/programs/spicetify.nix b/homes/modules/programs/spicetify.nix new file mode 100644 index 0000000..896d0b7 --- /dev/null +++ b/homes/modules/programs/spicetify.nix @@ -0,0 +1,26 @@ +{ inputs, lib, pkgs, ... }: +let + spicetifyPkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in { + imports = [ inputs.spicetify-nix.homeManagerModules.default ]; + programs.spicetify = { + enable = true; + + enabledExtensions = with spicetifyPkgs.extensions; [ + adblock + shuffle + keyboardShortcut + ({ + src = (pkgs.fetchFromGitHub { + owner = "Spikerko"; + repo = "spicy-lyrics"; + rev = "568c83326aa6aba6ded28c95df6fcfb25cab3648"; + hash = "sha256-lej93EDzGkmyrg5YMdPSqzrxlIfKsfaDBZosTvxoTNw="; + }) + /builds; + name = "spicy-lyrics.mjs"; + }) + ]; + theme = spicetifyPkgs.themes.comfy; + colorScheme = "Sakura"; + }; +} diff --git a/homes/modules/programs/yazi/yazi.nix b/homes/modules/programs/yazi/yazi.nix new file mode 100644 index 0000000..54c26be --- /dev/null +++ b/homes/modules/programs/yazi/yazi.nix @@ -0,0 +1,86 @@ +{ config, inputs, lib, pkgs, ... }: +{ + # optional dependencies can be found here: + # https://yazi-rs.github.io/docs/installation/ + home.packages = with pkgs; [ # dependencies + ripdrag + ]; + + programs.yazi = { + enable = true; + enableZshIntegration = false; # i mod"if"ied the script in my .zshrc + + settings = { + mgr = { + show_hidden = true; + }; + log = { + enabled = false; + }; + }; + + keymap = { + mgr.prepend_keymap = [ + # drag and drop!! + { on = [ "" ]; run = ''shell "ripdrag -x -a \"$@\"" --confirm''; } + # copy hovered file to clipboard + { on = [ "" ]; run = ''shell -- path=%h; echo "file://$path" | wl-copy -t text/uri-list''; } + ]; + }; + + # they changed it to custom colors, i don't like that, so this is the config + # i did like: + # https://github.com/sxyazi/yazi/blob/97d0c6bb23df413f4add8b888071233c912c49a3/yazi-config/preset/theme-dark.toml + theme = { + icon = { + dirs = [ + { name = ".config"; text = ""; fg = "red"; } + { name = ".git"; text = ""; fg = "blue"; } + { name = ".github"; text = ""; fg = "blue"; } + { name = ".npm"; text = ""; fg = "blue"; } + { name = "Desktop"; text = ""; fg = "magenta"; } + { name = "Documents"; text = ""; fg = "magenta"; } + { name = "Downloads"; text = ""; fg = "red"; } + { name = "Library"; text = ""; fg = "magenta"; } + { name = "Movies"; text = ""; fg = "magenta"; } + { name = "Music"; text = ""; fg = "magenta"; } + { name = "Pictures"; text = ""; fg = "magenta"; } + { name = "Public"; text = ""; fg = "magenta"; } + { name = "Videos"; text = ""; fg = "red"; } + ]; + conds = [ + # special files + { "if" = "orphan"; text = ""; } + { "if" = "link"; text = ""; } + { "if" = "block"; text = ""; } + { "if" = "char"; text = ""; } + { "if" = "fifo"; text = ""; } + { "if" = "sock"; text = ""; } + { "if" = "sticky"; text = ""; } + { "if" = "dummy"; text = ""; } + + # fallback + { "if" = "dir"; text = ""; fg = "blue"; } + { "if" = "exec"; text = ""; } + { "if" = "!dir"; text = ""; } + ]; + }; + }; + }; + + # helped me fix it not working: + # https://github.com/hunkyburrito/xdg-desktop-portal-termfilechooser/issues/56 + # also, the portal must be enabled in configuration.nix + # i can't seem to get it working any other way + xdg.configFile."xdg-desktop-portal-termfilechooser/config" = { + force = true; + text = '' + [filechooser] + cmd=${pkgs.xdg-desktop-portal-termfilechooser}/share/xdg-desktop-portal-termfilechooser/yazi-wrapper.sh + default_dir=$HOME + env=TERMCMD='kitty --title filechooser' + open_mode=suggested + save_mode=last + ''; + }; +} diff --git a/homes/modules/scripts/task-manager.sh b/homes/modules/scripts/task-manager.sh new file mode 100755 index 0000000..068eb79 --- /dev/null +++ b/homes/modules/scripts/task-manager.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +pkill -f "kitty --title btop -e btop" || { kitty --title btop -e btop & disown; } diff --git a/homes/modules/services/dunst.nix b/homes/modules/services/dunst.nix new file mode 100644 index 0000000..31c3453 --- /dev/null +++ b/homes/modules/services/dunst.nix @@ -0,0 +1,33 @@ +{ config, inputs, pkgs, ... }: +let + unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + home.packages = with pkgs; [ + libnotify + ]; + + services.dunst = { + enable = true; + settings = { + global = { + monitor = "DP-3"; # second monitor + origin = "top-left"; + layer = "top"; # above windows, below fullscreen + offset = "(16, 24)"; + + padding = 4; + gap_size = 4; + frame_width = 2; + + font = "DepartureMono Nerd Font 8"; + + corner_radius = 12; + icon_corner_radius = 12; + + progress_bar = true; + progress_bar_height = 16; + }; + }; + }; +} diff --git a/homes/modules/services/keepassxc/keepassxc.ini b/homes/modules/services/keepassxc/keepassxc.ini new file mode 100644 index 0000000..e9ab2aa --- /dev/null +++ b/homes/modules/services/keepassxc/keepassxc.ini @@ -0,0 +1,12 @@ +[General] +ConfigVersion=2 + +[FdoSecrets] +Enabled=true +ShowNotification=true +ConfirmAccessItem=true +ConfirmDeleteItem=true + +[GUI] +MinimizeToTray=true +ShowTrayIcon=false diff --git a/homes/modules/services/keepassxc/keepassxc.nix b/homes/modules/services/keepassxc/keepassxc.nix new file mode 100644 index 0000000..7fd6e49 --- /dev/null +++ b/homes/modules/services/keepassxc/keepassxc.nix @@ -0,0 +1,23 @@ +{ config, inputs, lib, pkgs, ... }: +{ + home.packages = with pkgs; [ + keepassxc + ]; + + systemd.user.services.keepassxc = { + Unit = { + Description = "KeePassXC password manager"; + After = [ "graphical-session-pre.target" ]; + PartOf = [ "graphical-session.target" ]; + }; + Service = { + Description = "${pkgs.keepassxc}/bin/keepassxc"; + Restart = "on-failure"; + }; + Install.WantedBy = [ "graphical-session.target" ]; + }; + + xdg.configFile."keepassxc/keepassxc.ini" = { + source = ./keepassxc.ini; + }; +} diff --git a/homes/modules/services/pulse/client.conf.template b/homes/modules/services/pulse/client.conf.template new file mode 100644 index 0000000..6a65f11 --- /dev/null +++ b/homes/modules/services/pulse/client.conf.template @@ -0,0 +1 @@ +cookie-file = /run/user/{uid}/pulse/cookie diff --git a/homes/modules/services/pulse/pulse.nix b/homes/modules/services/pulse/pulse.nix new file mode 100644 index 0000000..59d1fa0 --- /dev/null +++ b/homes/modules/services/pulse/pulse.nix @@ -0,0 +1,9 @@ +{ inputs, lib, pkgs, config, osConfig, ... }: +{ + # writes ./client.conf to ~/.config/pulse/client.conf + xdg.configFile."pulse/client.conf".text = builtins.replaceStrings + ["{uid}"] + # make sure ur user id is set!!! + ["${toString osConfig.users.users.${config.home.username}.uid}"] + (builtins.readFile ./client.conf.template); +} diff --git a/homes/modules/services/wireplumber/config/wireplumber.conf.d/50-alsa-config.conf b/homes/modules/services/wireplumber/config/wireplumber.conf.d/50-alsa-config.conf new file mode 100644 index 0000000..e69de29 diff --git a/homes/modules/services/wireplumber/wireplumber.nix b/homes/modules/services/wireplumber/wireplumber.nix new file mode 100644 index 0000000..03e4957 --- /dev/null +++ b/homes/modules/services/wireplumber/wireplumber.nix @@ -0,0 +1,8 @@ +{ inputs, lib, pkgs, config, ... }: +{ + # writes ./config to ~/.config/wireplumber + xdg.configFile."wireplumber" = { + recursive = true; + source = ./config; + }; +} diff --git a/homes/modules/shell/fastfetch/fastfetch.nix b/homes/modules/shell/fastfetch/fastfetch.nix new file mode 100644 index 0000000..987f805 --- /dev/null +++ b/homes/modules/shell/fastfetch/fastfetch.nix @@ -0,0 +1,12 @@ +{ inputs, lib, pkgs, ... }: +{ + home.packages = with pkgs; [ + fastfetch # displays system info! x3 + ]; + + # writes ./themes to ~/.config/fastfetch/themes + xdg.configFile."fastfetch/themes" = { + recursive = true; + source = ./themes; + }; +} diff --git a/homes/modules/shell/fastfetch/themes/laimu.json b/homes/modules/shell/fastfetch/themes/laimu.json new file mode 100644 index 0000000..e69de29 diff --git a/homes/modules/shell/programs.nix b/homes/modules/shell/programs.nix new file mode 100644 index 0000000..b95007d --- /dev/null +++ b/homes/modules/shell/programs.nix @@ -0,0 +1,26 @@ +{ inputs, lib, pkgs, ... }: +{ + programs = { + zoxide = { + enable = true; + enableZshIntegration = true; + options = [ + "--cmd cd" + ]; + }; + + hyfetch = { + enable = true; + settings = { + preset = "genderfae"; + mode = "rgb"; + backend = "fastfetch"; + color_align = { + mode = "vertical"; + }; + auto_detect_light_dark = true; + pride_month_disable = false; + }; + }; + }; +} diff --git a/homes/modules/shell/zellij/zellij.nix b/homes/modules/shell/zellij/zellij.nix new file mode 100644 index 0000000..aa90116 --- /dev/null +++ b/homes/modules/shell/zellij/zellij.nix @@ -0,0 +1,17 @@ +{ inputs, lib, pkgs, ... }: +let + unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + # the theme file template for zellij is in wallust + + programs.zellij = { + enable = true; + enableZshIntegration = false; + + extraConfig = '' +theme "test" +show_startup_tips false + ''; + }; +} diff --git a/homes/modules/shell/zsh.nix b/homes/modules/shell/zsh.nix new file mode 100644 index 0000000..675395e --- /dev/null +++ b/homes/modules/shell/zsh.nix @@ -0,0 +1,86 @@ +{ inputs, lib, pkgs, ... }: +let + unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + + plugins = [ + { + name = "vi-mode"; + src = pkgs.zsh-vi-mode; + file = "share/zsh-vi-mode/zsh-vi-mode.plugin.zsh"; + } + ]; + + initContent = '' + # yazi wrapper!!! + function yazi() { + local tmp="$(mktemp -p "/run/user/$UID" -t "yazi-cwd.XXXXXX")" cwd + command yazi "$@" --cwd-file="$tmp" + IFS= read -r -d ''' cwd < "$tmp" + [ -n "$cwd" ] && [ "$cwd" != "$PWD" ] && builtin cd -- "$cwd" + rm -f -- "$tmp" + } + + hyfetch # oh i'm so gay!! :3 + ''; + + shellAliases = { + # files and nav stuff + ls = "eza"; + ll = "ls -la"; + lt = "ls --tree"; + llt = "ll --tree"; + + y = "yazi"; + + # cat with wings!!! + cat = "bat"; + + # init github keys + # description: gi = github initialize + sa = "eval \"$(ssh-agent -s)\""; + gh-auv = "ssh-add ~/.ssh/github_auroraveon"; + cb-fox = "ssh-add ~/.ssh/codeberg_foxxyora"; + + # -------------------- + # shorthand nix command aliases + + # open nix develop with preferred shell + # description: nd = nix develop + nd = "nix develop -c $SHELL"; + + # description: cdns = change directory [to] nix settings + cdns = "cd /etc/nixos"; + # cd to /etc/nixos and edit nix config + # description: ns = nix settings + ns = "cdns && sudo -E -s $EDITOR"; + # description: nrs = nix rebuild switch + nrs = "cdns && nh os switch /etc/nixos"; + # upgrades the system + upgrade = "cdns && sudo nix flake update && nh os switch /etc/nixos"; + + # kitty's ssh command (to fix xterm and other stuff qwq) + kssh = "kitty +kitten ssh"; + + # pipes are prettyyyy!!!! :3333 + pipes1 = "pipes.sh -r 1024 -p 8 -f 30"; + pipes2 = "pipes.sh -r 4096 -p 16 -f 100"; + }; + + history = { + size = 16384; + }; + }; + + programs.zsh.oh-my-zsh = { + enable = true; + theme = "agnoster"; + }; +} + diff --git a/homes/modules/themeing/hellwal/hellwal.nix b/homes/modules/themeing/hellwal/hellwal.nix new file mode 100644 index 0000000..4c0d191 --- /dev/null +++ b/homes/modules/themeing/hellwal/hellwal.nix @@ -0,0 +1,20 @@ +{ config, inputs, lib, pkgs, ... }: +let + unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + home.packages = with pkgs; [ + hellwal + ]; + + # writes ./wallust.toml to ~/.config/hellwal/wallust.toml + #xdg.configFile."wallust/wallust.toml" = { + #source = ./wallust.toml; + #}; + + # writes ./templates to ~/.config/hellwal/templates + #xdg.configFile."hellwal/templates" = { + #recursive = true; + #source = ./templates; + #}; +} diff --git a/homes/modules/themeing/wallust/templates/aurorashell-template.toml b/homes/modules/themeing/wallust/templates/aurorashell-template.toml new file mode 100644 index 0000000..ca1dded --- /dev/null +++ b/homes/modules/themeing/wallust/templates/aurorashell-template.toml @@ -0,0 +1,18 @@ +background = '{{ background | strip }}' +foreground = '{{ foreground | strip }}' +color00 = '{{ color0 | strip }}' +color01 = '{{ color1 | strip }}' +color02 = '{{ color2 | strip }}' +color03 = '{{ color3 | strip }}' +color04 = '{{ color4 | strip }}' +color05 = '{{ color5 | strip }}' +color06 = '{{ color6 | strip }}' +color07 = '{{ color7 | strip }}' +color08 = '{{ color8 | strip }}' +color09 = '{{ color9 | strip }}' +color10 = '{{ color10 | strip }}' +color11 = '{{ color11 | strip }}' +color12 = '{{ color12 | strip }}' +color13 = '{{ color13 | strip }}' +color14 = '{{ color14 | strip }}' +color15 = '{{ color15 | strip }}' diff --git a/homes/modules/themeing/wallust/templates/discord-template.css b/homes/modules/themeing/wallust/templates/discord-template.css new file mode 100644 index 0000000..b954be0 --- /dev/null +++ b/homes/modules/themeing/wallust/templates/discord-template.css @@ -0,0 +1,20 @@ +:root { + --foreground: {{ foreground }}; + --background: {{ background }}; + --color0: {{ color0 }}; + --color1: {{ color1 }}; + --color2: {{ color2 }}; + --color3: {{ color3 }}; + --color4: {{ color4 }}; + --color5: {{ color5 }}; + --color6: {{ color6 }}; + --color7: {{ color7 }}; + --color8: {{ color8 }}; + --color9: {{ color9 }}; + --color10: {{ color10 }}; + --color11: {{ color11 }}; + --color12: {{ color12 }}; + --color13: {{ color13 }}; + --color14: {{ color14 }}; + --color15: {{ color15 }}; +} diff --git a/homes/modules/themeing/wallust/templates/hyprland-template.conf b/homes/modules/themeing/wallust/templates/hyprland-template.conf new file mode 100644 index 0000000..c7ecd13 --- /dev/null +++ b/homes/modules/themeing/wallust/templates/hyprland-template.conf @@ -0,0 +1,18 @@ +$colorbg = {{ background | rgb }} +$colorfg = {{ foreground | rgb }} +$color00 = {{ color0 | rgb }} +$color01 = {{ color1 | rgb }} +$color02 = {{ color2 | rgb }} +$color03 = {{ color3 | rgb }} +$color04 = {{ color4 | rgb }} +$color05 = {{ color5 | rgb }} +$color06 = {{ color6 | rgb }} +$color07 = {{ color7 | rgb }} +$color08 = {{ color8 | rgb }} +$color09 = {{ color9 | rgb }} +$color10 = {{ color10 | rgb }} +$color11 = {{ color11 | rgb }} +$color12 = {{ color12 | rgb }} +$color13 = {{ color13 | rgb }} +$color14 = {{ color14 | rgb }} +$color15 = {{ color15 | rgb }} diff --git a/homes/modules/themeing/wallust/templates/imhex-template.theme b/homes/modules/themeing/wallust/templates/imhex-template.theme new file mode 100644 index 0000000..1100a87 --- /dev/null +++ b/homes/modules/themeing/wallust/templates/imhex-template.theme @@ -0,0 +1,405 @@ +{ + "base": "Dark", + "colors": { + "imgui": { + "border": "{{ foreground }}60", + "border-shadow": "#00000000", + "button": "{{ color14 }}60", + "button-active": "{{ color14 }}FF", + "button-hovered": "{{ color14 }}FF", + "check-mark": "{{ color11 }}FF", + "child-background": "{{ background }}FF", + "docking-empty-background": "{{ background | darken(0.2) }}FF", + "docking-preview": "#4296F9B2", + "drag-drop-target": "#FFFF00E5", + "frame-background": "#284D7A89", + "frame-background-active": "#4296F9AA", + "frame-background-hovered": "#4296F966", + "header": "{{ color3 }}C0", + "header-active": "{{ color3 }}FF", + "header-hovered": "{{ color3 }}E0", + "input-text-cursor": "{{ foreground }}FF", + "menu-bar-background": "{{ background }}FF", + "modal-window-dim-background": "#CCCCCC30", + "nav-highlight": "#4296F9FF", + "nav-windowing-background": "#CCCCCC33", + "nav-windowing-highlight": "#FFFFFFB2", + "plot-histogram": "#E5B200FF", + "plot-histogram-hovered": "#FF9900FF", + "plot-lines": "#9B9B9BFF", + "plot-lines-hovered": "#FF6D59FF", + "popup-background": "{{ background }}FF", + "resize-grip": "#4296F933", + "resize-grip-active": "#4296F9F2", + "resize-grip-hovered": "#4296F9AA", + "scrollbar-background": "#05050587", + "scrollbar-grab": "#4F4F4FFF", + "scrollbar-grab-active": "#828282FF", + "scrollbar-grab-hovered": "#686868FF", + "separator": "#6D6D7F7F", + "separator-active": "#1965BFFF", + "separator-hovered": "#1965BFC6", + "slider-grab": "#3D87E0FF", + "slider-grab-active": "#4296F9FF", + "tab": "{{ color2 }}80", + "tab-active": "{{ color2 }}E0", + "tab-active-overline": "#00000000", + "tab-hovered": "{{ color2 }}C0", + "tab-unfocused": "{{ color2 }}80", + "tab-unfocused-active": "{{ color2 }}B0", + "tab-unfocused-active-overline": "#00000000", + "table-border-light": "{{ foreground }}50", + "table-border-strong": "{{ foreground }}90", + "table-header-background": "{{ background | darken(0.2) }}FF", + "table-row-background": "#00000000", + "table-row-background-alt": "{{ foreground }}0F", + "text": "{{ foreground }}FF", + "text-disabled": "{{ foreground }}FF", + "text-link": "{{ color13 }}FF", + "text-selected-background": "{{ color13 }}60", + "title-background": "{{ background | darken(0.3) }}FF", + "title-background-active": "{{ background | darken(0.3) }}FF", + "title-background-collapse": "{{ background | darken(0.3) }}FF", + "tree-lines": "#6D6D7F7F", + "window-background": "{{ background }}FF", + "window-shadow": "#00000000" + }, + "imhex": { + "IEEE-tool-exp": "#5D7F5DFF", + "IEEE-tool-mantissa": "#7F5D5DFF", + "IEEE-tool-sign": "#5D5D7FFF", + "achievement-unlocked": "#F1C40FFF", + "advanced-encoding-ascii": "#7BB4E9FF", + "advanced-encoding-multi": "#F3DF91FF", + "advanced-encoding-single": "#E7978FFF", + "advanced-encoding-unknown": "#E7978FFF", + "blur-background": "#00000000", + "desc-button": "{{ background }}FF", + "desc-button-active": "{{ color10 }}C0", + "desc-button-hovered": "{{ color10 }}80", + "diff-added": "#388B42FF", + "diff-changed": "#F1C40FFF", + "diff-removed": "#E74C3CFF", + "find-highlight": "#672A78FF", + "highlight": "#4DC69BFF", + "logger-debug": "#388B42FF", + "logger-error": "#E74C3CFF", + "logger-fatal": "#672A78FF", + "logger-info": "#06539BFF", + "logger-warning": "#F1C40FFF", + "patches": "#E74C3CFF", + "pattern-selected": "#3683CBFF", + "toolbar-blue": "{{ color12 }}FF", + "toolbar-brown": "{{ color13 }}FF", + "toolbar-gray": "{{ color14 }}FF", + "toolbar-green": "{{ color4 }}FF", + "toolbar-purple": "{{ color5 }}FF", + "toolbar-red": "{{ color6 }}FF", + "toolbar-yellow": "{{ color11 }}FF" + }, + "imnodes": { + "box-selector": "#3D87E01E", + "box-selector-outline": "#3D87E096", + "grid-background": "{{ foreground }}7F", + "grid-line": "{{ foreground }}7F", + "grid-line-primary": "{{ foreground }}7F", + "link": "#3D87E0C8", + "link-hovered": "#4296FAFF", + "link-selected": "#4296FAFF", + "mini-map-background": "#19191996", + "mini-map-background-hovered": "#191919C8", + "mini-map-canvas": "#C8C8C819", + "mini-map-canvas-outline": "#C8C8C8C8", + "mini-map-link": "#3D87E0C8", + "mini-map-link-selected": "#4296FAFF", + "mini-map-node-background": "#C8C8C864", + "mini-map-node-background-hovered": "#C8C8C8FF", + "mini-map-node-background-selected": "#C8C8C8FF", + "mini-map-node-outline": "#C8C8C864", + "mini-map-outline": "#96969664", + "mini-map-outline-hovered": "#969696C8", + "node-background": "#323232FF", + "node-background-hovered": "#4B4B4BFF", + "node-background-selected": "#4B4B4BFF", + "node-outline": "#646464FF", + "pin": "#F5CB25FF", + "pin-hovered": "#FA8335FF", + "title-bar": "#294E7AFF", + "title-bar-hovered": "#4296FAFF", + "title-bar-selected": "#4296FAFF" + }, + "implot": { + "axis-bg": "#00000000", + "axis-bg-active": "#00000000", + "axis-bg-hovered": "#00000000", + "axis-grid": "#FFFFFF3F", + "axis-text": "#FFFFFFFF", + "axis-tick": "#00000000", + "crosshairs": "#FFFFFF7F", + "error-bar": "#00000000", + "fill": "#00000000", + "frame-bg": "#FFFFFF11", + "inlay-text": "#FFFFFFFF", + "legend-bg": "#141414EF", + "legend-border": "#6D6D7F7F", + "legend-text": "#FFFFFFFF", + "line": "#00000000", + "marker-fill": "#00000000", + "marker-outline": "#00000000", + "plot-bg": "#0000007F", + "plot-border": "#6D6D7F7F", + "selection": "#FF9900FF", + "title-text": "#FFFFFFFF" + }, + "text-editor": { + "attribute": "#AAAAAAFF", + "background": "{{ background }}{{ 100 | alpha_hexa }}", + "breakpoint": "#FF200040", + "calculated-pointer": "#AAAAAAFF", + "char-literal": "#E0A070FF", + "comment": "#206020FF", + "current-line-edge": "#A0A0A040", + "current-line-fill": "#00000040", + "current-line-fill-inactive": "#80808040", + "cursor": "#E0E0E0FF", + "debug-text": "#8A8A8AFF", + "default": "#7F7F7FFF", + "default-text": "#7F7F7FFF", + "doc-block-comment": "#206020FF", + "doc-comment": "#206020FF", + "doc-global-comment": "#206020FF", + "error-marker": "#FF200080", + "error-text": "#FF200080", + "function": "#AAAAAAFF", + "function-parameter": "#AAAAAAFF", + "function-variable": "#AAAAAAFF", + "global-variable": "#AAAAAAFF", + "identifier": "#AAAAAAFF", + "keyword": "{{ color13 }}{{ 100 | alpha_hexa }}", + "known-identifier": "#4DC69BFF", + "line-number": "{{ color13 }}{{ 100 | alpha_hexa }}", + "local-variable": "#AAAAAAFF", + "multi-line-comment": "#206040FF", + "namespace": "#AAAAAAFF", + "number": "#00FF00FF", + "pattern-variable": "#AAAAAAFF", + "placed-variable": "#AAAAAAFF", + "preproc-identifier": "#808060FF", + "preprocessor": "#808060FF", + "preprocessor-deactivated": "#4F4F4F45", + "punctuation": "#7F7F7FFF", + "selection": "#205AA080", + "separator": "#7F7F7FFF", + "string": "#E07070FF", + "template-variable": "#AAAAAAFF", + "typedef": "#AAAAAAFF", + "unknown-identifier": "#FC2C2CFE", + "user-defined-type": "#AAAAAAFF", + "view": "#AAAAAAFF", + "warning-text": "#FFFF00FF" + } + }, + "image_theme": "dark", + "name": "base16", + "styles": { + "imgui": { + "alpha": 1.0, + "button-text-align": [ + 0.5, + 0.5 + ], + "cell-padding": [ + 4.0, + 2.0 + ], + "child-border-size": 1.0, + "child-rounding": 0.0, + "circle-tessellation-max-error": 0.30000001192092896, + "columns-min-spacing": 6.0, + "curve-tessellation-tol": 1.25, + "disabled-alpha": 0.6000000238418579, + "display-safe-area-padding": [ + 3.0, + 3.0 + ], + "display-window-padding": [ + 19.0, + 19.0 + ], + "docking-separator-size": 2.0, + "frame-border-size": 0.0, + "frame-padding": [ + 4.0, + 3.0 + ], + "frame-rounding": 0.0, + "grab-min-size": 12.0, + "grab-rounding": 0.0, + "image-border-size": 0.0, + "indent-spacing": 21.0, + "item-inner-spacing": [ + 4.0, + 4.0 + ], + "item-spacing": [ + 8.0, + 4.0 + ], + "log-slider-deadzone": 4.0, + "mouse-cursor-scale": 1.0, + "popup-border-size": 1.0, + "popup-rounding": 0.0, + "scrollbar-rounding": 9.0, + "scrollbar-size": 14.0, + "selectable-text-align": [ + 0.0, + 0.0 + ], + "separator-text-align": [ + 0.0, + 0.5 + ], + "separator-text-border-size": 3.0, + "separator-text-padding": [ + 20.0, + 3.0 + ], + "tab-bar-border-size": 1.0, + "tab-bar-overline-size": 1.0, + "tab-border-size": 0.0, + "tab-close-button-min-width-selected": -1.0, + "tab-close-button-min-width-unselected": 0.0, + "tab-min-width-base": 1.0, + "tab-min-width-shrink": 80.0, + "tab-rounding": 5.0, + "touch-extra-padding": [ + 0.0, + 0.0 + ], + "window-border-hover-padding": 4.0, + "window-border-size": 1.0, + "window-min-size": [ + 32.0, + 32.0 + ], + "window-padding": [ + 8.0, + 8.0 + ], + "window-rounding": 0.0, + "window-shadow-angle": 0.785398006439209, + "window-shadow-offset": 0.0, + "window-shadow-size": 100.0, + "window-title-align": [ + 0.0, + 0.5 + ] + }, + "imhex": { + "popup-alpha": 0.6499999761581421, + "window-blur": 0.0 + }, + "imnodes": { + "grid-spacing": 24.0, + "link-hover-distance": 10.0, + "link-line-segments-per-length": 0.10000000149011612, + "link-thickness": 3.0, + "mini-map-offset": [ + 4.0, + 4.0 + ], + "mini-map-padding": [ + 8.0, + 8.0 + ], + "node-border-thickness": 1.0, + "node-corner-rounding": 4.0, + "node-padding": [ + 8.0, + 8.0 + ], + "pin-circle-radius": 4.0, + "pin-hover-radius": 10.0, + "pin-line-thickness": 1.0, + "pin-offset": 0.0, + "pin-quad-side-length": 7.0, + "pin-triangle-side-length": 9.5 + }, + "implot": { + "annotation-padding": [ + 2.0, + 2.0 + ], + "digital-bit-gap": 4.0, + "digital-bit-height": 8.0, + "error-bar-size": 5.0, + "error-bar-weight": 1.5, + "fill-alpha": 1.0, + "fit-padding": [ + 0.0, + 0.0 + ], + "label-padding": [ + 5.0, + 5.0 + ], + "legend-inner-padding": [ + 5.0, + 5.0 + ], + "legend-padding": [ + 10.0, + 10.0 + ], + "legend-spacing": [ + 5.0, + 0.0 + ], + "line-weight": 1.0, + "major-grid-size": [ + 1.0, + 1.0 + ], + "major-tick-len": [ + 10.0, + 10.0 + ], + "major-tick-size": [ + 1.0, + 1.0 + ], + "marker-size": 4.0, + "marker-weight": 1.0, + "minor-alpha": 0.25, + "minor-grid-size": [ + 1.0, + 1.0 + ], + "minor-tick-len": [ + 5.0, + 5.0 + ], + "minor-tick-size": [ + 1.0, + 1.0 + ], + "mouse-pos-padding": [ + 10.0, + 10.0 + ], + "plot-border-size": 1.0, + "plot-default-size": [ + 400.0, + 300.0 + ], + "plot-min-size": [ + 200.0, + 150.0 + ], + "plot-padding": [ + 10.0, + 10.0 + ] + } + } +} diff --git a/homes/modules/themeing/wallust/templates/kitty-template.conf b/homes/modules/themeing/wallust/templates/kitty-template.conf new file mode 100644 index 0000000..c0ba6b9 --- /dev/null +++ b/homes/modules/themeing/wallust/templates/kitty-template.conf @@ -0,0 +1,45 @@ +# background & foreground +foreground {{ foreground }} +background {{ background }} +selection_foreground {{ background }} +selection_background {{ foreground }} + +# cursor +cursor {{ cursor }} +cursor_text_color {{ cursor }} + +# other cursor colors to use +# cursor: foreground +# cursor_text_color: color8 + +# black +color0 {{ color0 }} +color8 {{ color8 }} + +# red +color1 {{ color1 }} +color9 {{ color9 }} + +# green +color2 {{ color2 }} +color10 {{ color10 }} + +# yellow +color3 {{ color3 }} +color11 {{ color11 }} + +# blue +color4 {{ color4 }} +color12 {{ color12 }} + +# magenta +color5 {{ color5 }} +color13 {{ color13 }} + +# cyan +color6 {{ color6 }} +color14 {{ color14 }} + +# white +color7 {{ color7 }} +color15 {{ color15 }} diff --git a/homes/modules/themeing/wallust/templates/neovim-template b/homes/modules/themeing/wallust/templates/neovim-template new file mode 100644 index 0000000..433a3eb --- /dev/null +++ b/homes/modules/themeing/wallust/templates/neovim-template @@ -0,0 +1,18 @@ +{{ color0 }} +{{ color1 }} +{{ color2 }} +{{ color3 }} +{{ color4 }} +{{ color5 }} +{{ color6 }} +{{ color7 }} +{{ color8 }} +{{ color9 }} +{{ color10 }} +{{ color11 }} +{{ color12 }} +{{ color13 }} +{{ color14 }} +{{ color15 }} +{{ background }} +{{ foreground }} diff --git a/homes/modules/themeing/wallust/templates/spicetify-template.ini b/homes/modules/themeing/wallust/templates/spicetify-template.ini new file mode 100644 index 0000000..e69de29 diff --git a/homes/modules/themeing/wallust/templates/waybar-template.css b/homes/modules/themeing/wallust/templates/waybar-template.css new file mode 100644 index 0000000..e9bba66 --- /dev/null +++ b/homes/modules/themeing/wallust/templates/waybar-template.css @@ -0,0 +1,18 @@ +@define-color colorbg {{ background }}; +@define-color colorfg {{ foreground }}; +@define-color color00 {{ color0 }}; +@define-color color01 {{ color1 }}; +@define-color color02 {{ color2 }}; +@define-color color03 {{ color3 }}; +@define-color color04 {{ color4 }}; +@define-color color05 {{ color5 }}; +@define-color color06 {{ color6 }}; +@define-color color07 {{ color7 }}; +@define-color color08 {{ color8 }}; +@define-color color09 {{ color9 }}; +@define-color color10 {{ color10 }}; +@define-color color11 {{ color11 }}; +@define-color color12 {{ color12 }}; +@define-color color13 {{ color13 }}; +@define-color color14 {{ color14 }}; +@define-color color15 {{ color15 }}; diff --git a/homes/modules/themeing/wallust/templates/zellij-template.kdl b/homes/modules/themeing/wallust/templates/zellij-template.kdl new file mode 100644 index 0000000..89fef47 --- /dev/null +++ b/homes/modules/themeing/wallust/templates/zellij-template.kdl @@ -0,0 +1,45 @@ +themes { + base16 { + ribbon_unselected { + base {{ background | red }} {{ background | green }} {{ background | blue }} + background {{ color0 | red }} {{ color0 | green }} {{ color0 | blue }} + emphasis_0 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_1 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_2 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_3 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + } + ribbon_selected { + base {{ background | red }} {{ background | green }} {{ background | blue }} + background {{ color12 | red }} {{ color12 | green }} {{ color12 | blue }} + emphasis_0 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_1 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_2 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_3 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + } + + frame_unselected { + base {{ color1 | red }} {{ color1 | green }} {{ color1 | blue }} + background {{ background | red }} {{ background | green }} {{ background | blue }} + emphasis_0 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_1 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_2 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_3 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + } + frame_selected { + base {{ color14 | red }} {{ color14 | green }} {{ color14 | blue }} + background {{ background | red }} {{ background | green }} {{ background | blue }} + emphasis_0 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_1 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_2 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_3 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + } + frame_highlight { + base {{ color13 | red }} {{ color13 | green }} {{ color13 | blue }} + background {{ background | red }} {{ background | green }} {{ background | blue }} + emphasis_0 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_1 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_2 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + emphasis_3 {{ foreground | red }} {{ foreground | green }} {{ foreground | blue }} + } + } +} diff --git a/homes/modules/themeing/wallust/wallust.nix b/homes/modules/themeing/wallust/wallust.nix new file mode 100644 index 0000000..207c4ef --- /dev/null +++ b/homes/modules/themeing/wallust/wallust.nix @@ -0,0 +1,20 @@ +{ config, inputs, lib, pkgs, ... }: +let + unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + home.packages = with pkgs; [ + wallust + ]; + + # writes ./wallust.toml to ~/.config/wallust/wallust.toml + xdg.configFile."wallust/wallust.toml" = { + source = ./wallust.toml; + }; + + # writes ./templates to ~/.config/wallust/templates + xdg.configFile."wallust/templates" = { + recursive = true; + source = ./templates; + }; +} diff --git a/homes/modules/themeing/wallust/wallust.toml b/homes/modules/themeing/wallust/wallust.toml new file mode 100644 index 0000000..efff412 --- /dev/null +++ b/homes/modules/themeing/wallust/wallust.toml @@ -0,0 +1,35 @@ +check_contrast = true + +[templates] +vesktop.template = "discord-template.css" +vesktop.target = "~/.config/vesktop/themes/base16-colors.css" + +vencord.template = "discord-template.css" +vencord.target = "~/.config/Vencord/themes/base16-colors.css" + +equibop.template = "discord-template.css" +equibop.target = "~/.config/equibop/themes/base16-colors.css" + +equicord.template = "discord-template.css" +equicord.target = "~/.config/Equicord/themes/base16-colors.css" + +kitty.template = "kitty-template.conf" +kitty.target = "~/.config/kitty/theme.conf" + +hyprland.template = "hyprland-template.conf" +hyprland.target = "~/.config/hypr/colors.conf" + +waybar.template = "waybar-template.css" +waybar.target = "~/.config/waybar/colors.css" + +neovim.template = "neovim-template" +neovim.target = "~/.cache/nvim/neovim-colors" + +aurorashell.template = "aurorashell-template.toml" +aurorashell.target = "~/.config/aurorashell/colors.toml" + +zellij.template = "zellij-template.kdl" +zellij.target = "~/.config/zellij/themes/base16.kdl" + +imhex.template = "imhex-template.theme" +imhex.target = "~/.local/share/imhex/themes/base16.theme" diff --git a/homes/modules/wm/hyprland/hypr/keybinds/virtual.conf b/homes/modules/wm/hyprland/hypr/keybinds/virtual.conf new file mode 100644 index 0000000..076c602 --- /dev/null +++ b/homes/modules/wm/hyprland/hypr/keybinds/virtual.conf @@ -0,0 +1,43 @@ +# a submap for emulating keys/buttons/functions on the keyboard or mouse + +bind = $mod+shift+alt, a, submap, virtual +submap = virtual + +# exit submap +bind = , escape, submap, reset + +# emulates mouse buttons +bind = , z, exec, wlrctl pointer click left +bind = , x, exec, wlrctl pointer click right +bind = , s, exec, wlrctl pointer click middle +bind = , i, exec, wlrctl pointer click forward +bind = , o, exec, wlrctl pointer click back + +# emulates the arrow keys using hjkl +#binde = , h, exec, wtype -k Left +#binde = , j, exec, wtype -k Down +#binde = , k, exec, wtype -k Up +#binde = , l, exec, wtype -k Right + +# moves the mouse pointer +binde = , h, exec, wlrctl pointer move -30 0 +binde = , j, exec, wlrctl pointer move 0 30 +binde = , k, exec, wlrctl pointer move 0 -30 +binde = , l, exec, wlrctl pointer move 30 0 + +# moves the mouse pointer in little steps +binde = alt, h, exec, wlrctl pointer move -15 0 +binde = alt, j, exec, wlrctl pointer move 0 15 +binde = alt, k, exec, wlrctl pointer move 0 -15 +binde = alt, l, exec, wlrctl pointer move 15 0 + +# emulates scrolling with mouse +binde = , e, exec, wlrctl pointer scroll 0 -15 # scroll up +binde = , y, exec, wlrctl pointer scroll 0 15 # scroll down +binde = alt, e, exec, wlrctl pointer scroll -15 0 # scroll left +binde = alt, y, exec, wlrctl pointer scroll 0 15 # scroll right + +# catches all other keys and keeps us in the submap +bind = , catchall, submap, virtual + +submap = reset diff --git a/homes/modules/wm/hyprland/hypr/theme.conf b/homes/modules/wm/hyprland/hypr/theme.conf new file mode 100644 index 0000000..22cbd57 --- /dev/null +++ b/homes/modules/wm/hyprland/hypr/theme.conf @@ -0,0 +1,19 @@ +general { + # border colors that works in most situations + col.inactive_border = rgb($colorbg) rgb($color09) 45deg + col.active_border = rgb($colorfg) rgb($color11) 45deg + + # transparent inactive border colors + # col.inactive_border = rgba($color01,0.0) rgba($color03,0.0) 45deg + + # experimental border colors that may not look good all the time + # col.inactive_border = rgba($color01,0.6) rgba($color03,0.6) 45deg + # col.active_border = rgb($color09) rgb($color11) 45deg +} + +decoration { + shadow { + enabled = false + range = 2 + } +} diff --git a/homes/modules/wm/hyprland/hypr/windowrules.conf b/homes/modules/wm/hyprland/hypr/windowrules.conf new file mode 100644 index 0000000..1d2c078 --- /dev/null +++ b/homes/modules/wm/hyprland/hypr/windowrules.conf @@ -0,0 +1,61 @@ +# window rules + +# ---------------------------------------------------------------------------- # +# task manager +windowrule { + name = task-manager + match:class = ^(kitty)$ + match:title = ^(btop)$ + float = true + center = true + size = (monitor_w*0.65) (monitor_h*0.65) +} + +# ---------------------------------------------------------------------------- # +# terminal filechooser +windowrule { + name = terminal-filechooser + match:class = ^(kitty)$ + match:title = ^(filechooser)$ + float = true + center = true + size = (monitor_w*0.85) (monitor_h*0.85) +} + +# ---------------------------------------------------------------------------- # +# yazi explorer +#windowrule { + #name = yazi + #match:class = ^(kitty)$ + #match:title = ^(yazi)$ + #float = true + #center = true + #size = (monitor_w*0.85) (monitor_h*0.85) +#} + +# ---------------------------------------------------------------------------- # +# kitty - blur +windowrule { + name = kitty-blur + match:class = ^(kitty)$ + match:fullscreen = false + opacity = 0.95 +} + +# ---------------------------------------------------------------------------- # +# imhex - blur +windowrule { + name = imhex-blur + match:class = ^(imhex)$ + match:fullscreen = false + opacity = 0.97 +} + +# ---------------------------------------------------------------------------- # +# discord - blur +windowrule { + name = discord-blur + match:initial_title = ^(Discord|Discord Popout)$ + match:fullscreen = false + opacity = 0.97 +} diff --git a/homes/modules/wm/hyprland/hyprland.nix b/homes/modules/wm/hyprland/hyprland.nix new file mode 100644 index 0000000..0d9764c --- /dev/null +++ b/homes/modules/wm/hyprland/hyprland.nix @@ -0,0 +1,314 @@ +{ config, inputs, pkgs, ... }: +let + unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}; + hyprland-git = inputs.hyprland-git.packages.${pkgs.stdenv.hostPlatform.system}; +in +{ + wayland.windowManager.hyprland = { + enable = true; + package = null; + portalPackage = null; + + plugins = [ + #inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}.hyprscrolling + ]; + + xwayland.enable = true; + + extraConfig = '' + source = ./colors.conf + source = ./theme.conf + source = ./windowrules.conf + + source = ./keybinds/virtual.conf + ''; + + settings = { + # shorthand command keywords + "$mod" = "SUPER"; + + # applications + "$terminal" = "kitty"; + "$explorer" = "kitty -e yazi"; + "$browser" = "zen"; + + # menu + "$menu" = "rofi"; + + # startup programs + exec-once = [ + "waybar" + "awww-daemon" + + "wl-paste --type text --watch cliphist store" + "wl-paste --type image --watch cliphist store" + "wl-clip-persist --clipboard regular" + + "playerctld daemon" + + # swaps around the 3rd and 4th workspace because they always start + # in the wrong order + "hyprctl dispatch workspace 4 && hyprctl dispatch workspace 5 && hyprctl dispatch workspace 3 && hyprctl dispatch workspace 4 && hyprctl dispatch workspace 5 && hyprctl dispatch workspace 3 && hyprctl dispatch workspace 1" + ]; + + # monitor configuration + monitor = [ + # note: display stream compression pending for open source + # amd gpu driver and my monitor (VG279QM) only supports DP 1.2 + # so no >240hz atm + "DP-2, 1920x1080@239.76, 0x0, 1" # main monitor + "DP-3, 1920x1080@143.61, 1920x0, 1" # second monitor + "HDMI-A-2, 2560x1440@59.95, 3840x0, 1" # third monitor (drawing tablet) + "HDMI-A-1, 1920x1080@60.00, -1920x0, 1" # tv + ]; + + general = { + gaps_in = 5; + gaps_out = "0, 10, 10, 10"; + border_size = 2; + layout = "dwindle"; + }; + + plugin = { + # options at https://github.com/hyprwm/hyprland-plugins/tree/main/hyprscrolling + hyprscrolling = { + fullscreen_on_one_column = false; + column_width = 1.0; + }; + }; + + dwindle = { + preserve_split = true; + }; + + decoration = { + rounding = 8; + + active_opacity = 1.00; + inactive_opacity = 1.00; + + blur = { + xray = true; + size = 6; + passes = 2; + #vibrancy = 0.3; + special = true; + }; + }; + + bezier = [ + "workspace_curve, 0.56,0.19,0.24,0.58" + "workspace_in_curve, 0.56,0.19,0.56,0.99" + ]; + + animation = [ + #"workspaces, 1, 1.94, workspace_in_curve, slide" + #"workspacesIn, 1, 1.21, workspace_in_curve, slide" + #"workspacesOut, 1, 1.94, workspace_in_curve, slide" + ]; + + input = { + repeat_rate = 50; + repeat_delay = 300; + + sensitivity = 0; # 0 = no modification + accel_profile = "flat"; + force_no_accel = false; # not recommended to turn on + }; + + cursor.no_hardware_cursors = true; + + misc = { + enable_anr_dialog = false; + font_family = "DepartureMono Nerd Font"; + }; + + # bindings + bind = [ + # binds for applications + "$mod, t, exec, $terminal" + "$mod, r, exec, $browser" + "$mod, e, exec, $explorer" + + # binds for rofi + "$mod, d, exec, pkill -x rofi || rofi -show drun -show-icons" + "alt, tab, exec, pkill -x rofi || rofi -modi window -show window -show-icons" + "$mod, v, exec, pkill -x rofi || cliphist list | rofi -dmenu | cliphist decode | wl-copy" + + # screenshots + # todo: add active monitor + "$mod, s, exec, grim -g \"\$(slurp -d)\" - | wl-copy" # region + "$mod+alt, s, exec, grim -g \"\$(slurp -o)\" - | wl-copy" # monitor + "$mod+ctrl, s, exec, grim - | wl-copy" # all monitors + + # hyprpicker + "$mod, n, exec, hyprpicker -v" + # hyprlock + "$mod+alt, y, exec, hyprlock" + # task manager + "$mod+ctrl, escape, exec, task-manager.sh" + "$mod+ctrl, grave, exec, task-manager.sh" + + # media binds (more in binde below) + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioPlay, exec, playerctl play-pause" + ", XF86AudioNext, exec, playerctl next" + ", XF86AudioPrev, exec, playerctl previous" + "Shift_R, XF86AudioPlay, exec, playerctl shuffle toggle" + "Shift_R, XF86AudioNext, exec, playerctl loop track" + + # manage windows / session + "$mod+alt, c, killactive" + "$mod, f, fullscreen" + "$mod, x, togglefloating" + "$mod, i, togglesplit" + "$mod+Alt, Delete, exit" # exit hyprland + + # move focus + "$mod, h, movefocus, l" + "$mod, j, movefocus, d" + "$mod, k, movefocus, u" + "$mod, l, movefocus, r" + + # move window + "$mod+alt, h, movewindow, l" + "$mod+alt, j, movewindow, d" + "$mod+alt, k, movewindow, u" + "$mod+alt, l, movewindow, r" + + # swap window + "$mod+ctrl, h, swapwindow, l" + "$mod+ctrl, j, swapwindow, d" + "$mod+ctrl, k, swapwindow, u" + "$mod+ctrl, l, swapwindow, r" + + # move column (hyprscrolling) + "$mod, period, layoutmsg, move +col" + "$mod, comma, layoutmsg, move -col" + + # focus monitor + #"$mod+Ctrl+Tab, 1, focusmonitor, DP-2" + #"$mod+Ctrl+Tab, 2, focusmonitor, DP-3" + #"$mod+Ctrl+Tab, 3, focusmonitor, HDMI-A-2" + #"$mod+Ctrl+Tab, 4, focusmonitor, HDMI-A-1" + + # move workspace to monitor + #"$mod+Tab, 1, movecurrentworkspacetomonitor, DP-2" + #"$mod+Tab, 2, movecurrentworkspacetomonitor, DP-3" + #"$mod+Tab, 3, movecurrentworkspacetomonitor, HDMI-A-2" + #"$mod+Tab, 4, movecurrentworkspacetomonitor, HDMI-A-1" + + # special workspace + "$mod, escape, togglespecialworkspace" + "$mod+shift, escape, movetoworkspace, special" + "$mod+alt, escape, movetoworkspacesilent, special" + "$mod, grave, togglespecialworkspace" + "$mod+shift, grave, movetoworkspace, special" + "$mod+alt, grave, movetoworkspacesilent, special" + + # switch workspaces + "$mod, 1, workspace, 1" + "$mod, 2, workspace, 2" + "$mod, 3, workspace, 3" + "$mod, 4, workspace, 4" + "$mod, 5, workspace, 5" + "$mod, 6, workspace, 6" + "$mod, 7, workspace, 7" + "$mod, 8, workspace, 8" + "$mod, 9, workspace, 9" + "$mod, 0, workspace, 10" + "$mod, minus, workspace, 11" + "$mod, equal, workspace, 12" + + # move focused window to workspace + "$mod+shift, 1, movetoworkspace, 1" + "$mod+shift, 2, movetoworkspace, 2" + "$mod+shift, 3, movetoworkspace, 3" + "$mod+shift, 4, movetoworkspace, 4" + "$mod+shift, 5, movetoworkspace, 5" + "$mod+shift, 6, movetoworkspace, 6" + "$mod+shift, 7, movetoworkspace, 7" + "$mod+shift, 8, movetoworkspace, 8" + "$mod+shift, 9, movetoworkspace, 9" + "$mod+shift, 0, movetoworkspace, 10" + "$mod+shift, minus, movetoworkspace, 11" + "$mod+shift, equal, movetoworkspace, 12" + + # move focused window to workspace silently + "$mod+alt, 1, movetoworkspacesilent, 1" + "$mod+alt, 2, movetoworkspacesilent, 2" + "$mod+alt, 3, movetoworkspacesilent, 3" + "$mod+alt, 4, movetoworkspacesilent, 4" + "$mod+alt, 5, movetoworkspacesilent, 5" + "$mod+alt, 6, movetoworkspacesilent, 6" + "$mod+alt, 7, movetoworkspacesilent, 7" + "$mod+alt, 8, movetoworkspacesilent, 8" + "$mod+alt, 9, movetoworkspacesilent, 9" + "$mod+alt, 0, movetoworkspacesilent, 10" + "$mod+alt, minus, movetoworkspacesilent, 11" + "$mod+alt, equal, movetoworkspacesilent, 12" + + # move current workspace to monitor + "$mod+shift+alt, 1, movecurrentworkspacetomonitor, DP-2" + "$mod+shift+alt, 2, movecurrentworkspacetomonitor, DP-3" + "$mod+shift+alt, 3, movecurrentworkspacetomonitor, HDMI-A-2" + "$mod+shift+alt, 4, movecurrentworkspacetomonitor, HDMI-A-1" + ]; + + # bindings for mouse + bindm = [ + "$mod, mouse:272, movewindow" # left click + "$mod, mouse:273, resizewindow" # right click + ]; + + # repeating binds, repeats when held + binde = [ + ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+" + ", XF86AudioLowerVolume, exec, wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%-" + "Shift_R, XF86AudioRaiseVolume, exec, playerctl volume 0.05+" + "Shift_R, XF86AudioLowerVolume, exec, playerctl volume 0.05-" + + # resize window + # variable for `resizeactive` is (x, y) + # starting at 0, 0 in the top left + # meaning: + # -x = left + # +x = right + # -y = up + # +y = down + "$mod+ctrl+shift, h, resizeactive, -10 0" + "$mod+ctrl+shift, j, resizeactive, 0 10" + "$mod+ctrl+shift, k, resizeactive, 0 -10" + "$mod+ctrl+shift, l, resizeactive, 10 0" + ]; + + layerrule = [ + #"blur, rofi" + #"ignorezero, rofi" + #"blur, aurorashell" + #"ignorealpha 0.7, aurorashell" + "blur on, match:namespace waybar" + "ignore_alpha 0, match:namespace waybar" + ]; + + env = [ + "EDITOR,auravim" + + "XCURSOR_THEME,Bunny (Icy) and Strawberries" + "XCURSOR_SIZE,24" + "HYPRCURSOR_THEME,Bunny (Icy) and Strawberries" + "HYPRCURSOR_SIZE,24" + + "QT_QPA_PLATFORM,wayland" + ]; + }; + }; + + # extra hyprland config for organisation, + # and to load colors.conf + # writes ./hypr to ~/.config/hypr + xdg.configFile."hypr" = { + recursive = true; + source = ./hypr; + }; +} diff --git a/homes/modules/wm/river.nix b/homes/modules/wm/river.nix new file mode 100644 index 0000000..5c96740 --- /dev/null +++ b/homes/modules/wm/river.nix @@ -0,0 +1,83 @@ +{ config, inputs, pkgs, upkgs, ... }: +let + unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + wayland.windowManager.river = let + layout = "rivertile"; + in { + enable = true; + xwayland.enable = true; + package = upkgs.river-classic; # FIX: using upkgs version as zls is broken rn ;-; + + settings = let + main = "Super"; + + # applications + terminal = "kitty"; + browser = "firefox"; + in { + default-layout = "${layout}"; + output-layout = "${layout}"; + border-width = 1; + + spawn = [ + ''${layout}'' + + "awww-daemon" + "waybar" + ]; + + map.normal = { + "${main} C" = "close"; # close focused window + "${main}+Alt Delete" = "exit"; # exit river + + # app launcher + "${main} D" = ''spawn "pkill -x rofi || rofi -show drun -show-icons"''; + "Alt Tab" = ''spawn "pkill -x rofi || rofi -modi window -show window -show-icons"''; + + # spawn applications + "${main} T" = ''spawn "${terminal}"''; + "${main} R" = ''spawn "${browser}"''; + + # move focused view to top of layout stack + "${main} N" = ''zoom''; + + # focus next/previous view + "${main} J" = "focus-view previous"; + "${main} K" = "focus-view next"; + # move to next/previous output + "${main} H" = "focus-output previous"; + "${main} L" = "focus-output next"; + + # swap next/previous view + "${main}+Alt J" = "swap previous"; + "${main}+Alt K" = "swap next"; + # send view to next/previous output + # and switch to that output (wip) + "${main}+Alt H" = "send-to-output previous"; + #"${main}+Alt H" = "focus-output previous"; + "${main}+Alt L" = "send-to-output next"; + #"${main}+Alt L" = "focus-output next"; + + # move views + #"${main}+Alt H" = "move left 100"; + #"${main}+Alt J" = "move down 100"; + #"${main}+Alt K" = "move up 100"; + #"${main}+Alt L" = "move right 100"; + + # snap views + #"${main}+Control H" = "snap left"; + #"${main}+Control J" = "snap down"; + #"${main}+Control K" = "snap up"; + #"${main}+Control L" = "snap right"; + + # resize views + #"${main}+Shift H" = "resize horizontal -100"; + #"${main}+Shift J" = "resize vertical -100"; + #"${main}+Shift K" = "resize vertical 100"; + #"${main}+Shift L" = "resize horizontal 100"; + }; + }; + }; +} diff --git a/homes/modules/wm/sway.nix b/homes/modules/wm/sway.nix new file mode 100644 index 0000000..c5dd3be --- /dev/null +++ b/homes/modules/wm/sway.nix @@ -0,0 +1,53 @@ +{ config, inputs, pkgs, ... }: +let + unstable = inputs.nixpkgs-unstable.legacyPackages.${pkgs.stdenv.hostPlatform.system}; +in +{ + wayland.windowManager.sway = { + enable = true; + config = rec { + modifier = "Mod4"; # Mod4 = Super/Meta + terminal = "kitty"; + + # disable sway bar + bars = [ ]; + + # set border colors + #colors = { + #focused = + + startup = [ + { command = "awww-daemon"; } + { command = "waybar"; } + ]; + + keybindings = let + main = config.wayland.windowManager.sway.config.modifier; + terminal = config.wayland.windowManager.sway.config.terminal; + browser = "firefox"; + in { + "${main}+c" = "kill"; # close focused window + "${main}+Alt+Delete" = "exit"; # exit sway + + # open launcher + "${main}+d" = "exec pkill -x rofi || rofi -show drun -show-icons"; + "Alt+Tab" = "exec pkill -x rofi || rofi -modi window -show window -show-icons"; + + "${main}+t" = "exec ${terminal}"; # open terminal + "${main}+r" = "exec ${browser}"; # open browser + + # move focus + "${main}+h" = "focus left"; + "${main}+j" = "focus down"; + "${main}+k" = "focus up"; + "${main}+l" = "focus right"; + + # move focused window + "${main}+Alt+h" = "move left"; + "${main}+Alt+j" = "move down"; + "${main}+Alt+k" = "move up"; + "${main}+Alt+l" = "move right"; + }; + }; + }; +} diff --git a/hosts/nixarawrui/default.nix b/hosts/nixarawrui/default.nix new file mode 100644 index 0000000..c3d5c29 --- /dev/null +++ b/hosts/nixarawrui/default.nix @@ -0,0 +1,371 @@ +{ + inputs, + pkgs, + upkgs, + root, + ... +}: let + hyprland-git = inputs.hyprland-git.packages.${pkgs.stdenv.hostPlatform.system}; +in { + imports = [ + ./hardware-configuration.nix + + ./modules/amdgpu-ignore-ctx-privileges.nix + ]; + + # Enable the Flakes feature and the accompaying new nix command-line tool + nix.settings = { + experimental-features = ["nix-command" "flakes"]; + download-buffer-size = 524288000; + }; + + nixpkgs.config.allowUnfree = true; + + # Use the systemd-boot EFI boot loader. + boot = rec { + initrd.kernelModules = ["amdgpu"]; + + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + + # kernelPackages = pkgs.cachyosKernels.linuxPackages-cachyos-latest-lto-x86_64-v4; + kernelPackages = pkgs.linuxPackages_latest; + kernelModules = ["v4l2loopback"]; + extraModulePackages = with kernelPackages; [v4l2loopback]; + + # qemu + # boot.binfmt.emulatedSystems = [ + # "riscv64-linux" + # ]; + # the following line is from: + # https://discourse.nixos.org/t/chroot-into-arm-container-with-systemd-nspawn/34735 + # fixed my arch-chroot issue when trying to setup a risc v sd card for + # the mango pi mq pro + binfmt.preferStaticEmulators = true; + }; + + # bluetooth + services.blueman.enable = true; # gui bluetooth manager + + networking = { + hostName = "nixarawrui"; + networkmanager.enable = true; + firewall = { + enable = true; + # allows wireguard to route all traffic through default route <3 + checkReversePath = "loose"; + + allowedTCPPorts = [ + 21110 # slimevr + 44949 # rquickshare + ]; + allowedUDPPorts = [ + 6969 # slimevr + 8266 # slimevr + 35903 # slimevr + 44949 # rquickshare + ]; + }; + + nftables.enable = true; + wireguard.enable = true; + }; + + # hardware / driver stuff + hardware = { + keyboard = { + qmk.enable = true; + }; + opentabletdriver.enable = true; + wooting.enable = true; + xone.enable = true; + bluetooth.enable = true; + }; + + virtualisation = { + podman = { + enable = true; + dockerCompat = true; + }; + waydroid.enable = true; + }; + + environment.sessionVariables = { + NIXOS_OZONE_WL = "1"; + + # makes portals work correctly + QT_QPA_PLATFORMTHEME = "xdgdesktopportal"; + #QT_QPA_PLATFORMTHEME = "flatpak"; # sometimes might need this + }; + + xdg.portal = { + enable = true; + + wlr = { + enable = true; + }; + + extraPortals = with pkgs; [ + xdg-desktop-portal-termfilechooser + ]; + + config.common = { + "org.freedesktop.impl.portal.FileChooser" = ["termfilechooser"]; + }; + }; + + time.timeZone = "Europe/London"; + + i18n = { + defaultLocale = "en_US.UTF-8"; + supportedLocales = [ + "en_US.UTF-8/UTF-8" + "ja_JP.UTF-8/UTF-8" + ]; + }; + console = { + font = "Lat2-Terminus16"; + keyMap = "us"; + }; + + hardware.graphics = { + enable = true; + enable32Bit = true; + + extraPackages = with pkgs; [ + libva-vdpau-driver + libvdpau-va-gl + ]; + }; + + services = { + displayManager.sddm.enable = true; + displayManager.sddm.wayland.enable = true; + + udisks2.enable = true; + flatpak.enable = true; + + gnome.gnome-keyring.enable = true; + + # used for piper so u can configure silly little mice :3 + ratbagd.enable = true; + + # Enable sound. + pipewire = { + enable = true; + audio.enable = true; + wireplumber.enable = true; + + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + udev = { + enable = true; + packages = with pkgs; [ + # adds via support for keyboards and stuffs :3 (needs reboot) + via + + # slimevr :33333333333 (i'm queer) + slimevr + platformio + ]; + extraRules = '' + # Wooting One Legacy + SUBSYSTEM=="hidraw", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="ff01", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="ff01", TAG+="uaccess" + + # Wooting One update mode + SUBSYSTEM=="hidraw", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2402", TAG+="uaccess" + + # Wooting Two LegacySUBSYSTEM=="hidraw", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="ff02", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="ff02", TAG+="uaccess" + + # Wooting Two update mode + SUBSYSTEM=="hidraw", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2403", TAG+="uaccess" + + # Generic Wootings + SUBSYSTEM=="hidraw", ATTRS{idVendor}=="31e3", TAG+="uaccess" + SUBSYSTEM=="usb", ATTRS{idVendor}=="31e3", TAG+="uaccess" + ''; + }; + }; + + security = { + rtkit.enable = true; + polkit.enable = true; + }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.libinput.enable = true; + # Define a user account. Don't forget to set a password with ‘passwd’. + users = { + users.aurora = { + isNormalUser = true; + uid = 1000; + extraGroups = ["wheel" "disk" "input" "video" "audio" "networkmanager" "games"]; + + shell = pkgs.zsh; + + packages = with pkgs; [ + flatpak + tree + ]; + }; + groups.games = { + gid = 7000; + }; + }; + + home-manager = { + useGlobalPkgs = true; + useUserPackages = true; + + users.aurora = import ../../homes/aurora; + extraSpecialArgs = {inherit inputs upkgs root;}; + }; + + programs = { + # nix-ld runs unpatched dynamic binaries on nixos :3 + nix-ld.enable = true; + + # needed for gpg else no pinentry apparently + gnupg = { + agent.enable = true; + }; + + nh = { + enable = true; + clean.enable = true; + clean.extraArgs = "--keep-since 14d --keep 8"; + flake = "/etc/nixos"; # default flake + }; + + # hyprland, river, and sway have to be enabled here + # for there to be systemd entries for login managers + + # hyprland has to be enabled here for xdg portals + # to work properly on hyprland + hyprland = { + enable = true; + package = hyprland-git.hyprland; + portalPackage = hyprland-git.xdg-desktop-portal-hyprland; + }; + + river-classic = { + package = upkgs.river-classic; # FIX: using upkgs version as zls is broken rn ;-; + enable = true; + }; + + sway = { + enable = true; + wrapperFeatures.gtk = true; + }; + + # steam has to be enabled here + steam = { + enable = true; + package = pkgs.millennium-steam; + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = true; + localNetworkGameTransfers.openFirewall = true; + gamescopeSession.enable = true; + }; + + alvr = { + enable = true; + package = upkgs.alvr; + openFirewall = true; + }; + + envision = { + enable = true; + openFirewall = true; + }; + + # any shell that you wanna use needs to be enabled globally + # to set the default shell for users + # per-user config is done in home manager + zsh.enable = true; + fish.enable = true; + + silentSDDM = { + enable = false; + theme = "rei"; + }; + }; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + # linux packages!!! + linuxPackages.v4l2loopback + + # android yay + android-tools + + # network manager extra packages + networkmanager-openvpn + + # um makes my keyboard worky + via + + # wine - needed for lutris :3 + wineWowPackages.stable + + # utils, apps, important default stuff ig :3 + neovim + wget + git + bash + + # waydroid needs it apparently for clipboard sharing?? + wl-clipboard + (waydroid.override { + python3Packages = pkgs.python312Packages; + }) + + # game stuff :3 + (lutris.override { + extraPkgs = pkgs: [ + libadwaita + ]; + }) + (steam.override { + extraPkgs = pkgs: [ + nss + xorg.libX11 + xorg.libXScrnSaver + ]; + }).run + + inputs.nix-alien.packages.${stdenv.hostPlatform.system}.nix-alien + ]; + + # Copy the NixOS configuration file and link it from the resulting system + # (/run/current-system/configuration.nix). This is useful in case you + # accidentally delete configuration.nix. + # system.copySystemConfiguration = true; + + # This option defines the first version of NixOS you have installed on this particular machine, + # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. + # + # Most users should NEVER change this value after the initial install, for any reason, + # even if you've upgraded your system to a new NixOS release. + # + # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, + # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how + # to actually do that. + # + # This value being lower than the current NixOS release does NOT mean your system is + # out of date, out of support, or vulnerable. + # + # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, + # and migrated your data accordingly. + # + # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . + system.stateVersion = "24.11"; # Did you read the comment? +} diff --git a/hosts/nixarawrui/hardware-configuration.nix b/hosts/nixarawrui/hardware-configuration.nix new file mode 100644 index 0000000..fb2aef7 --- /dev/null +++ b/hosts/nixarawrui/hardware-configuration.nix @@ -0,0 +1,64 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/257dd2c7-59b1-431e-a5a1-c7db00b3312b"; + fsType = "btrfs"; + options = [ "subvol=@" ]; + }; + + fileSystems."/home" = + { device = "/dev/disk/by-uuid/257dd2c7-59b1-431e-a5a1-c7db00b3312b"; + fsType = "btrfs"; + options = [ "subvol=@home" ]; + }; + + fileSystems."/nix" = + { device = "/dev/disk/by-uuid/257dd2c7-59b1-431e-a5a1-c7db00b3312b"; + fsType = "btrfs"; + options = [ "subvol=@nix" ]; + }; + + fileSystems."/games" = + { device = "/dev/disk/by-uuid/257dd2c7-59b1-431e-a5a1-c7db00b3312b"; + fsType = "btrfs"; + options = [ "subvol=@games" ]; + }; + + fileSystems."/data" = + { device = "/dev/disk/by-uuid/257dd2c7-59b1-431e-a5a1-c7db00b3312b"; + fsType = "btrfs"; + options = [ "subvol=@data" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/63DC-1AEB"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp10s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp9s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/hosts/nixarawrui/modules/amdgpu-ignore-ctx-privileges.nix b/hosts/nixarawrui/modules/amdgpu-ignore-ctx-privileges.nix new file mode 100644 index 0000000..8498061 --- /dev/null +++ b/hosts/nixarawrui/modules/amdgpu-ignore-ctx-privileges.nix @@ -0,0 +1,32 @@ +{ + pkgs, + lib, + config, + ... +}: let + enabled = config.boot.kernelPatchesOptions.amd-ignore-ctx-privileges; +in { + options = { + boot.kernelPatchesOptions.amd-ignore-ctx-privileges = + lib.mkEnableOption "amd-ignore-ctx-privileges"; + }; + + config = lib.mkIf enabled { + nixpkgs.overlays = [ + (self: super: { + amdgpu-ignore-ctx-privileges = super.fetchpatch { + name = "cap_sys_nice_begone.patch"; + url = "https://github.com/Frogging-Family/community-patches/raw/master/linux61-tkg/cap_sys_nice_begone.mypatch"; + hash = "sha256-Y3a0+x2xvHsfLax/uwycdJf3xLxvVfkfDVqjkxNaYEo="; + }; + }) + ]; + + boot.kernelPatches = [ + { + name = "amdgpu-ignore-ctx-privileges"; + patch = pkgs.amdgpu-ignore-ctx-privileges; + } + ]; + }; +} diff --git a/overlays.nix b/overlays.nix new file mode 100644 index 0000000..8d28bdd --- /dev/null +++ b/overlays.nix @@ -0,0 +1,13 @@ + (self: super: { + ekphos = import ../packages/ekphos { + pkgs = super; + }; + + element-desktop = super.element-desktop.overrideAttrs (final: prev: { + desktopItems = [ + ((builtins.elemAt prev.desktopItems 0).override { + exec = "element-desktop %u --password-store=\"gnome-libsecret\""; + }) + ]; + }); + })