From 2a9b9b5fb7899a619b3d974fca4024f4e68f9921 Mon Sep 17 00:00:00 2001 From: azikx Date: Sat, 12 Oct 2024 18:43:57 +0900 Subject: [PATCH] =?UTF-8?q?update=20=EF=8C=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 21 + README.md | 67 + flake.lock | 1362 +++++++++++++++++ flake.nix | 85 + home/default.nix | 18 + home/programs/cli/btop/default.nix | 12 + home/programs/cli/cava/default.nix | 23 + home/programs/cli/default.nix | 17 + home/programs/cli/eza/default.nix | 10 + home/programs/cli/fastfetch/default.nix | 69 + home/programs/cli/fzf/default.nix | 10 + home/programs/cli/git/default.nix | 13 + home/programs/cli/helix/default.nix | 49 + home/programs/cli/helix/health.nix | 15 + home/programs/cli/helix/theme.nix | 96 ++ home/programs/cli/joa/binds.nix | 150 ++ home/programs/cli/joa/default.nix | 43 + home/programs/cli/joa/mime.nix | 265 ++++ home/programs/cli/joa/theme.nix | 76 + home/programs/cli/joshuto/binds.nix | 150 ++ home/programs/cli/joshuto/default.nix | 48 + home/programs/cli/joshuto/mime.nix | 172 +++ home/programs/cli/joshuto/previewer.nix | 16 + home/programs/cli/joshuto/theme.nix | 76 + home/programs/cli/micro/default.nix | 66 + home/programs/cli/neovim/default.nix | 43 + .../programs/cli/neovim/plugins/autopairs.nix | 15 + home/programs/cli/neovim/plugins/conform.nix | 57 + home/programs/cli/neovim/plugins/debug.nix | 145 ++ home/programs/cli/neovim/plugins/default.nix | 29 + home/programs/cli/neovim/plugins/gitsigns.nix | 219 +++ .../cli/neovim/plugins/indent-blankline.nix | 10 + home/programs/cli/neovim/plugins/lint.nix | 50 + home/programs/cli/neovim/plugins/lsp.nix | 274 ++++ home/programs/cli/neovim/plugins/mini.nix | 50 + home/programs/cli/neovim/plugins/neo-tree.nix | 28 + home/programs/cli/neovim/plugins/nvim-cmp.nix | 130 ++ .../programs/cli/neovim/plugins/telescope.nix | 169 ++ .../cli/neovim/plugins/treesitter.nix | 47 + .../programs/cli/neovim/plugins/which-key.nix | 47 + home/programs/cli/pkgs.nix | 52 + home/programs/cli/yazi/binds.nix | 50 + home/programs/cli/yazi/default.nix | 64 + home/programs/cli/yazi/lua.nix | 101 ++ home/programs/cli/yazi/plugins.nix | 77 + home/programs/cli/yazi/starship.nix | 43 + home/programs/cli/yazi/theme.nix | 619 ++++++++ home/programs/cli/zoxide/default.nix | 9 + .../custom-pkgs/anicliru/anicli-api.nix | 35 + .../custom-pkgs/anicliru/anicli-ru.nix | 33 + .../programs/custom-pkgs/anicliru/chompjs.nix | 30 + .../programs/custom-pkgs/anicliru/eggella.nix | 32 + home/programs/custom-pkgs/default.nix | 8 + home/programs/custom-pkgs/femto/default.nix | 24 + .../programs/custom-pkgs/termdash/default.nix | 30 + home/programs/custom-pkgs/tgt/tdlib.nix | 31 + home/programs/custom-pkgs/tgt/tgt.nix | 30 + .../custom-pkgs/torrserver/default.nix | 30 + home/programs/default.nix | 9 + home/programs/gui/ayugram/default.nix | 108 ++ home/programs/gui/default.nix | 13 + home/programs/gui/firefox/default.nix | 67 + home/programs/gui/firefox/search.nix | 27 + home/programs/gui/firefox/settings.nix | 165 ++ .../gui/firefox/user/cascade/colors.nix | 112 ++ .../gui/firefox/user/cascade/config.nix | 166 ++ .../gui/firefox/user/cascade/default.nix | 11 + .../gui/firefox/user/cascade/layout.nix | 66 + .../gui/firefox/user/cascade/navbar.nix | 52 + .../gui/firefox/user/cascade/resp.nix | 14 + .../gui/firefox/user/cascade/tabs.nix | 160 ++ .../programs/gui/firefox/user/cascade/tcr.nix | 42 + home/programs/gui/firefox/user/chrome.nix | 9 + home/programs/gui/firefox/user/content.nix | 32 + home/programs/gui/firefox/user/default.nix | 8 + home/programs/gui/firefox/user/waterfall.nix | 439 ++++++ home/programs/gui/mpv/default.nix | 91 ++ home/programs/gui/obs-studio/default.nix | 12 + home/programs/gui/pkgs.nix | 62 + home/programs/gui/qbittorrent/default.nix | 108 ++ home/programs/gui/spotify/default.nix | 48 + home/programs/gui/swayimg/default.nix | 220 +++ home/programs/misc/dconf.nix | 11 + home/programs/misc/default.nix | 9 + home/programs/misc/env.nix | 7 + home/programs/misc/nix.nix | 27 + home/programs/misc/nwg.nix | 21 + home/programs/misc/xdg.nix | 29 + home/programs/shells/default.nix | 8 + home/programs/shells/fish/default.nix | 82 + home/programs/shells/starship.nix | 70 + home/programs/shells/zsh/default.nix | 20 + home/themes/default.nix | 8 + home/themes/gtk.nix | 32 + home/themes/qt/default.nix | 7 + home/themes/qt/qt.nix | 9 + home/themes/qt/qt5ct.nix | 49 + home/themes/qt/qt6ct.nix | 49 + home/themes/stylix/paradise.nix | 25 + home/themes/stylix/stylix.nix | 55 + home/window-managers/default.nix | 31 + home/window-managers/hyprland/binds.nix | 152 ++ home/window-managers/hyprland/default.nix | 15 + home/window-managers/hyprland/plugins.nix | 70 + home/window-managers/hyprland/rules.nix | 40 + home/window-managers/hyprland/settings.nix | 125 ++ home/window-managers/misc/default.nix | 8 + home/window-managers/misc/mako/default.nix | 19 + .../window-managers/misc/swaylock/default.nix | 10 + home/window-managers/misc/swaync/default.nix | 76 + home/window-managers/misc/waybar/default.nix | 152 ++ .../misc/waybar/error/default.nix | 107 ++ .../misc/waybar/error/style.nix | 163 ++ .../misc/waybar/error/style_azikx.nix | 150 ++ home/window-managers/misc/waybar/style.nix | 117 ++ home/window-managers/swayfx/binds.nix | 127 ++ home/window-managers/swayfx/default.nix | 11 + home/window-managers/swayfx/settings.nix | 90 ++ home/window-managers/terminals/default.nix | 6 + .../terminals/foot/default.nix | 21 + .../window-managers/terminals/kitty/binds.nix | 51 + .../terminals/kitty/colors.nix | 37 + .../terminals/kitty/default.nix | 44 + host/default.nix | 7 + host/misc/autocpu.nix | 26 + host/misc/battery.nix | 8 + host/misc/default.nix | 13 + host/misc/locale.nix | 19 + host/misc/nh.nix | 10 + host/misc/nix.nix | 32 + host/misc/pkgs.nix | 25 + host/misc/security.nix | 31 + host/misc/sound.nix | 11 + host/misc/user.nix | 13 + host/misc/zapret.nix | 52 + host/system/boot.nix | 57 + host/system/default.nix | 9 + host/system/disks.nix | 23 + host/system/hardware.nix | 25 + host/system/network.nix | 15 + host/system/service.nix | 71 + host/system/systemd.nix | 19 + host/themes/paradise.nix | 22 + host/themes/qt.nix | 7 + host/themes/stylix.nix | 22 + 145 files changed, 10238 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 home/default.nix create mode 100644 home/programs/cli/btop/default.nix create mode 100644 home/programs/cli/cava/default.nix create mode 100644 home/programs/cli/default.nix create mode 100644 home/programs/cli/eza/default.nix create mode 100644 home/programs/cli/fastfetch/default.nix create mode 100644 home/programs/cli/fzf/default.nix create mode 100644 home/programs/cli/git/default.nix create mode 100644 home/programs/cli/helix/default.nix create mode 100644 home/programs/cli/helix/health.nix create mode 100644 home/programs/cli/helix/theme.nix create mode 100644 home/programs/cli/joa/binds.nix create mode 100644 home/programs/cli/joa/default.nix create mode 100644 home/programs/cli/joa/mime.nix create mode 100644 home/programs/cli/joa/theme.nix create mode 100644 home/programs/cli/joshuto/binds.nix create mode 100644 home/programs/cli/joshuto/default.nix create mode 100644 home/programs/cli/joshuto/mime.nix create mode 100644 home/programs/cli/joshuto/previewer.nix create mode 100644 home/programs/cli/joshuto/theme.nix create mode 100644 home/programs/cli/micro/default.nix create mode 100644 home/programs/cli/neovim/default.nix create mode 100755 home/programs/cli/neovim/plugins/autopairs.nix create mode 100755 home/programs/cli/neovim/plugins/conform.nix create mode 100644 home/programs/cli/neovim/plugins/debug.nix create mode 100644 home/programs/cli/neovim/plugins/default.nix create mode 100755 home/programs/cli/neovim/plugins/gitsigns.nix create mode 100755 home/programs/cli/neovim/plugins/indent-blankline.nix create mode 100755 home/programs/cli/neovim/plugins/lint.nix create mode 100755 home/programs/cli/neovim/plugins/lsp.nix create mode 100755 home/programs/cli/neovim/plugins/mini.nix create mode 100755 home/programs/cli/neovim/plugins/neo-tree.nix create mode 100755 home/programs/cli/neovim/plugins/nvim-cmp.nix create mode 100755 home/programs/cli/neovim/plugins/telescope.nix create mode 100755 home/programs/cli/neovim/plugins/treesitter.nix create mode 100755 home/programs/cli/neovim/plugins/which-key.nix create mode 100644 home/programs/cli/pkgs.nix create mode 100644 home/programs/cli/yazi/binds.nix create mode 100644 home/programs/cli/yazi/default.nix create mode 100644 home/programs/cli/yazi/lua.nix create mode 100644 home/programs/cli/yazi/plugins.nix create mode 100644 home/programs/cli/yazi/starship.nix create mode 100644 home/programs/cli/yazi/theme.nix create mode 100644 home/programs/cli/zoxide/default.nix create mode 100644 home/programs/custom-pkgs/anicliru/anicli-api.nix create mode 100644 home/programs/custom-pkgs/anicliru/anicli-ru.nix create mode 100644 home/programs/custom-pkgs/anicliru/chompjs.nix create mode 100644 home/programs/custom-pkgs/anicliru/eggella.nix create mode 100644 home/programs/custom-pkgs/default.nix create mode 100644 home/programs/custom-pkgs/femto/default.nix create mode 100644 home/programs/custom-pkgs/termdash/default.nix create mode 100644 home/programs/custom-pkgs/tgt/tdlib.nix create mode 100644 home/programs/custom-pkgs/tgt/tgt.nix create mode 100644 home/programs/custom-pkgs/torrserver/default.nix create mode 100644 home/programs/default.nix create mode 100644 home/programs/gui/ayugram/default.nix create mode 100644 home/programs/gui/default.nix create mode 100644 home/programs/gui/firefox/default.nix create mode 100644 home/programs/gui/firefox/search.nix create mode 100644 home/programs/gui/firefox/settings.nix create mode 100644 home/programs/gui/firefox/user/cascade/colors.nix create mode 100644 home/programs/gui/firefox/user/cascade/config.nix create mode 100644 home/programs/gui/firefox/user/cascade/default.nix create mode 100644 home/programs/gui/firefox/user/cascade/layout.nix create mode 100644 home/programs/gui/firefox/user/cascade/navbar.nix create mode 100644 home/programs/gui/firefox/user/cascade/resp.nix create mode 100644 home/programs/gui/firefox/user/cascade/tabs.nix create mode 100644 home/programs/gui/firefox/user/cascade/tcr.nix create mode 100644 home/programs/gui/firefox/user/chrome.nix create mode 100644 home/programs/gui/firefox/user/content.nix create mode 100644 home/programs/gui/firefox/user/default.nix create mode 100644 home/programs/gui/firefox/user/waterfall.nix create mode 100644 home/programs/gui/mpv/default.nix create mode 100644 home/programs/gui/obs-studio/default.nix create mode 100644 home/programs/gui/pkgs.nix create mode 100644 home/programs/gui/qbittorrent/default.nix create mode 100644 home/programs/gui/spotify/default.nix create mode 100644 home/programs/gui/swayimg/default.nix create mode 100644 home/programs/misc/dconf.nix create mode 100644 home/programs/misc/default.nix create mode 100644 home/programs/misc/env.nix create mode 100644 home/programs/misc/nix.nix create mode 100644 home/programs/misc/nwg.nix create mode 100644 home/programs/misc/xdg.nix create mode 100644 home/programs/shells/default.nix create mode 100644 home/programs/shells/fish/default.nix create mode 100644 home/programs/shells/starship.nix create mode 100644 home/programs/shells/zsh/default.nix create mode 100644 home/themes/default.nix create mode 100644 home/themes/gtk.nix create mode 100644 home/themes/qt/default.nix create mode 100644 home/themes/qt/qt.nix create mode 100644 home/themes/qt/qt5ct.nix create mode 100644 home/themes/qt/qt6ct.nix create mode 100644 home/themes/stylix/paradise.nix create mode 100644 home/themes/stylix/stylix.nix create mode 100644 home/window-managers/default.nix create mode 100644 home/window-managers/hyprland/binds.nix create mode 100644 home/window-managers/hyprland/default.nix create mode 100644 home/window-managers/hyprland/plugins.nix create mode 100644 home/window-managers/hyprland/rules.nix create mode 100644 home/window-managers/hyprland/settings.nix create mode 100644 home/window-managers/misc/default.nix create mode 100644 home/window-managers/misc/mako/default.nix create mode 100644 home/window-managers/misc/swaylock/default.nix create mode 100644 home/window-managers/misc/swaync/default.nix create mode 100644 home/window-managers/misc/waybar/default.nix create mode 100644 home/window-managers/misc/waybar/error/default.nix create mode 100644 home/window-managers/misc/waybar/error/style.nix create mode 100644 home/window-managers/misc/waybar/error/style_azikx.nix create mode 100644 home/window-managers/misc/waybar/style.nix create mode 100644 home/window-managers/swayfx/binds.nix create mode 100644 home/window-managers/swayfx/default.nix create mode 100644 home/window-managers/swayfx/settings.nix create mode 100644 home/window-managers/terminals/default.nix create mode 100644 home/window-managers/terminals/foot/default.nix create mode 100644 home/window-managers/terminals/kitty/binds.nix create mode 100644 home/window-managers/terminals/kitty/colors.nix create mode 100644 home/window-managers/terminals/kitty/default.nix create mode 100644 host/default.nix create mode 100644 host/misc/autocpu.nix create mode 100644 host/misc/battery.nix create mode 100644 host/misc/default.nix create mode 100644 host/misc/locale.nix create mode 100644 host/misc/nh.nix create mode 100644 host/misc/nix.nix create mode 100644 host/misc/pkgs.nix create mode 100644 host/misc/security.nix create mode 100644 host/misc/sound.nix create mode 100644 host/misc/user.nix create mode 100644 host/misc/zapret.nix create mode 100644 host/system/boot.nix create mode 100644 host/system/default.nix create mode 100644 host/system/disks.nix create mode 100644 host/system/hardware.nix create mode 100644 host/system/network.nix create mode 100644 host/system/service.nix create mode 100644 host/system/systemd.nix create mode 100644 host/themes/paradise.nix create mode 100644 host/themes/qt.nix create mode 100644 host/themes/stylix.nix diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2e2fbac --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Parasrah + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..6e74a5a --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +
+

❄️【 NIXOS DOTFILES 】❄️

+
+ +
+ Software + + + | Name | Desciption | + | ------------- | ------------- | + | Desktop utilites | + | [hyprland](https://github.com/hyprwm/hyprland) | Best window manager | + | [kitty](https://github.com/kovidgoyal/kitty) | Very good terminal with image preview | + | [foot](https://codeberg.org/dnkl/foot) | Simplest terminal | + | [grimblast](https://github.com/hyprwm/contrib/tree/main/grimblast) | Screenshoter | + | [nwg-drawer](https://github.com/nwg-piotr/nwg-drawer) | Gnome-like launcher | + | [waybar](https://github.com/Alexays/Waybar) | Bar for waylands | + | CLI utilites | + | [fish](https://github.com/fish-shell/fish-shell) | Just working shell | + | [fastfetch](https://github.com/fastfetch-cli/fastfetch) | Fetch for be cool rices | + | [yazi](https://github.com/sxyazi/yazi) | Rusted file-manager great!!! | + | [joshuto](https://github.com/kamiyaa/joshuto) | Rusted file-manager | + | [helix](https://github.com/helix-editor/helix) | Best text editor with vi-like keys | + | [micro](https://github.com/zyedidia/micro) | Simplest fucking text editor | + | [cava](https://github.com/karlstav/cava) | Sound visualizer | + | [eza](https://github.com/eza-community/eza) | Rusted ls with icons | + | [lutgen](https://github.com/ozwaldorf/lutgen-rs) | Rusted lut | + | [nvtop](https://github.com/Syllo/nvtop) | Top for GPU | + | [btop](https://github.com/aristocratos/btop) | Very informated top | + | [doas](https://wiki.archlinux.org/title/Doas) | sudo from bsd systems | + | GUI utilites | + | [firefox](https://github.com/mozilla) | Customizable browser | + | [bottles](https://github.com/bottlesdevs/Bottles) | Wine launcher | + | [nemo](https://github.com/linuxmint/nemo) | File manager from Cinnamon | + | [obsidian](https://obsidian.md) | Markdown | + | [onlyoffice](https://github.com/ONLYOFFICE/DesktopEditors) | Office suite | + | [prismlauncher](https://github.com/PrismLauncher/PrismLauncher) | Fuckm all my homies plays this shit man | + | [vesktop](https://github.com/Vencord/Vesktop) | Wayland Discord client | + | [qbittorrent](https://github.com/qbittorrent/qBittorrent) | Torrents))))) hahah)))) | + | [ayugram](https://github.com/AyuGram/AyuGramDesktop) | Telegram client with ghost mode | + | [file-Roller](https://gitlab.gnome.org/GNOME/file-roller) | Archiver | + | [mpv](https://github.com/mpv-player/mpv) | Simplest video player | + | [anime4k](https://github.com/bloc97/Anime4K) | Anime upscaler | + | [swayimg](https://github.com/artemsen/swayimg) | Simple image viewer | + | Misc | + | [nix-tree](https://github.com/utdemir/nix-tree) | Tree for your generations&derivations | + | [prefetch-github](https://github.com/seppeljordan/nix-prefetch-github) | Tool for fetching github repo | + | [tenki](https://github.com/ckaznable/tenki) | TUI clock with effects | + | [confetty](https://github.com/maaslalani/confetty) | Confetty and fireworks in terminal | + | [jetbrains](https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/JetBrainsMono) | Nerded JetBrains | + + + - IDK WHAT ALSO DUDES +
+ +## [WALLPAPERS](https://git.sr.ht/~azikx/wallpapers) & [USERSTYLES](https://git.sr.ht/~azikx/userstyles) + +![aye](https://git.sr.ht/~azikx/wallpapers/blob/main/dotfiles/fetch.png) + +![ауе](https://git.sr.ht/~azikx/wallpapers/blob/main/dotfiles/furryfox.png) + +![ауе](https://git.sr.ht/~azikx/wallpapers/blob/main/dotfiles/top.png) + +![ауе](https://git.sr.ht/~azikx/wallpapers/blob/main/dotfiles/yazi.png) + +#### ENGLISH OR SPANISH??? WHOEVER MOVES IS GAY))))))) +#### THANKS FOR [hezaki](https://codeberg.org/Hezaki/Touka/), HONORED BROTHER, FOR THE EMPEROR diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..2e1ff21 --- /dev/null +++ b/flake.lock @@ -0,0 +1,1362 @@ +{ + "nodes": { + "Hyprspace": { + "inputs": { + "hyprland": [ + "hyprland" + ] + }, + "locked": { + "lastModified": 1726437584, + "narHash": "sha256-lMIFDORuyMYHtUPrRWU5WjGcS+ZMrR4/wBSO+sgUVSY=", + "owner": "KZDKM", + "repo": "Hyprspace", + "rev": "8f14fa2e10d24742d713f04c278bc7651037b74b", + "type": "github" + }, + "original": { + "owner": "KZDKM", + "repo": "Hyprspace", + "type": "github" + } + }, + "anyrun": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems" + }, + "locked": { + "lastModified": 1721135360, + "narHash": "sha256-ZhSA0e45UxiOAjEVqkym/aULh0Dt+KHJLNda7bjx9UI=", + "owner": "anyrun-org", + "repo": "anyrun", + "rev": "c6101a31a80b51e32e96f6a77616b609770172e0", + "type": "github" + }, + "original": { + "owner": "anyrun-org", + "repo": "anyrun", + "type": "github" + } + }, + "aquamarine": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1726665257, + "narHash": "sha256-rEzEZtd3iyVo5RJ1OGujOlnywNf3gsrOnjAn1NLciD4=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "752d0fbd141fabb5a1e7f865199b80e6e76f8d8e", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "aquamarine", + "type": "github" + } + }, + "auto-cpufreq": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726162350, + "narHash": "sha256-SI2pDWGKqRJh48wGLovsVT4xPXTZZjM2zaOP3HpUPTE=", + "owner": "AdnanHodzic", + "repo": "auto-cpufreq", + "rev": "7b03630a5e094fc2ef58492d6be35bf64c387815", + "type": "github" + }, + "original": { + "owner": "AdnanHodzic", + "repo": "auto-cpufreq", + "type": "github" + } + }, + "ayugram-desktop": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1726382392, + "narHash": "sha256-/yKVQc9Z692yQzamLD3WEXH6sRY6/9hhiZ3gmeMRfA8=", + "owner": "kaeeraa", + "repo": "ayugram-desktop", + "rev": "e28e7e5483dec654ff95da6649a35cfe28a2ab84", + "type": "github" + }, + "original": { + "owner": "kaeeraa", + "ref": "release", + "repo": "ayugram-desktop", + "type": "github" + } + }, + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1708890466, + "narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "665b3c6748534eb766c777298721cece9453fdae", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "base16.nix", + "type": "github" + } + }, + "base16-fish": { + "flake": false, + "locked": { + "lastModified": 1622559957, + "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=", + "owner": "tomyun", + "repo": "base16-fish", + "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe", + "type": "github" + }, + "original": { + "owner": "tomyun", + "repo": "base16-fish", + "type": "github" + } + }, + "base16-foot": { + "flake": false, + "locked": { + "lastModified": 1696725948, + "narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=", + "owner": "tinted-theming", + "repo": "base16-foot", + "rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-foot", + "type": "github" + } + }, + "base16-helix": { + "flake": false, + "locked": { + "lastModified": 1720809814, + "narHash": "sha256-numb3xigRGnr/deF7wdjBwVg7fpbTH7reFDkJ75AJkY=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "34f41987bec14c0f3f6b2155c19787b1f6489625", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-helix", + "type": "github" + } + }, + "base16-kitty": { + "flake": false, + "locked": { + "lastModified": 1665001328, + "narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=", + "owner": "kdrag0n", + "repo": "base16-kitty", + "rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805", + "type": "github" + }, + "original": { + "owner": "kdrag0n", + "repo": "base16-kitty", + "type": "github" + } + }, + "base16-tmux": { + "flake": false, + "locked": { + "lastModified": 1696725902, + "narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=", + "owner": "tinted-theming", + "repo": "base16-tmux", + "rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-tmux", + "type": "github" + } + }, + "base16-vim": { + "flake": false, + "locked": { + "lastModified": 1716150083, + "narHash": "sha256-ZMhnNmw34ogE5rJZrjRv5MtG3WaqKd60ds2VXvT6hEc=", + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "6e955d704d046b0dc3e5c2d68a2a6eeffd2b5d3d", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-vim", + "type": "github" + } + }, + "devshell": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1722113426, + "narHash": "sha256-Yo/3loq572A8Su6aY5GP56knpuKYRvM2a1meP9oJZCw=", + "owner": "numtide", + "repo": "devshell", + "rev": "67cce7359e4cd3c45296fb4aaf6a19e2a9c757ae", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "devshell", + "type": "github" + } + }, + "firefox-addons": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "dir": "pkgs/firefox-addons", + "lastModified": 1726459406, + "narHash": "sha256-gE3ujV5cS6KrTmstZqxWzFrQzn7lmcHsGlg6H+XlwSQ=", + "owner": "rycee", + "repo": "nur-expressions", + "rev": "21a12c141b50fa8712ffbcce35b2f476393197e8", + "type": "gitlab" + }, + "original": { + "dir": "pkgs/firefox-addons", + "owner": "rycee", + "repo": "nur-expressions", + "type": "gitlab" + } + }, + "flake-compat": { + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "revCount": 57, + "type": "tarball", + "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_3": { + "flake": false, + "locked": { + "lastModified": 1673956053, + "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "anyrun", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1717285511, + "narHash": "sha256-iKzJcpdXih14qYVcZ9QC9XuZYnPc6T8YImb6dX166kw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "2a55567fcf15b1b1c7ed712a2c6fadaec7412ea8", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1726153070, + "narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726153070, + "narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "locked": { + "lastModified": 1629284811, + "narHash": "sha256-JHgasjPR0/J1J3DRm4KxM4zTyAj4IOJY8vIl75v/kPI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "c5d161cc0af116a2e17f54316f0bf43f0819785c", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_3": { + "inputs": { + "systems": "systems_4" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { + "inputs": { + "systems": [ + "stylix", + "systems" + ] + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_5": { + "inputs": { + "systems": "systems_6" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1689549921, + "narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": [ + "nixvim", + "flake-compat" + ], + "gitignore": "gitignore", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ], + "nixpkgs-stable": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1725513492, + "narHash": "sha256-tyMUA6NgJSvvQuzB7A1Sf8+0XCHyfSPRx/b00o6K0uo=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "7570de7b9b504cfe92025dd1be797bf546f66528", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "nixvim", + "git-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" + } + }, + "gnome-shell": { + "flake": false, + "locked": { + "lastModified": 1713702291, + "narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934", + "type": "github" + }, + "original": { + "owner": "GNOME", + "ref": "46.1", + "repo": "gnome-shell", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726357542, + "narHash": "sha256-p4OrJL2weh0TRtaeu1fmNYP6+TOp/W2qdaIJxxQay4c=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "e524c57b1fa55d6ca9d8354c6ce1e538d2a1f47f", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726308872, + "narHash": "sha256-d4vwO5N4RsLnCY7k5tY9xbdYDWQsY3RDMeUoIa4ms2A=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "6c1a461a444e6ccb3f3e42bb627b510c3a722a57", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_3": { + "inputs": { + "nixpkgs": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1724435763, + "narHash": "sha256-UNky3lJNGQtUEXT2OY8gMxejakSWPTfWKvpFkpFlAfM=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "c2cd2a52e02f1dfa1c88f95abeb89298d46023be", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "hyprcursor": { + "inputs": { + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1722623071, + "narHash": "sha256-sLADpVgebpCBFXkA1FlCXtvEPu1tdEsTfqK1hfeHySE=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "912d56025f03d41b1ad29510c423757b4379eb1c", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprcursor", + "type": "github" + } + }, + "hyprfocus": { + "inputs": { + "hyprland": [ + "hyprland" + ], + "nix-filter": "nix-filter" + }, + "locked": { + "lastModified": 1717066948, + "narHash": "sha256-R1ZgNhQkoS6ZHRRKB+j5vYgRANfYO//sHbrD7moUTx0=", + "owner": "pyt0xic", + "repo": "hyprfocus", + "rev": "aa7262d3a4564062f97b9cfdad47fd914cfb80f2", + "type": "github" + }, + "original": { + "owner": "pyt0xic", + "repo": "hyprfocus", + "type": "github" + } + }, + "hyprgrass": { + "inputs": { + "hyprland": [ + "hyprland" + ] + }, + "locked": { + "lastModified": 1724620988, + "narHash": "sha256-3CN9ZioI5XBtp6WF61hH2EyASHUIPJQCTXiW1rt9n5w=", + "owner": "horriblename", + "repo": "hyprgrass", + "rev": "427690aec574fec75f5b7b800ac4a0b4c8e4b1d5", + "type": "github" + }, + "original": { + "owner": "horriblename", + "repo": "hyprgrass", + "type": "github" + } + }, + "hyprland": { + "inputs": { + "aquamarine": "aquamarine", + "hyprcursor": "hyprcursor", + "hyprlang": "hyprlang", + "hyprutils": "hyprutils", + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": "nixpkgs_2", + "systems": "systems_3", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1726918033, + "narHash": "sha256-I0U4OLssUlNd6/KXHwErmgmYZURTJYJNHbeoKaMH4iI=", + "ref": "refs/heads/main", + "rev": "8579066c7a1ceb745499ea4e11d5d420b1387ec0", + "revCount": 5246, + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" + }, + "original": { + "submodules": true, + "type": "git", + "url": "https://github.com/hyprwm/Hyprland" + } + }, + "hyprland-plugins": { + "inputs": { + "hyprland": [ + "hyprland" + ], + "nixpkgs": [ + "hyprland-plugins", + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland-plugins", + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1723143591, + "narHash": "sha256-dPcWAeRJoG5CyWC32X3XX+Og0v/k1/S1N0T5dQWT32k=", + "owner": "hyprwm", + "repo": "hyprland-plugins", + "rev": "b73d7b901d8cb1172dd25c7b7159f0242c625a77", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-plugins", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "xdph", + "nixpkgs" + ], + "systems": [ + "hyprland", + "xdph", + "systems" + ] + }, + "locked": { + "lastModified": 1721326555, + "narHash": "sha256-zCu4R0CSHEactW9JqYki26gy8h9f6rHmSwj4XJmlHgg=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "5a11232266bf1a1f5952d5b179c3f4b2facaaa84", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "hyprlang": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1725997860, + "narHash": "sha256-d/rZ/fHR5l1n7PeyLw0StWMNLXVU9c4HFyfskw568so=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "dfeb5811dd6485490cce18d6cc1e38a055eea876", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprutils": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1726874949, + "narHash": "sha256-PNnIpwGqpTvMU3N2r0wMQwK1E+t4Bb5fbJwblQvr+80=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "d97af4f6bd068c03a518b597675e598f57ea2291", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprutils", + "type": "github" + } + }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1726840673, + "narHash": "sha256-HIPEXyRRVZoqD6U+lFS1B0tsIU7p83FaB9m7KT/x6mQ=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "b68dab23fc922eae99306988133ee80a40b39ca5", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "type": "github" + } + }, + "nix-darwin": { + "inputs": { + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726188813, + "narHash": "sha256-Vop/VRi6uCiScg/Ic+YlwsdIrLabWUJc57dNczp0eBc=", + "owner": "lnl7", + "repo": "nix-darwin", + "rev": "21fe31f26473c180390cfa81e3ea81aca0204c80", + "type": "github" + }, + "original": { + "owner": "lnl7", + "repo": "nix-darwin", + "type": "github" + } + }, + "nix-filter": { + "locked": { + "lastModified": 1694857738, + "narHash": "sha256-bxxNyLHjhu0N8T3REINXQ2ZkJco0ABFPn6PIe2QUfqo=", + "owner": "numtide", + "repo": "nix-filter", + "rev": "41fd48e00c22b4ced525af521ead8792402de0ea", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nix-filter", + "type": "github" + } + }, + "nix-wallpapers": { + "flake": false, + "locked": { + "lastModified": 1728202116, + "narHash": "sha256-yWH6qAkaCzkuiXuumrOBjOmuzb3LxzgW4RRATubla1k=", + "owner": "axax-loll", + "repo": "nix-wallpapers", + "rev": "3053c38530805c46b2c77ceb7684ded352b5b5aa", + "type": "github" + }, + "original": { + "owner": "axax-loll", + "repo": "nix-wallpapers", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1726905744, + "narHash": "sha256-xyNtG5C+xvfsnOVEamFe9zCCnuNwk93K/TlFC/4DmCI=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "b493dfd4a8cf9552932179e56ff3b5819a9b8381", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1726062873, + "narHash": "sha256-IiA3jfbR7K/B5+9byVi9BZGWTD4VSbWe8VLpp9B/iYk=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4f807e8940284ad7925ebd0a0993d2a1791acb2f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1725233747, + "narHash": "sha256-Ss8QWLXdr2JCBPcYChJhz4xJm+h/xjl4G0c0XlP6a74=", + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz" + }, + "original": { + "type": "tarball", + "url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1726320982, + "narHash": "sha256-RuVXUwcYwaUeks6h3OLrEmg14z9aFXdWppTWPMTwdQw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "8f7492cce28977fbf8bd12c72af08b1f6c7c3e49", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1726755586, + "narHash": "sha256-PmUr/2GQGvFTIJ6/Tvsins7Q43KTMvMFhvG6oaYK+Wk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c04d5652cfa9742b1d519688f65d1bbccea9eb7e", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1726062873, + "narHash": "sha256-IiA3jfbR7K/B5+9byVi9BZGWTD4VSbWe8VLpp9B/iYk=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "4f807e8940284ad7925ebd0a0993d2a1791acb2f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1725194671, + "narHash": "sha256-tLGCFEFTB5TaOKkpfw3iYT9dnk4awTP/q4w+ROpMfuw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b833ff01a0d694b910daca6e2ff4a3f26dee478c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1722415718, + "narHash": "sha256-5US0/pgxbMksF92k1+eOa8arJTJiPvsdZj9Dl+vJkM4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c3392ad349a5227f4a3464dce87bcc5046692fce", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixvim": { + "inputs": { + "devshell": "devshell", + "flake-compat": "flake-compat", + "flake-parts": "flake-parts_3", + "git-hooks": "git-hooks", + "home-manager": "home-manager_2", + "nix-darwin": "nix-darwin", + "nixpkgs": [ + "nixpkgs" + ], + "nuschtosSearch": "nuschtosSearch", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1726359833, + "narHash": "sha256-JyGswMj/u+AtrHHuI5ISADw9SpGLvThbNkEPwUbNnFk=", + "owner": "nix-community", + "repo": "nixvim", + "rev": "61be7a6eed7b6e70db9731cdf32d6a3e163cee73", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixvim", + "type": "github" + } + }, + "nur": { + "locked": { + "lastModified": 1726393490, + "narHash": "sha256-LVGtTtPzF0rxy3nKzegvaLVsTKSM0IMLjfbxnh7FKP0=", + "owner": "nix-community", + "repo": "NUR", + "rev": "1a4d47c6fc08986702c185ef0409d59dd42269a1", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "nuschtosSearch": { + "inputs": { + "flake-utils": "flake-utils_3", + "nixpkgs": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726208959, + "narHash": "sha256-Bq2YtXyHhDpBrqDlJysQgbhvauyiYTQXt7d6xxZdRck=", + "owner": "NuschtOS", + "repo": "search", + "rev": "4267d5c5b51591a9553eefbd12172da050ee3433", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "repo": "search", + "type": "github" + } + }, + "root": { + "inputs": { + "Hyprspace": "Hyprspace", + "anyrun": "anyrun", + "auto-cpufreq": "auto-cpufreq", + "ayugram-desktop": "ayugram-desktop", + "firefox-addons": "firefox-addons", + "flake-parts": "flake-parts_2", + "home-manager": "home-manager", + "hyprfocus": "hyprfocus", + "hyprgrass": "hyprgrass", + "hyprland": "hyprland", + "hyprland-plugins": "hyprland-plugins", + "nix-wallpapers": "nix-wallpapers", + "nixos-hardware": "nixos-hardware", + "nixpkgs": "nixpkgs_3", + "nixpkgs-stable": "nixpkgs-stable", + "nixvim": "nixvim", + "nur": "nur", + "spicetify-nix": "spicetify-nix", + "stylix": "stylix", + "yazi": "yazi" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "yazi", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1721441897, + "narHash": "sha256-gYGX9/22tPNeF7dR6bWN5rsrpU4d06GnQNNgZ6ZiXz0=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "b7996075da11a2d441cfbf4e77c2939ce51506fd", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "b7996075da11a2d441cfbf4e77c2939ce51506fd", + "type": "github" + } + }, + "spicetify-nix": { + "inputs": { + "flake-compat": "flake-compat_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1726633022, + "narHash": "sha256-Ef/kTMoV3aPfecL2X27sxYshsLJJDIBFKYjPsqaTUBw=", + "owner": "Gerg-L", + "repo": "spicetify-nix", + "rev": "9f373314f087e11183afe6928d48a816d44929d4", + "type": "github" + }, + "original": { + "owner": "Gerg-L", + "repo": "spicetify-nix", + "type": "github" + } + }, + "stylix": { + "inputs": { + "base16": "base16", + "base16-fish": "base16-fish", + "base16-foot": "base16-foot", + "base16-helix": "base16-helix", + "base16-kitty": "base16-kitty", + "base16-tmux": "base16-tmux", + "base16-vim": "base16-vim", + "flake-compat": "flake-compat_3", + "flake-utils": "flake-utils_4", + "gnome-shell": "gnome-shell", + "home-manager": "home-manager_3", + "nixpkgs": "nixpkgs_4", + "systems": "systems_5" + }, + "locked": { + "lastModified": 1726170940, + "narHash": "sha256-sobkRkGBaMX9pD0bwU1iVPWi0WtQvZqlHyl1YtvNDio=", + "owner": "danth", + "repo": "stylix", + "rev": "35233f929629c8eb64e939e35260fc8347f94df9", + "type": "github" + }, + "original": { + "owner": "danth", + "repo": "stylix", + "type": "github" + } + }, + "systems": { + "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_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": [ + "nixvim", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1725271838, + "narHash": "sha256-VcqxWT0O/gMaeWTTjf1r4MOyG49NaNxW4GHTO3xuThE=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "9fb342d14b69aefdf46187f6bb80a4a0d97007cd", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "xdph": { + "inputs": { + "hyprland-protocols": "hyprland-protocols", + "hyprlang": [ + "hyprland", + "hyprlang" + ], + "hyprutils": [ + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1726851729, + "narHash": "sha256-1z0esr5lBeUMlrPZ9gZmqZT8oTQekxJi53HAW4cH0Ms=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "73b8c4f1150040644cf678aa8bbf2cec48a433cf", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "type": "github" + } + }, + "yazi": { + "inputs": { + "flake-utils": "flake-utils_5", + "nixpkgs": "nixpkgs_5", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1727455294, + "narHash": "sha256-WSSLsNJw4ABnaXjs/lVcCea1d/YF6ko+OZ3TElIEg+E=", + "owner": "sxyazi", + "repo": "yazi", + "rev": "3e4973dbbfa7d34a95b6005822db84db51ebddb7", + "type": "github" + }, + "original": { + "owner": "sxyazi", + "repo": "yazi", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..0809ba2 --- /dev/null +++ b/flake.nix @@ -0,0 +1,85 @@ +{ + outputs = { self, nixpkgs, home-manager, ... }@inputs: + let system = "x86_64-linux"; in + { + nixosConfigurations = { + wysvort = nixpkgs.lib.nixosSystem { + specialArgs = { inherit system inputs; }; + modules = [ ./host ]; + }; + }; + + homeConfigurations = { + megamozg = home-manager.lib.homeManagerConfiguration { + pkgs = nixpkgs.legacyPackages.x86_64-linux; + extraSpecialArgs = { inherit inputs; }; + modules = [ ./home ]; + }; + }; + }; + + inputs = { + # REPOSITORIES NIXPKGS + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05"; + nur.url = "github:nix-community/NUR"; + + # ONE LINE SOFTWARE + ayugram-desktop.url = "github:kaeeraa/ayugram-desktop/release?submodules=1"; + hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1"; + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + flake-parts.url = "github:hercules-ci/flake-parts"; + stylix.url = "github:danth/stylix"; + yazi.url = "github:sxyazi/yazi"; + + # TWO LINE SOFTWARE + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + anyrun = { + url = "github:anyrun-org/anyrun"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + nixvim = { + url = "github:nix-community/nixvim"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + spicetify-nix = { + url = "github:Gerg-L/spicetify-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + firefox-addons = { + url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + auto-cpufreq = { + url = "github:AdnanHodzic/auto-cpufreq"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + # HYPRlAND + hyprland-plugins = { + url = "github:hyprwm/hyprland-plugins"; + inputs.hyprland.follows = "hyprland"; + }; + Hyprspace = { + url = "github:KZDKM/Hyprspace"; + inputs.hyprland.follows = "hyprland"; + }; + hyprgrass = { + url = "github:horriblename/hyprgrass"; + inputs.hyprland.follows = "hyprland"; + }; + hyprfocus = { + url = "github:pyt0xic/hyprfocus"; + inputs.hyprland.follows = "hyprland"; + }; + nix-wallpapers = { + type = "github"; + owner = "axax-loll"; + repo = "nix-wallpapers"; + flake = false; + }; + }; +} diff --git a/home/default.nix b/home/default.nix new file mode 100644 index 0000000..3cc45b9 --- /dev/null +++ b/home/default.nix @@ -0,0 +1,18 @@ +{ + imports = [ + ./window-managers + ./programs + ./themes + ]; + + home = { + username = "megamozg"; + homeDirectory = "/home/megamozg"; + stateVersion = "24.05"; + }; + manual = { + html.enable = false; + json.enable = false; + manpages.enable = false; + }; +} diff --git a/home/programs/cli/btop/default.nix b/home/programs/cli/btop/default.nix new file mode 100644 index 0000000..718cff3 --- /dev/null +++ b/home/programs/cli/btop/default.nix @@ -0,0 +1,12 @@ +{ ... }: +{ + programs.btop = { + enable = true; + settings = { + color_theme = "TTY"; + theme_background = true; + vim_keys = true; + rounded_corners = true; + }; + }; +} diff --git a/home/programs/cli/cava/default.nix b/home/programs/cli/cava/default.nix new file mode 100644 index 0000000..ac004ca --- /dev/null +++ b/home/programs/cli/cava/default.nix @@ -0,0 +1,23 @@ +{ config, ... }: +{ + programs.cava = { + enable = true; + settings = { + general = { + # framerate = 24; + # bars = 0; + # bar_width = 1; + # bar_spacing = 1; + }; + color = with config.lib.stylix.colors; { + gradient = 1; + gradient_color_1 = "'#${base0E}'"; + gradient_color_2 = "'#${base0D}'"; + gradient_color_3 = "'#${base0C}'"; + gradient_color_4 = "'#${base0B}'"; + gradient_color_5 = "'#${base0A}'"; + gradient_color_6 = "'#${base09}'"; + }; + }; + }; +} diff --git a/home/programs/cli/default.nix b/home/programs/cli/default.nix new file mode 100644 index 0000000..5804bc7 --- /dev/null +++ b/home/programs/cli/default.nix @@ -0,0 +1,17 @@ +{ + imports = [ + ./pkgs.nix + + ./eza + ./fzf + ./fastfetch + ./zoxide + ./cava + ./btop + ./micro + ./git + ./helix + ./yazi + ./joshuto + ]; +} diff --git a/home/programs/cli/eza/default.nix b/home/programs/cli/eza/default.nix new file mode 100644 index 0000000..2e270cd --- /dev/null +++ b/home/programs/cli/eza/default.nix @@ -0,0 +1,10 @@ +{ ... }: +{ + programs.eza = { + enable = true; + icons = true; + extraOptions = [ + "--group-directories-first" + ]; + }; +} diff --git a/home/programs/cli/fastfetch/default.nix b/home/programs/cli/fastfetch/default.nix new file mode 100644 index 0000000..5e3a005 --- /dev/null +++ b/home/programs/cli/fastfetch/default.nix @@ -0,0 +1,69 @@ +{ + programs.fastfetch = { + enable = true; + settings = { + logo = { + type = "builtin"; + source = "nixos_small"; + padding = { + left = 1; + right = 2; + top = 1; + }; + color = { + "1" = "cyan"; + "2" = "blue"; + }; + }; + display = { + separator = ": "; + color = { + keys = "cyan"; + title = "blue"; + }; + size = { + ndigits = 2; + maxPrefix = "GB"; + }; + }; + modules = [ + { + type = "title"; + color = { + user = "cyan"; + at = "cyan"; + host = "cyan"; + }; + } + { + type = "uptime"; + key = "UPT "; + format = "{2} hours, {3} mins"; + } + { + type = "packages"; + key = "PKG "; + } + { + type = "shell"; + key = "SHL "; + format = "{6} {4}"; + } + { + type = "wm"; + key = "DWM "; + format = "{2} / {3}"; + } + { + type = "memory"; + key = "MEM "; + format = "{} / {}"; + } + { type = "break"; } + { + type = "colors"; + } + ]; + }; + }; +} diff --git a/home/programs/cli/fzf/default.nix b/home/programs/cli/fzf/default.nix new file mode 100644 index 0000000..ded53b4 --- /dev/null +++ b/home/programs/cli/fzf/default.nix @@ -0,0 +1,10 @@ +{ ... }: +{ + programs.fzf = { + enable = true; + enableFishIntegration = true; + # defaultOptions = [ + # "--margin 1" + # ]; + }; +} diff --git a/home/programs/cli/git/default.nix b/home/programs/cli/git/default.nix new file mode 100644 index 0000000..6467168 --- /dev/null +++ b/home/programs/cli/git/default.nix @@ -0,0 +1,13 @@ +{ ... }: +{ + programs.git = { + enable = true; + userName = "azikx"; + userEmail = "irongidra@gmail.com"; + extraConfig = { + color.ui = true; + init.defaultBranch = "main"; + safe.directory = "/etc/nixos"; + }; + }; +} diff --git a/home/programs/cli/helix/default.nix b/home/programs/cli/helix/default.nix new file mode 100644 index 0000000..83a4dff --- /dev/null +++ b/home/programs/cli/helix/default.nix @@ -0,0 +1,49 @@ +{ ... }: +{ + imports = [ ./theme.nix ./health.nix ]; + programs.helix = { + enable = true; + defaultEditor = true; + settings = { + theme = "themo"; + editor = { + line-number = "relative"; + mouse = true; + cursorline = true; + auto-completion = true; + completion-replace = true; + auto-info = true; + auto-pairs = true; + true-color = true; + color-modes = true; + bufferline = "multiple"; + indent-guides = { + render = true; + character = "»"; + }; + cursor-shape = { + insert = "bar"; + normal = "block"; + select = "underline"; + }; + soft-wrap = { + enable = true; + max-wrap = 25; + wrap-indicator = "┆ "; + }; + statusline = { + left = ["mode" "spinner" "file-name" "read-only-indicator"]; + center = []; + right = ["file-type" "separator" "spacer" "position-percentage" "position" "separator" "total-line-numbers"]; + separator = "|"; + mode.normal = "NORMAL"; + mode.insert = "INSERT"; + mode.select = "SELECT"; + }; + file-picker = { + hidden = false; + }; + }; + }; + }; +} diff --git a/home/programs/cli/helix/health.nix b/home/programs/cli/helix/health.nix new file mode 100644 index 0000000..309c0b5 --- /dev/null +++ b/home/programs/cli/helix/health.nix @@ -0,0 +1,15 @@ +{ pkgs, ... }: +{ + home.packages = with pkgs; [ + nil + marksman + markdown-oxide + yaml-language-server + vscode-langservers-extracted + # bash-language-server + rust-analyzer + python312Packages.python-lsp-server + lua-language-server + taplo + ]; +} diff --git a/home/programs/cli/helix/theme.nix b/home/programs/cli/helix/theme.nix new file mode 100644 index 0000000..eb27586 --- /dev/null +++ b/home/programs/cli/helix/theme.nix @@ -0,0 +1,96 @@ +{ config, lib, ... }: +{ + programs.helix.themes = with config.lib.stylix.colors; lib.mkForce { + themo = let + BASE00 = "#${base00}"; + BASE01 = "#${base01}"; + BASE02 = "#${base02}"; + BASE03 = "#${base03}"; + BASE04 = "#${base04}"; + BASE05 = "#${base05}"; + BASE06 = "#${base06}"; + BASE07 = "#${base07}"; + BASE08 = "#${base08}"; + BASE09 = "#${base09}"; + BASE0A = "#${base0A}"; + BASE0B = "#${base0B}"; + BASE0C = "#${base0C}"; + BASE0D = "#${base0D}"; + BASE0E = "#${base0E}"; + BASE0F = "#${base0F}"; + in { + "attributes" = BASE09; + "comment" = { fg = BASE03; modifiers = [ "italic" ]; }; + "constant" = BASE09; + "constant.character.escape" = BASE0C; + "constant.numeric" = BASE09; + "constructor" = BASE0D; + "debug" = BASE03; + "diagnostic" = { modifiers = [ "underlined" ]; }; + "diff.delta" = BASE09; + "diff.minus" = BASE08; + "diff.plus" = BASE0B; + "error" = BASE08; + "function" = BASE0D; + "hint" = BASE03; + "info" = BASE0D; + "keyword" = BASE0E; + "label" = BASE0E; + "namespace" = BASE0E; + "operator" = BASE05; + "special" = BASE0D; + "string" = BASE0B; + "type" = BASE0A; + "variable" = BASE08; + "variable.other.member" = BASE0B; + "warning" = BASE09; + + "markup.bold" = { fg = BASE0A; modifiers = [ "bold" ]; }; + "markup.heading" = BASE0D; + "markup.italic" = { fg = BASE0E; modifiers = [ "italic" ]; }; + "markup.link.text" = BASE08; + "markup.link.url" = { fg = BASE09; modifiers = [ "underlined" "italic" ]; }; + "markup.list" = BASE08; + "markup.quote" = BASE0C; + "markup.raw" = BASE0B; + "markup.strikethrough" = { modifiers = [ "crossed_out" ]; }; + + "diagnostic.hint" = { underline = { style = "curl"; }; }; + "diagnostic.info" = { underline = { style = "curl"; }; }; + "diagnostic.warning" = { underline = { style = "curl"; }; }; + "diagnostic.error" = { underline = { style = "curl"; }; }; + + "ui.background" = { bg = BASE00; }; + "ui.bufferline.active" = { fg = BASE00; bg = BASE03; modifiers = [ "bold" ]; }; + "ui.bufferline" = { fg = BASE04; bg = BASE00; }; + "ui.cursor" = { fg = BASE0A; modifiers = [ "reversed" ]; }; + "ui.cursor.insert" = { fg = BASE0A; modifiers = [ "reversed" ]; }; + "ui.cursorline.primary" = { fg = BASE05; bg = BASE01; }; + "ui.cursor.match" = { fg = BASE0A; modifiers = [ "reversed" ]; }; + "ui.cursor.select" = { fg = BASE0A; modifiers = [ "reversed" ]; }; + "ui.gutter" = { bg = BASE00; }; + "ui.help" = { fg = BASE06; bg = BASE01; }; + "ui.linenr" = { fg = BASE03; bg = BASE00; }; + "ui.linenr.selected" = { fg = BASE04; bg = BASE01; modifiers = [ "bold" ]; }; + "ui.menu" = { fg = BASE05; bg = BASE01; }; + "ui.menu.scroll" = { fg = BASE03; bg = BASE01; }; + "ui.menu.selected" = { fg = BASE01; bg = BASE04; }; + "ui.popup" = { bg = BASE01; }; + "ui.selection" = { bg = BASE02; }; + "ui.selection.primary" = { bg = BASE02; }; + "ui.statusline" = { fg = BASE04; bg = BASE01; }; + "ui.statusline.inactive" = { bg = BASE01; fg = BASE03; modifiers = [ "bold" ]; }; + "ui.statusline.insert" = { fg = BASE00; bg = BASE0B; modifiers = [ "bold" ]; }; + "ui.statusline.normal" = { fg = BASE00; bg = BASE0D; modifiers = [ "bold" ]; }; + "ui.statusline.select" = { fg = BASE00; bg = BASE0F; modifiers = [ "bold" ]; }; + "ui.text" = BASE05; + "ui.text.focus" = BASE05; + "ui.virtual.indent-guide" = { fg = BASE03; }; + "ui.virtual.wrap" = { fg = BASE03; }; + "ui.virtual.inlay-hint" = { fg = BASE03; }; + "ui.virtual.ruler" = { bg = BASE01; }; + "ui.virtual.jump-label" = { fg = BASE0A; modifiers = [ "bold" ]; }; + "ui.window" = { bg = BASE01; }; + }; + }; +} diff --git a/home/programs/cli/joa/binds.nix b/home/programs/cli/joa/binds.nix new file mode 100644 index 0000000..9517510 --- /dev/null +++ b/home/programs/cli/joa/binds.nix @@ -0,0 +1,150 @@ +{ ... }: +{ + programs.joshuto.keymap = { + default_view = { + keymap = [ + { keys = ["escape"]; commands = ["escape"] }; + { keys = ["t"; "a"]; commands = ["new_tab"] }; + { keys = ["t"; "c"]; commands = ["new_tab --cursor"] }; + { keys = ["t"; "A"]; commands = ["new_tab --current"] }; + { keys = ["t"; "q"]; commands = ["close_tab"] }; + { keys = ["q"]; commands = ["close_tab"] }; + { keys = ["ctrl+c"]; commands = ["quit"] }; + { keys = ["Q"]; commands = ["quit --output-current-directory"] }; + + { keys = ["R"]; commands = ["reload_dirlist"] }; + { keys = ["z"; "r"]; commands = ["reload_dirlist"] }; + { keys = ["z"; "z"]; commands = ["zi"] }; + { keys = ["z"; "h"]; commands = ["toggle_hidden"] }; + { keys = ["z"; "f"]; commands = ["flat 2"] }; + { keys = ["z"; "F"]; commands = ["flat 0"] }; + { keys = ["backspace"]; commands = ["toggle_hidden"] }; + { keys = ["t"; "s"]; commands = ["tab_switch 1"] }; + { keys = ["t"; "S"]; commands = ["tab_switch -1"] }; + { keys = ["\t"]; commands = ["tab_switch 1"] }; + { keys = ["backtab"]; commands = ["tab_switch -1"] }; + + { keys = ["alt+1"]; commands = ["tab_switch_index 1"] }; + { keys = ["alt+2"]; commands = ["tab_switch_index 2"] }; + { keys = ["alt+3"]; commands = ["tab_switch_index 3"] }; + { keys = ["alt+4"]; commands = ["tab_switch_index 4"] }; + { keys = ["alt+5"]; commands = ["tab_switch_index 5"] }; + + { keys = ["1"]; commands = ["numbered_command 1"] }; + { keys = ["2"]; commands = ["numbered_command 2"] }; + { keys = ["3"]; commands = ["numbered_command 3"] }; + { keys = ["4"]; commands = ["numbered_command 4"] }; + { keys = ["5"]; commands = ["numbered_command 5"] }; + { keys = ["6"]; commands = ["numbered_command 6"] }; + { keys = ["7"]; commands = ["numbered_command 7"] }; + { keys = ["8"]; commands = ["numbered_command 8"] }; + { keys = ["9"]; commands = ["numbered_command 9"] }; + + # arrow keys + { keys = ["arrow_up"]; commands = ["cursor_move_up"] }; + { keys = ["arrow_down"]; commands = ["cursor_move_down"] }; + { keys = ["arrow_left"]; commands = ["cd .."] }; + { keys = ["arrow_right"]; commands = ["open"] }; + { keys = ["\n"]; commands = ["open"] }; + { keys = ["home"]; commands = ["cursor_move_home"] }; + { keys = ["end"]; commands = ["cursor_move_end"] }; + { keys = ["page_up"]; commands = ["cursor_move_page_up"] }; + { keys = ["page_down"]; commands = ["cursor_move_page_down"] }; + { keys = ["ctrl+u"]; commands = ["cursor_move_page_up 0.5"] }; + { keys = ["ctrl+d"]; commands = ["cursor_move_page_down 0.5"] }; + { keys = ["ctrl+b"]; commands = ["cursor_move_page_up"] }; + { keys = ["ctrl+f"]; commands = ["cursor_move_page_down"] }; + + # vim-like keybindings + { keys = ["j"]; commands = ["cursor_move_down"] }; + { keys = ["k"]; commands = ["cursor_move_up"] }; + { keys = ["h"]; commands = ["z"] }; + { keys = ["l"]; commands = ["open"] }; + { keys = ["g"; "g"]; commands = ["cursor_move_home"] }; + { keys = ["G"]; commands = ["cursor_move_end"] }; + { keys = ["e"]; commands = ["open_with"] }; + + { keys = ["H"]; commands = ["cursor_move_page_home"] }; + { keys = ["L"]; commands = ["cursor_move_page_middle"] }; + { keys = ["M"]; commands = ["cursor_move_page_end"] }; + + { keys = ["["]; commands = ["parent_cursor_move_up"] }; + { keys = ["]"]; commands = ["parent_cursor_move_down"] }; + + { keys = ["c"; "d"]; commands = [":cd "] }; + { keys = ["x"; "x"]; commands = ["cut_files"] }; + { keys = ["c"; "c"]; commands = ["copy_files"] }; + { keys = ["c"; "n"]; commands = ["copy_filename"] }; + { keys = ["c"; "e"]; commands = ["copy_filename_without_extension"] }; + { keys = ["c"; "f"]; commands = ["copy_filepath"] }; + { keys = ["c"; "F"]; commands = ["copy_filepath --all-selected=true"] }; + { keys = ["c"; "p"]; commands = ["copy_dirpath"] }; + + { keys = ["p"; "l"]; commands = ["symlink_files --relative=false"] }; + { keys = ["p"; "L"]; commands = ["symlink_files --relative=true"] }; + + { keys = ["delete"]; commands = ["delete_files"] }; + { keys = ["d"; "d"]; commands = ["delete_files --noconfirm"] }; + { keys = ["d"; "D"]; commands = ["delete_files --noconfirm --permanently"] }; + + { keys = ["v"; "v"]; commands = ["paste_files"] }; + { keys = ["v"; "V"]; commands = ["paste_files --overwrite=true"] }; + + { keys = ["r"; "r"]; commands = ["rename_append"] }; + { keys = ["r"; "R"]; commands = ["rename_prepend"] }; + { keys = ["r"; "c"]; commands = [":rename "] }; + + { keys = ["m"; "f"]; commands = [":touch "] }; + { keys = ["m"; "d"]; commands = [":mkdir "] }; + + { keys = [" "]; commands = ["select --toggle=true"] }; + { keys = ["v"; "a"]; commands = ["select --all=true --toggle=true"] }; + { keys = ["v"; "i"]; commands = ["toggle_visual"] }; + + { keys = ["w"]; commands = ["show_tasks --exit-key=w"] }; + { keys = ["r"; "b"]; commands = ["bulk_rename"] }; + { keys = ["="]; commands = ["set_mode"] }; + + { keys = [":"]; commands = [":"] }; + { keys = [";"]; commands = [":"] }; + + { keys = ["'"]; commands = [":shell "] }; + + { keys = ["/"]; commands = [":search "] }; + { keys = ["|"]; commands = [":search_inc "] }; + { keys = ["\\"]; commands = [":search_glob "] }; + { keys = ["f"; "s"]; commands = ["search_fzf"] }; + { keys = ["f"; "d"]; commands = ["subdir_fzf"] }; + + { keys = ["n"]; commands = ["search_next"] }; + { keys = ["N"]; commands = ["search_prev"] }; + + { keys = ["s"; "r"]; commands = ["sort reverse"] }; + { keys = ["s"; "l"]; commands = ["sort lexical"] }; + { keys = ["s"; "L"]; commands = ["sort lexical --reverse=true"] }; + { keys = ["s"; "m"]; commands = ["sort mtime"] }; + { keys = ["s"; "M"]; commands = ["sort mtime --reverse=true"] }; + { keys = ["s"; "n"]; commands = ["sort natural"] }; + { keys = ["s"; "N"]; commands = ["sort natural --reverse=true"] }; + { keys = ["s"; "s"]; commands = ["sort size"] }; + { keys = ["s"; "S"]; commands = ["sort size --reverse=true"] }; + { keys = ["s"; "e"]; commands = ["sort ext"] }; + { keys = ["s"; "E"]; commands = ["sort ext --reverse=true"] }; + + { keys = ["m"; "s"]; commands = ["linemode size"] }; + { keys = ["m"; "m"]; commands = ["linemode mtime"] }; + { keys = ["m"; "M"]; commands = ["linemode size | mtime"] }; + { keys = ["m"; "u"]; commands = ["linemode user"] }; + { keys = ["m"; "U"]; commands = ["linemode user | group"] }; + { keys = ["m"; "p"]; commands = ["linemode perm"] }; + + { keys = ["g"; "r"]; commands = ["cd /"] }; + { keys = ["g"; "c"]; commands = ["cd ~/.config"] }; + { keys = ["g"; "w"]; commands = ["cd ~/.walls"] }; + { keys = ["g"; "d"]; commands = ["cd ~/Загрузки"] }; + { keys = ["g"; "h"]; commands = ["cd ~/"] }; + { keys = ["?"]; commands = ["help"] }; + ]; + }; + }; +} diff --git a/home/programs/cli/joa/default.nix b/home/programs/cli/joa/default.nix new file mode 100644 index 0000000..86d50bd --- /dev/null +++ b/home/programs/cli/joa/default.nix @@ -0,0 +1,43 @@ +{ pkgs, ... }: +{ + imports = [ ./mime.nix ./theme.nix ./binds.nix ]; + programs.joshuto = { + enable = true; + settings = { + numbered_command = false; + mouse_support = true; + focus_on_create = true; + use_trash = true; + watch_files = true; + xdg_open = true; + xdg_open_fork = true; + # case_insensitive_ext = false; + zoxide_update = true; + display = { + mode = "default"; + automatically_count_files = true; + collapse_preview = true; + column_ratio = [1 4 4]; + scroll_offset = 6; + show_borders = false; + show_hidden = false; + show_icons = true; + # line_number_style = "relative"; + tilde_in_titlebar = false; + linemode = "size"; + sort = { + sort_method = "natural"; + case_sensitive = false; + directories_first = true; + reverse = false; + }; + }; + preview = { + max_preview_size = 100000000; + use_xdg_thumbs = true; + xdg_thumb_size = "xlarge"; + }; + tab.home_page = "inherit"; + }; + }; +} diff --git a/home/programs/cli/joa/mime.nix b/home/programs/cli/joa/mime.nix new file mode 100644 index 0000000..63c673c --- /dev/null +++ b/home/programs/cli/joa/mime.nix @@ -0,0 +1,265 @@ +{ ... }: +{ + programs.joshuto.mimetype = { + class = { + audio_default = [ + { command = "mpv"; args = [ "--" ]; } + { command = "mediainfo"; confirm_exit = true; } + ]; + image_default = [ + { command = "swayimg"; args = [ "-f" ]; fork = true; silent = true; } + ]; + video_default = [ + { command = "mpv"; args = [ "--" ]; fork = true; silent = true; } + { command = "mediainfo"; confirm_exit = true; } + ]; + text_default = [ + { command = "hx"; } + { command = "bat"; args = [ "--paging=always" ]; } + ]; + + blender_default = [ + { command = "blender"; fork = true; silent = true; } + ]; + + reader_default = [ + { command = "libreoffice"; fork = true; silent = true; } + ]; + + libreoffice_default = [ + { command = "libreoffice"; fork = true; silent = true; } + ]; + }; + + extension = { + ## image formats + avif."inherit" = "image_default"; + bmp."inherit" = "image_default"; + gif."inherit" = "image_default"; + heic."inherit" = "image_default"; + jpeg."inherit" = "image_default"; + jpe."inherit" = "image_default"; + jpg."inherit" = "image_default"; + jxl."inherit" = "image_default"; + pgm."inherit" = "image_default"; + png."inherit" = "image_default"; + ppm."inherit" = "image_default"; + webp."inherit" = "image_default"; + + eps.app_list = [ + { command = "inkview"; fork = true; silent = true; } + { command = "inkscape"; fork = true; silent = true; } + ]; + svg.app_list = [ + { command = "inkview"; fork = true; silent = true; } + { command = "inkscape"; fork = true; silent = true; } + ]; + tiff.app_list = [ + { command = "qimgv"; fork = true; silent = true; } + { command = "krita"; fork = true; silent = true; } + ]; + + ## audio formats + aac."inherit" = "audio_default"; + ac3."inherit" = "audio_default"; + aiff."inherit" = "audio_default"; + ape."inherit" = "audio_default"; + dts."inherit" = "audio_default"; + flac."inherit" = "audio_default"; + m4a."inherit" = "audio_default"; + mp3."inherit" = "audio_default"; + oga."inherit" = "audio_default"; + ogg."inherit" = "audio_default"; + opus."inherit" = "audio_default"; + wav."inherit" = "audio_default"; + wv."inherit" = "audio_default"; + + ## video formats + avi."inherit" = "video_default"; + av1."inherit" = "video_default"; + flv."inherit" = "video_default"; + mkv."inherit" = "video_default"; + m4v."inherit" = "video_default"; + mov."inherit" = "video_default"; + mp4."inherit" = "video_default"; + ts."inherit" = "video_default"; + webm."inherit" = "video_default"; + wmv."inherit" = "video_default"; + + ## text formats + bib."inherit" = "text_default"; + build."inherit" = "text_default"; + c."inherit" = "text_default"; + cfg."inherit" = "text_default"; + cmake."inherit" = "text_default"; + conf."inherit" = "text_default"; + cpp."inherit" = "text_default"; + css."inherit" = "text_default"; + csv."inherit" = "text_default"; + cu."inherit" = "text_default"; + desktop."inherit" = "text_default"; + ebuild."inherit" = "text_default"; + eex."inherit" = "text_default"; + env."inherit" = "text_default"; + ex."inherit" = "text_default"; + exs."inherit" = "text_default"; + go."inherit" = "text_default"; + gpl."inherit" = "text_default"; + h."inherit" = "text_default"; + hpp."inherit" = "text_default"; + hs."inherit" = "text_default"; + ini."inherit" = "text_default"; + ipynb."inherit" = "text_default"; + java."inherit" = "text_default"; + jl."inherit" = "text_default"; + js."inherit" = "text_default"; + json."inherit" = "text_default"; + jsonc."inherit" = "text_default"; + kdl."inherit" = "text_default"; + kt."inherit" = "text_default"; + kvconfig."inherit" = "text_default"; + lock."inherit" = "text_default"; + log."inherit" = "text_default"; + lua."inherit" = "text_default"; + md."inherit" = "text_default"; + micro."inherit" = "text_default"; + ninja."inherit" = "text_default"; + nix."inherit" = "text_default"; + norg."inherit" = "text_default"; + org."inherit" = "text_default"; + po."inherit" = "text_default"; + pot."inherit" = "text_default"; + py."inherit" = "text_default"; + qmd."inherit" = "text_default"; + rasi."inherit" = "text_default"; + rkt."inherit" = "text_default"; + rktd."inherit" = "text_default"; + rproj."inherit" = "text_default"; + rs."inherit" = "text_default"; + rstheme."inherit" = "text_default"; + scm."inherit" = "text_default"; + scss."inherit" = "text_default"; + service."inherit" = "text_default"; + sh."inherit" = "text_default"; + socket."inherit" = "text_default"; + sql."inherit" = "text_default"; + srt."inherit" = "text_default"; + svelte."inherit" = "text_default"; + toml."inherit" = "text_default"; + tsx."inherit" = "text_default"; + txt."inherit" = "text_default"; + vim."inherit" = "text_default"; + xml."inherit" = "text_default"; + yaml."inherit" = "text_default"; + yml."inherit" = "text_default"; + + ## web formats + html.app_list = [ + { command = "qutebrowser"; fork = true; silent = true; } + { command = "hx"; } + { command = "bat"; args = [ "--paging=always" ]; } + ]; + + ## archive formats + "7z".app_list = [ + { command = "7z"; args = [ "x" ]; confirm_exit = true; } + { command = "file-roller"; fork = true; silent = true; } + ]; + bz2.app_list = [ + { command = "tar"; args = [ "-xvjf" ]; confirm_exit = true; } + { command = "file-roller"; fork = true; silent = true; } + ]; + gz.app_list = [ + { command = "tar"; args = [ "-xvzf" ]; confirm_exit = true; } + { command = "file-roller"; fork = true; silent = true; } + ]; + tar.app_list = [ + { command = "tar"; args = [ "-xvf" ]; confirm_exit = true; } + { command = "file-roller"; fork = true; silent = true; } + ]; + tgz.app_list = [ + { command = "tar"; args = [ "-xvzf" ]; confirm_exit = true; } + { command = "file-roller"; fork = true; silent = true; } + ]; + rar.app_list = [ + { command = "unrar"; args = [ "x" ]; confirm_exit = true; } + { command = "file-roller"; fork = true; silent = true; } + ]; + xz.app_list = [ + { command = "tar"; args = [ "-xvJf" ]; confirm_exit = true; } + { command = "file-roller"; fork = true; silent = true; } + ]; + zip.app_list = [ + { command = "unzip"; confirm_exit = true; } + { command = "file-roller"; fork = true; silent = true; } + ]; + + ## misc formats + aup.app_list = [ + { command = "audacity"; fork = true; silent = true; } + ]; + + m3u.app_list = [ + { command = "hx"; } + { command = "mpv"; silent = true; } + { command = "bat"; confirm_exit = true; } + ]; + + ## document + odt."inherit" = "libreoffice_default"; + odf."inherit" = "libreoffice_default"; + ods."inherit" = "libreoffice_default"; + odp."inherit" = "libreoffice_default"; + + doc."inherit" = "libreoffice_default"; + docx."inherit" = "libreoffice_default"; + xls."inherit" = "libreoffice_default"; + xlsx."inherit" = "libreoffice_default"; + ppt."inherit" = "libreoffice_default"; + pptx."inherit" = "libreoffice_default"; + + epub."inherit" = "reader_default"; + pdf."inherit" = "reader_default"; + + ## 3d files + blend."inherit" = "blender_default"; + fbx."inherit" = "blender_default"; + glb."inherit" = "blender_default"; + gltf."inherit" = "blender_default"; + obj."inherit" = "blender_default"; + stl."inherit" = "blender_default"; + + kra.app_list = [ + { command = "krita"; fork = true; silent = true; } + ]; + + kdenlive.app_list = [ + { command = "kdenlive"; fork = true; silent = true; } + ]; + + tex.app_list = [ + { command = "hx"; } + { command = "bat"; confirm_exit = true; } + { command = "pdflatex"; silent = true; } + ]; + + torrent.app_list = [ + { command = "transmission-gtk"; fork = true; silent = true; } + ]; + }; + + ## application/octet-stream + application.subtype.octet-stream = { + "inherit" = "video_default"; + }; + ## text/* + text = { + "inherit" = "text_default"; + }; + video = { + "inherit" = "video_default"; + }; + }; +} + + diff --git a/home/programs/cli/joa/theme.nix b/home/programs/cli/joa/theme.nix new file mode 100644 index 0000000..8facd81 --- /dev/null +++ b/home/programs/cli/joa/theme.nix @@ -0,0 +1,76 @@ +{ ... }: +{ + programs.joshuto.theme = { + tabs.styles = { + active = { + bg = "none"; + fg = "blue"; + bold = true; + }; + inactive = { + bg = "none"; + fg = "gray"; + bold = true; + }; + scroll_front = { + fg = "yellow"; + bold = true; + }; + scroll_back = { + fg = "yellow"; + bold = true; + }; + }; + selection = { + fg = "yellow"; + bold = true; + prefix = " "; + }; + visual_mode_selection = { + fg = "light_red"; + bold = true; + prefix = "v "; + }; + regular = { + fg = "white"; + }; + directory = { + fg = "light_blue"; + bold = true; + }; + link = { + fg = "cyan"; + bold = true; + }; + socket = { + fg = "light_magenta"; + bold = true; + }; + executable = { + fg = "light_green"; + bold = true; + }; + link_invalid = { + fg = "red"; + bold = true; + }; + tabs.chars = { + active_prefix = "["; + active_postfix = "]"; + inactive_prefix = " "; + inactive_postfix = ""; + divider = " | "; + scroll_front_prefix = ""; + scroll_front_postfix = ""; + scroll_front_prestring = "« "; + scroll_front_poststring = " "; + scroll_back_prefix = ""; + scroll_back_postfix = ""; + scroll_back_prestring = " "; + scroll_back_poststring = " »"; + padding_prefix = " "; + padding_postfix = " "; + padding_fill = " "; + }; + }; +} diff --git a/home/programs/cli/joshuto/binds.nix b/home/programs/cli/joshuto/binds.nix new file mode 100644 index 0000000..9517510 --- /dev/null +++ b/home/programs/cli/joshuto/binds.nix @@ -0,0 +1,150 @@ +{ ... }: +{ + programs.joshuto.keymap = { + default_view = { + keymap = [ + { keys = ["escape"]; commands = ["escape"] }; + { keys = ["t"; "a"]; commands = ["new_tab"] }; + { keys = ["t"; "c"]; commands = ["new_tab --cursor"] }; + { keys = ["t"; "A"]; commands = ["new_tab --current"] }; + { keys = ["t"; "q"]; commands = ["close_tab"] }; + { keys = ["q"]; commands = ["close_tab"] }; + { keys = ["ctrl+c"]; commands = ["quit"] }; + { keys = ["Q"]; commands = ["quit --output-current-directory"] }; + + { keys = ["R"]; commands = ["reload_dirlist"] }; + { keys = ["z"; "r"]; commands = ["reload_dirlist"] }; + { keys = ["z"; "z"]; commands = ["zi"] }; + { keys = ["z"; "h"]; commands = ["toggle_hidden"] }; + { keys = ["z"; "f"]; commands = ["flat 2"] }; + { keys = ["z"; "F"]; commands = ["flat 0"] }; + { keys = ["backspace"]; commands = ["toggle_hidden"] }; + { keys = ["t"; "s"]; commands = ["tab_switch 1"] }; + { keys = ["t"; "S"]; commands = ["tab_switch -1"] }; + { keys = ["\t"]; commands = ["tab_switch 1"] }; + { keys = ["backtab"]; commands = ["tab_switch -1"] }; + + { keys = ["alt+1"]; commands = ["tab_switch_index 1"] }; + { keys = ["alt+2"]; commands = ["tab_switch_index 2"] }; + { keys = ["alt+3"]; commands = ["tab_switch_index 3"] }; + { keys = ["alt+4"]; commands = ["tab_switch_index 4"] }; + { keys = ["alt+5"]; commands = ["tab_switch_index 5"] }; + + { keys = ["1"]; commands = ["numbered_command 1"] }; + { keys = ["2"]; commands = ["numbered_command 2"] }; + { keys = ["3"]; commands = ["numbered_command 3"] }; + { keys = ["4"]; commands = ["numbered_command 4"] }; + { keys = ["5"]; commands = ["numbered_command 5"] }; + { keys = ["6"]; commands = ["numbered_command 6"] }; + { keys = ["7"]; commands = ["numbered_command 7"] }; + { keys = ["8"]; commands = ["numbered_command 8"] }; + { keys = ["9"]; commands = ["numbered_command 9"] }; + + # arrow keys + { keys = ["arrow_up"]; commands = ["cursor_move_up"] }; + { keys = ["arrow_down"]; commands = ["cursor_move_down"] }; + { keys = ["arrow_left"]; commands = ["cd .."] }; + { keys = ["arrow_right"]; commands = ["open"] }; + { keys = ["\n"]; commands = ["open"] }; + { keys = ["home"]; commands = ["cursor_move_home"] }; + { keys = ["end"]; commands = ["cursor_move_end"] }; + { keys = ["page_up"]; commands = ["cursor_move_page_up"] }; + { keys = ["page_down"]; commands = ["cursor_move_page_down"] }; + { keys = ["ctrl+u"]; commands = ["cursor_move_page_up 0.5"] }; + { keys = ["ctrl+d"]; commands = ["cursor_move_page_down 0.5"] }; + { keys = ["ctrl+b"]; commands = ["cursor_move_page_up"] }; + { keys = ["ctrl+f"]; commands = ["cursor_move_page_down"] }; + + # vim-like keybindings + { keys = ["j"]; commands = ["cursor_move_down"] }; + { keys = ["k"]; commands = ["cursor_move_up"] }; + { keys = ["h"]; commands = ["z"] }; + { keys = ["l"]; commands = ["open"] }; + { keys = ["g"; "g"]; commands = ["cursor_move_home"] }; + { keys = ["G"]; commands = ["cursor_move_end"] }; + { keys = ["e"]; commands = ["open_with"] }; + + { keys = ["H"]; commands = ["cursor_move_page_home"] }; + { keys = ["L"]; commands = ["cursor_move_page_middle"] }; + { keys = ["M"]; commands = ["cursor_move_page_end"] }; + + { keys = ["["]; commands = ["parent_cursor_move_up"] }; + { keys = ["]"]; commands = ["parent_cursor_move_down"] }; + + { keys = ["c"; "d"]; commands = [":cd "] }; + { keys = ["x"; "x"]; commands = ["cut_files"] }; + { keys = ["c"; "c"]; commands = ["copy_files"] }; + { keys = ["c"; "n"]; commands = ["copy_filename"] }; + { keys = ["c"; "e"]; commands = ["copy_filename_without_extension"] }; + { keys = ["c"; "f"]; commands = ["copy_filepath"] }; + { keys = ["c"; "F"]; commands = ["copy_filepath --all-selected=true"] }; + { keys = ["c"; "p"]; commands = ["copy_dirpath"] }; + + { keys = ["p"; "l"]; commands = ["symlink_files --relative=false"] }; + { keys = ["p"; "L"]; commands = ["symlink_files --relative=true"] }; + + { keys = ["delete"]; commands = ["delete_files"] }; + { keys = ["d"; "d"]; commands = ["delete_files --noconfirm"] }; + { keys = ["d"; "D"]; commands = ["delete_files --noconfirm --permanently"] }; + + { keys = ["v"; "v"]; commands = ["paste_files"] }; + { keys = ["v"; "V"]; commands = ["paste_files --overwrite=true"] }; + + { keys = ["r"; "r"]; commands = ["rename_append"] }; + { keys = ["r"; "R"]; commands = ["rename_prepend"] }; + { keys = ["r"; "c"]; commands = [":rename "] }; + + { keys = ["m"; "f"]; commands = [":touch "] }; + { keys = ["m"; "d"]; commands = [":mkdir "] }; + + { keys = [" "]; commands = ["select --toggle=true"] }; + { keys = ["v"; "a"]; commands = ["select --all=true --toggle=true"] }; + { keys = ["v"; "i"]; commands = ["toggle_visual"] }; + + { keys = ["w"]; commands = ["show_tasks --exit-key=w"] }; + { keys = ["r"; "b"]; commands = ["bulk_rename"] }; + { keys = ["="]; commands = ["set_mode"] }; + + { keys = [":"]; commands = [":"] }; + { keys = [";"]; commands = [":"] }; + + { keys = ["'"]; commands = [":shell "] }; + + { keys = ["/"]; commands = [":search "] }; + { keys = ["|"]; commands = [":search_inc "] }; + { keys = ["\\"]; commands = [":search_glob "] }; + { keys = ["f"; "s"]; commands = ["search_fzf"] }; + { keys = ["f"; "d"]; commands = ["subdir_fzf"] }; + + { keys = ["n"]; commands = ["search_next"] }; + { keys = ["N"]; commands = ["search_prev"] }; + + { keys = ["s"; "r"]; commands = ["sort reverse"] }; + { keys = ["s"; "l"]; commands = ["sort lexical"] }; + { keys = ["s"; "L"]; commands = ["sort lexical --reverse=true"] }; + { keys = ["s"; "m"]; commands = ["sort mtime"] }; + { keys = ["s"; "M"]; commands = ["sort mtime --reverse=true"] }; + { keys = ["s"; "n"]; commands = ["sort natural"] }; + { keys = ["s"; "N"]; commands = ["sort natural --reverse=true"] }; + { keys = ["s"; "s"]; commands = ["sort size"] }; + { keys = ["s"; "S"]; commands = ["sort size --reverse=true"] }; + { keys = ["s"; "e"]; commands = ["sort ext"] }; + { keys = ["s"; "E"]; commands = ["sort ext --reverse=true"] }; + + { keys = ["m"; "s"]; commands = ["linemode size"] }; + { keys = ["m"; "m"]; commands = ["linemode mtime"] }; + { keys = ["m"; "M"]; commands = ["linemode size | mtime"] }; + { keys = ["m"; "u"]; commands = ["linemode user"] }; + { keys = ["m"; "U"]; commands = ["linemode user | group"] }; + { keys = ["m"; "p"]; commands = ["linemode perm"] }; + + { keys = ["g"; "r"]; commands = ["cd /"] }; + { keys = ["g"; "c"]; commands = ["cd ~/.config"] }; + { keys = ["g"; "w"]; commands = ["cd ~/.walls"] }; + { keys = ["g"; "d"]; commands = ["cd ~/Загрузки"] }; + { keys = ["g"; "h"]; commands = ["cd ~/"] }; + { keys = ["?"]; commands = ["help"] }; + ]; + }; + }; +} diff --git a/home/programs/cli/joshuto/default.nix b/home/programs/cli/joshuto/default.nix new file mode 100644 index 0000000..9bdf5e0 --- /dev/null +++ b/home/programs/cli/joshuto/default.nix @@ -0,0 +1,48 @@ +{ pkgs, ... }: +{ + imports = [ + ./theme.nix + ./mime.nix + ./previewer.nix + ]; + programs.joshuto = { + enable = true; + settings = { + numbered_command = false; + mouse_support = true; + focus_on_create = true; + use_trash = true; + watch_files = true; + xdg_open = true; + xdg_open_fork = true; + # case_insensitive_ext = false; + zoxide_update = true; + display = { + mode = "default"; + automatically_count_files = false; + collapse_preview = true; + column_ratio = [1 4 4]; + scroll_offset = 6; + show_borders = false; + show_hidden = false; + show_icons = true; + # line_number_style = "relative"; + tilde_in_titlebar = false; + linemode = "size"; + sort = { + sort_method = "natural"; + case_sensitive = false; + directories_first = true; + reverse = false; + }; + }; + preview = { + max_preview_size = 100000000; + use_xdg_thumbs = true; + xdg_thumb_size = "xlarge"; + preview_script = "~/.config/joshuto/preview_file.sh"; + }; + tab.home_page = "inherit"; + }; + }; +} diff --git a/home/programs/cli/joshuto/mime.nix b/home/programs/cli/joshuto/mime.nix new file mode 100644 index 0000000..ca814c1 --- /dev/null +++ b/home/programs/cli/joshuto/mime.nix @@ -0,0 +1,172 @@ +{ ... }: +{ + programs.joshuto.mimetype = { + class = { + audio_default = [ + { command = "mpv"; args = [ "--" ]; } + ]; + image_default = [ + { command = "swayimg"; args = [ "-f --" ]; } + ]; + text_default = [ + { command = "hx"; } + { command = "bat"; args = [ "--paging=always" ]; } + ]; + libreoffice_default = [ + { command = "libreoffice"; fork = true; silent = true; } + ]; + }; + + text = { "inherit" = "text_default"; }; + + extensions = { + # OFFICE + odt."inherit" = "libreoffice_default"; + odf."inherit" = "libreoffice_default"; + ods."inherit" = "libreoffice_default"; + odp."inherit" = "libreoffice_default"; + doc."inherit" = "libreoffice_default"; + docx."inherit" = "libreoffice_default"; + xls."inherit" = "libreoffice_default"; + xlsx."inherit" = "libreoffice_default"; + ppt."inherit" = "libreoffice_default"; + pptx."inherit" = "libreoffice_default"; + pdf."inherit" = "libreoffice_default"; + + "vnd.efi.iso.inherit" = [ # ISO + { command = "popsicle-gtk"; fork = true; silent = true; } + ]; + x-bittorrent."inherit" = [ # TORRENT + { command = "transmission-gtk"; fork = true; silent = true; } + ]; + + # ARCHIVES + "7z".app_list = [ + { command = "7z"; args = [ "x" ]; } + { command = "file-roller"; fork = true; silent = true; } + ]; + bz2.app_list = [ + { command = "tar"; args = [ "-xvjf" ]; } + { command = "file-roller"; fork = true; silent = true; } + ]; + gz.app_list = [ + { command = "tar"; args = [ "-xvzf" ]; } + { command = "file-roller"; fork = true; silent = true; } + ]; + tar.app_list = [ + { command = "tar"; args = [ "-xvf" ]; } + { command = "file-roller"; fork = true; silent = true; } + ]; + tgz.app_list = [ + { command = "tar"; args = [ "-xvzf" ]; } + { command = "file-roller"; fork = true; silent = true; } + ]; + rar.app_list = [ + { command = "unrar"; args = [ "x" ]; } + { command = "file-roller"; fork = true; silent = true; } + ]; + xz.app_list = [ + { command = "tar"; args = [ "-xvJf" ]; } + { command = "file-roller"; fork = true; silent = true; } + ]; + zip.app_list = [ + { command = "unzip"; } + { command = "file-roller"; fork = true; silent = true; } + ]; + + ## audio formats + aac."inherit" = "audio_default"; + ac3."inherit" = "audio_default"; + aiff."inherit" = "audio_default"; + ape."inherit" = "audio_default"; + dts."inherit" = "audio_default"; + flac."inherit" = "audio_default"; + m4a."inherit" = "audio_default"; + mp3."inherit" = "audio_default"; + oga."inherit" = "audio_default"; + ogg."inherit" = "audio_default"; + opus."inherit" = "audio_default"; + wav."inherit" = "audio_default"; + wv."inherit" = "audio_default"; + + ## video formats + avi."inherit" = "video_default"; + av1."inherit" = "video_default"; + flv."inherit" = "video_default"; + mkv."inherit" = "video_default"; + m4v."inherit" = "video_default"; + mov."inherit" = "video_default"; + mp4."inherit" = "video_default"; + ts."inherit" = "video_default"; + webm."inherit" = "video_default"; + wmv."inherit" = "video_default"; + + ## text formats + bib."inherit" = "text_default"; + build."inherit" = "text_default"; + c."inherit" = "text_default"; + cfg."inherit" = "text_default"; + cmake."inherit" = "text_default"; + conf."inherit" = "text_default"; + cpp."inherit" = "text_default"; + css."inherit" = "text_default"; + csv."inherit" = "text_default"; + cu."inherit" = "text_default"; + desktop."inherit" = "text_default"; + ebuild."inherit" = "text_default"; + eex."inherit" = "text_default"; + env."inherit" = "text_default"; + ex."inherit" = "text_default"; + exs."inherit" = "text_default"; + go."inherit" = "text_default"; + gpl."inherit" = "text_default"; + h."inherit" = "text_default"; + hpp."inherit" = "text_default"; + hs."inherit" = "text_default"; + ini."inherit" = "text_default"; + ipynb."inherit" = "text_default"; + java."inherit" = "text_default"; + jl."inherit" = "text_default"; + js."inherit" = "text_default"; + json."inherit" = "text_default"; + jsonc."inherit" = "text_default"; + kdl."inherit" = "text_default"; + kt."inherit" = "text_default"; + kvconfig."inherit" = "text_default"; + lock."inherit" = "text_default"; + log."inherit" = "text_default"; + lua."inherit" = "text_default"; + md."inherit" = "text_default"; + micro."inherit" = "text_default"; + ninja."inherit" = "text_default"; + nix."inherit" = "text_default"; + norg."inherit" = "text_default"; + org."inherit" = "text_default"; + po."inherit" = "text_default"; + pot."inherit" = "text_default"; + py."inherit" = "text_default"; + qmd."inherit" = "text_default"; + rasi."inherit" = "text_default"; + rkt."inherit" = "text_default"; + rktd."inherit" = "text_default"; + rproj."inherit" = "text_default"; + rs."inherit" = "text_default"; + rstheme."inherit" = "text_default"; + scm."inherit" = "text_default"; + scss."inherit" = "text_default"; + service."inherit" = "text_default"; + sh."inherit" = "text_default"; + socket."inherit" = "text_default"; + sql."inherit" = "text_default"; + srt."inherit" = "text_default"; + svelte."inherit" = "text_default"; + toml."inherit" = "text_default"; + tsx."inherit" = "text_default"; + txt."inherit" = "text_default"; + vim."inherit" = "text_default"; + xml."inherit" = "text_default"; + yaml."inherit" = "text_default"; + yml."inherit" = "text_default"; + }; + }; +} diff --git a/home/programs/cli/joshuto/previewer.nix b/home/programs/cli/joshuto/previewer.nix new file mode 100644 index 0000000..6ab715d --- /dev/null +++ b/home/programs/cli/joshuto/previewer.nix @@ -0,0 +1,16 @@ +{ pkgs, ... }: +{ + xdg.configFile = { + "joshuto/previewer.sh" = { + executable = true; + source = let + previewFile = pkgs.fetchFromGitHub { + "owner" = "kamiyaa"; + "repo" = "joshuto"; + "rev" = "9728c35ef7058bc4919765f720d4f5b9bdb17da1"; + "hash" = "sha256-k5/p9C+zvYCa7dSl6wAKojUsUnAHo7ovVlqTyAwaTn0="; + }; + in "${previewFile}/config/preview_file.sh"; + }; + }; +} diff --git a/home/programs/cli/joshuto/theme.nix b/home/programs/cli/joshuto/theme.nix new file mode 100644 index 0000000..8facd81 --- /dev/null +++ b/home/programs/cli/joshuto/theme.nix @@ -0,0 +1,76 @@ +{ ... }: +{ + programs.joshuto.theme = { + tabs.styles = { + active = { + bg = "none"; + fg = "blue"; + bold = true; + }; + inactive = { + bg = "none"; + fg = "gray"; + bold = true; + }; + scroll_front = { + fg = "yellow"; + bold = true; + }; + scroll_back = { + fg = "yellow"; + bold = true; + }; + }; + selection = { + fg = "yellow"; + bold = true; + prefix = " "; + }; + visual_mode_selection = { + fg = "light_red"; + bold = true; + prefix = "v "; + }; + regular = { + fg = "white"; + }; + directory = { + fg = "light_blue"; + bold = true; + }; + link = { + fg = "cyan"; + bold = true; + }; + socket = { + fg = "light_magenta"; + bold = true; + }; + executable = { + fg = "light_green"; + bold = true; + }; + link_invalid = { + fg = "red"; + bold = true; + }; + tabs.chars = { + active_prefix = "["; + active_postfix = "]"; + inactive_prefix = " "; + inactive_postfix = ""; + divider = " | "; + scroll_front_prefix = ""; + scroll_front_postfix = ""; + scroll_front_prestring = "« "; + scroll_front_poststring = " "; + scroll_back_prefix = ""; + scroll_back_postfix = ""; + scroll_back_prestring = " "; + scroll_back_poststring = " »"; + padding_prefix = " "; + padding_postfix = " "; + padding_fill = " "; + }; + }; +} diff --git a/home/programs/cli/micro/default.nix b/home/programs/cli/micro/default.nix new file mode 100644 index 0000000..823f9bc --- /dev/null +++ b/home/programs/cli/micro/default.nix @@ -0,0 +1,66 @@ +{ pkgs, ...}: +{ + programs.micro = { + enable = true; + settings = { + clipboard = "terminal"; + colorscheme = "helios"; + autosu = true; + mkparents = true; + scrollbar = true; + softwrap = true; + status = false; + statusline = false; + statusformatl = "q"; + savehistory = true; + saveundo = true; + }; + }; + xdg.configFile."micro/colorschemes/helios.micro".text = '' + color-link comment "bold white" + color-link constant "cyan" + color-link constant.bool "bold cyan" + color-link constant.bool.true "bold green" + color-link constant.bool.false "bold red" + color-link constant.string "yellow" + color-link constant.string.url "underline blue, white" + #color-link constant.number "constant" + color-link constant.specialChar "bold magenta" + color-link identifier "bold red" + color-link identifier.macro "bold red" + color-link identifier.var "bold blue" + #color-link identifier.class "bold green" + color-link identifier.class "bold white" + color-link statement "bold yellow" + color-link symbol "red" + color-link symbol.brackets "blue" + color-link symbol.tag "bold blue" + color-link symbol.tag.extended "bold green" + color-link preproc "bold cyan" + color-link type "green" + color-link type.keyword "bold green" + color-link special "magenta" + color-link ignore "default" + color-link error "bold ,brightred" + color-link todo "underline black,brightyellow" + color-link hlsearch "white,darkgreen" + color-link indent-char ",brightgreen" + color-link line-number "white" + color-link line-number.scrollbar "green" + color-link statusline "white,blue" + color-link tabbar "white,blue" + color-link current-line-number "red" + color-link current-line-number.scroller "red" + color-link diff-added "green" + color-link diff-modified "yellow" + color-link diff-deleted "red" + color-link gutter-error ",red" + color-link gutter-warning "red" + color-link color-column "cyan" + color-link underlined.url "underline blue, white" + color-link divider "blue" + color-link match-brace "black,cyan" + color-link tab-error "brightred" + color-link trailingws "brightred" + ''; +} diff --git a/home/programs/cli/neovim/default.nix b/home/programs/cli/neovim/default.nix new file mode 100644 index 0000000..1264bed --- /dev/null +++ b/home/programs/cli/neovim/default.nix @@ -0,0 +1,43 @@ +{ nixvim, inputs, ... }: +{ + imports = [ inputs.nixvim.homeManagerModules.nixvim ./plugins ]; + programs.nixvim = { + enable = true; + defaultEditor = true; + vimdiffAlias = true; + globals = { + mapleader = " "; + maplocalleader = " "; + have_nerd_font = true; + }; + opts = { + number = true; + relativenumber = true; + mouse = "a"; + clipboard = { + providers.wl-copy.enable = true; + register = "unnamedplus"; + }; + breakindent = true; + smarttab = true; + tabstop = 4; + shiftwidth = 4; + softtabstop = 4; + autoindent = true; + undofile = true; + ignorecase = true; + smartcase = true; + signcolumn = "yes"; + updatetime = 250; + timeoutlen = 300; + splitright = true; + splitbelow = true; + list = true; + listchars.__raw = "{ tab = '» ', trail = '·', nbsp = '␣' }"; + inccommand = "split"; + cursorline = true; + scrolloff = 10; + hlsearch = true; + }; + }; +} diff --git a/home/programs/cli/neovim/plugins/autopairs.nix b/home/programs/cli/neovim/plugins/autopairs.nix new file mode 100755 index 0000000..d6194ee --- /dev/null +++ b/home/programs/cli/neovim/plugins/autopairs.nix @@ -0,0 +1,15 @@ +{ + # Inserts matching pairs of parens, brackets, etc. + # https://nix-community.github.io/nixvim/plugins/nvim-autopairs/index.html + programs.nixvim = { + plugins.nvim-autopairs = { + enable = true; + }; + + # If you want to automatically add `(` after selecting a function or method + # https://nix-community.github.io/nixvim/NeovimOptions/index.html?highlight=extraconfiglua#extraconfiglua + extraConfigLua = '' + require('cmp').event:on('confirm_done', require('nvim-autopairs.completion.cmp').on_confirm_done()) + ''; + }; +} diff --git a/home/programs/cli/neovim/plugins/conform.nix b/home/programs/cli/neovim/plugins/conform.nix new file mode 100755 index 0000000..9af52c6 --- /dev/null +++ b/home/programs/cli/neovim/plugins/conform.nix @@ -0,0 +1,57 @@ +{pkgs, ...}: { + programs.nixvim = { + # Dependencies + # + # https://nix-community.github.io/nixvim/NeovimOptions/index.html?highlight=extraplugins#extrapackages + extraPackages = with pkgs; [ + # Used to format Lua code + stylua + ]; + + # Autoformat + # https://nix-community.github.io/nixvim/plugins/conform-nvim.html + plugins.conform-nvim = { + enable = true; + settings= { + notify_on_error = false; + format_on_save = '' + function(bufnr) + -- Disable "format_on_save lsp_fallback" for lanuages that don't + -- have a well standardized coding style. You can add additional + -- lanuages here or re-enable it for the disabled ones. + local disable_filetypes = { c = true, cpp = true } + return { + timeout_ms = 500, + lsp_fallback = not disable_filetypes[vim.bo[bufnr].filetype] + } + end + ''; + formatters_by_ft = { + lua = ["stylua"]; + # Conform can also run multiple formatters sequentially + # python = [ "isort "black" ]; + # + # You can use a sublist to tell conform to run *until* a formatter + # is found + # javascript = [ [ "prettierd" "prettier" ] ]; + }; + }; + }; + + # https://nix-community.github.io/nixvim/keymaps/index.html + keymaps = [ + { + mode = ""; + key = "f"; + action.__raw = '' + function() + require('conform').format { async = true, lsp_fallback = true } + end + ''; + options = { + desc = "[F]ormat buffer"; + }; + } + ]; + }; +} diff --git a/home/programs/cli/neovim/plugins/debug.nix b/home/programs/cli/neovim/plugins/debug.nix new file mode 100644 index 0000000..9b01454 --- /dev/null +++ b/home/programs/cli/neovim/plugins/debug.nix @@ -0,0 +1,145 @@ +{ + programs.nixvim = { + # Shows how to use the DAP plugin to debug your code. + # + # Primarily focused on configuring the debugger for Go, but can + # be extended to other languages as well. That's why it's called + # kickstart.nixvim and not ktichen-sink.nixvim ;) + # https://nix-community.github.io/nixvim/plugins/dap/index.html + plugins.dap = { + enable = true; + + extensions = { + # Creates a beautiful debugger UI + dap-ui = { + enable = true; + + # Set icons to characters that are more likely to work in every terminal. + # Feel free to remove or use ones that you like more! :) + # Don't feel like these are good choices. + icons = { + expanded = "▾"; + collapsed = "▸"; + current_frame = "*"; + }; + + controls = { + icons = { + pause = "⏸"; + play = "▶"; + step_into = "⏎"; + step_over = "⏭"; + step_out = "⏮"; + step_back = "b"; + run_last = "▶▶"; + terminate = "⏹"; + disconnect = "⏏"; + }; + }; + }; + + # Add your own debuggers here + dap-go = { + enable = true; + }; + }; + }; + + # https://nix-community.github.io/nixvim/keymaps/index.html + keymaps = [ + { + mode = "n"; + key = ""; + action.__raw = '' + function() + require('dap').continue() + end + ''; + options = { + desc = "Debug: Start/Continue"; + }; + } + { + mode = "n"; + key = ""; + action.__raw = '' + function() + require('dap').step_into() + end + ''; + options = { + desc = "Debug: Step Into"; + }; + } + { + mode = "n"; + key = ""; + action.__raw = '' + function() + require('dap').step_over() + end + ''; + options = { + desc = "Debug: Step Over"; + }; + } + { + mode = "n"; + key = ""; + action.__raw = '' + function() + require('dap').step_out() + end + ''; + options = { + desc = "Debug: Step Out"; + }; + } + { + mode = "n"; + key = "b"; + action.__raw = '' + function() + require('dap').toggle_breakpoint() + end + ''; + options = { + desc = "Debug: Toggle Breakpoint"; + }; + } + { + mode = "n"; + key = "B"; + action.__raw = '' + function() + require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') + end + ''; + options = { + desc = "Debug: Set Breakpoint"; + }; + } + # Toggle to see last session result. Without this, you can't see session output + # in case of unhandled exception. + { + mode = "n"; + key = ""; + action.__raw = '' + function() + require('dapui').toggle() + end + ''; + options = { + desc = "Debug: See last session result."; + }; + } + ]; + + # https://nix-community.github.io/nixvim/NeovimOptions/index.html?highlight=extraconfiglua#extraconfiglua + extraConfigLua = '' + require('dap').listeners.after.event_initialized['dapui_config'] = require('dapui').open + require('dap').listeners.before.event_terminated['dapui_config'] = require('dapui').close + require('dap').listeners.before.event_exited['dapui_config'] = require('dapui').close + ''; + }; +} diff --git a/home/programs/cli/neovim/plugins/default.nix b/home/programs/cli/neovim/plugins/default.nix new file mode 100644 index 0000000..15b10a6 --- /dev/null +++ b/home/programs/cli/neovim/plugins/default.nix @@ -0,0 +1,29 @@ +{ nixvim, ... }: +{ + imports = [ + ./gitsigns.nix + ./which-key.nix + ./telescope.nix + ./conform.nix + ./lsp.nix + ./nvim-cmp.nix + ./mini.nix + ./treesitter.nix + ./indent-blankline.nix + ./autopairs.nix + ./neo-tree.nix + ]; + programs.nixvim = { + plugins = { + sleuth = { + enable = true; + }; + todo-comments = { + enable = true; + settings = { + signs = true; + }; + }; + }; + }; +} diff --git a/home/programs/cli/neovim/plugins/gitsigns.nix b/home/programs/cli/neovim/plugins/gitsigns.nix new file mode 100755 index 0000000..543206d --- /dev/null +++ b/home/programs/cli/neovim/plugins/gitsigns.nix @@ -0,0 +1,219 @@ +{ + programs.nixvim = { + # Adds git related signs to the gutter, as well as utilities for managing changes + # See `:help gitsigns` to understand what the configuration keys do + # https://nix-community.github.io/nixvim/plugins/gitsigns/index.html + plugins.gitsigns = { + enable = true; + settings = { + signs = { + add = {text = "+";}; + change = {text = "~";}; + delete = {text = "_";}; + topdelete = {text = "‾";}; + changedelete = {text = "~";}; + }; + }; + }; + + # NOTE: add gitsigns recommended keymaps if you are interested + /* + # https://nix-community.github.io/nixvim/keymaps/index.html + keymaps = [ + # Navigation + { + mode = "n"; + key = "]c"; + action.__raw = '' + function() + if vim.wo.diff then + vim.cmd.normal { ']c', bang = true } + else + require('gitsigns').nav_hunk 'next' + end + end + ''; + options = { + desc = "Jump to next git [C]hange"; + }; + } + { + mode = "n"; + key = "[c"; + action.__raw = '' + function() + if vim.wo.diff then + vim.cmd.normal { '[c', bang = true } + else + require('gitsigns').nav_hunk 'prev' + end + end + ''; + options = { + desc = "Jump to previous git [C]hange"; + }; + } + # Actions + # visual mode + { + mode = "v"; + key = "hs"; + action.__raw = '' + function() + require('gitsigns').stage_hunk { vim.fn.line '.', vim.fn.line 'v' } + end + ''; + options = { + desc = "stage git hunk"; + }; + } + { + mode = "v"; + key = "hr"; + action.__raw = '' + function() + require('gitsigns').reset_hunk { vim.fn.line '.', vim.fn.line 'v' } + end + ''; + options = { + desc = "reset git hunk"; + }; + } + # normal mode + { + mode = "n"; + key = "hs"; + action.__raw = '' + function() + require('gitsigns').stage_hunk() + end + ''; + options = { + desc = "git [s]tage hunk"; + }; + } + { + mode = "n"; + key = "hr"; + action.__raw = '' + function() + require('gitsigns').reset_hunk() + end + ''; + options = { + desc = "git [r]eset hunk"; + }; + } + { + mode = "n"; + key = "hS"; + action.__raw = '' + function() + require('gitsigns').stage_buffer() + end + ''; + options = { + desc = "git [S]tage buffer"; + }; + } + { + mode = "n"; + key = "hu"; + action.__raw = '' + function() + require('gitsigns').undo_stage_hunk() + end + ''; + options = { + desc = "git [u]ndo stage hunk"; + }; + } + { + mode = "n"; + key = "hR"; + action.__raw = '' + function() + require('gitsigns').reset_buffer() + end + ''; + options = { + desc = "git [R]eset buffer"; + }; + } + { + mode = "n"; + key = "hp"; + action.__raw = '' + function() + require('gitsigns').preview_hunk() + end + ''; + options = { + desc = "git [p]review hunk"; + }; + } + { + mode = "n"; + key = "hb"; + action.__raw = '' + function() + require('gitsigns').blame_line() + end + ''; + options = { + desc = "git [b]lame line"; + }; + } + { + mode = "n"; + key = "hd"; + action.__raw = '' + function() + require('gitsigns').diffthis() + end + ''; + options = { + desc = "git [d]iff against index"; + }; + } + { + mode = "n"; + key = "hD"; + action.__raw = '' + function() + require('gitsigns').diffthis '@' + end + ''; + options = { + desc = "git [D]iff against last commit"; + }; + } + # Toggles + { + mode = "n"; + key = "tb"; + action.__raw = '' + function() + require('gitsigns').toggle_current_line_blame() + end + ''; + options = { + desc = "[T]oggle git show [b]lame line"; + }; + } + { + mode = "n"; + key = "tD"; + action.__raw = '' + function() + require('gitsigns').toggle_deleted() + end + ''; + options = { + desc = "[T]oggle git show [D]eleted"; + }; + } + ]; + */ + }; +} diff --git a/home/programs/cli/neovim/plugins/indent-blankline.nix b/home/programs/cli/neovim/plugins/indent-blankline.nix new file mode 100755 index 0000000..5629b25 --- /dev/null +++ b/home/programs/cli/neovim/plugins/indent-blankline.nix @@ -0,0 +1,10 @@ +{ + programs.nixvim = { + # Add indentation guides even on blank lines + # For configuration see `:help ibl` + # https://nix-community.github.io/nixvim/plugins/indent-blankline/index.html + plugins.indent-blankline = { + enable = true; + }; + }; +} diff --git a/home/programs/cli/neovim/plugins/lint.nix b/home/programs/cli/neovim/plugins/lint.nix new file mode 100755 index 0000000..38c48c4 --- /dev/null +++ b/home/programs/cli/neovim/plugins/lint.nix @@ -0,0 +1,50 @@ +{ + programs.nixvim = { + # Linting + # https://nix-community.github.io/nixvim/plugins/lint/index.html + plugins.lint = { + enable = true; + + # NOTE: Enabling these will cause errors unless these tools are installed + lintersByFt = { + nix = ["nix"]; + markdown = [ + "markdownlint" + #vale + ]; + #clojure = ["clj-kondo"]; + #dockerfile = ["hadolint"]; + #inko = ["inko"]; + #janet = ["janet"]; + #json = ["jsonlint"]; + #rst = ["vale"]; + #ruby = ["ruby"]; + #terraform = ["tflint"]; + #text = ["vale"]; + }; + + # Create autocommand which carries out the actual linting + # on the specified events. + autoCmd = { + callback.__raw = '' + function() + require('lint').try_lint() + end + ''; + group = "lint"; + event = [ + "BufEnter" + "BufWritePost" + "InsertLeave" + ]; + }; + }; + + # https://nix-community.github.io/nixvim/NeovimOptions/autoGroups/index.html + autoGroups = { + lint = { + clear = true; + }; + }; + }; +} diff --git a/home/programs/cli/neovim/plugins/lsp.nix b/home/programs/cli/neovim/plugins/lsp.nix new file mode 100755 index 0000000..63ab6a7 --- /dev/null +++ b/home/programs/cli/neovim/plugins/lsp.nix @@ -0,0 +1,274 @@ +{pkgs, ...}: { + programs.nixvim = { + # Dependencies + # { 'Bilal2453/luvit-meta', lazy = true }, + # + # + # Allows extra capabilities providied by nvim-cmp + # https://nix-community.github.io/nixvim/plugins/cmp-nvim-lsp.html + plugins.cmp-nvim-lsp = { + enable = true; + }; + + # Useful status updates for LSP. + # https://nix-community.github.io/nixvim/plugins/fidget/index.html + plugins.fidget = { + enable = true; + }; + + # https://nix-community.github.io/nixvim/NeovimOptions/index.html?highlight=extraplugi#extraplugins + extraPlugins = with pkgs.vimPlugins; [ + # NOTE: This is where you would add a vim plugin that is not implemented in Nixvim, also see extraConfigLuaPre below + # + # TODO: Add luvit-meta when Nixos package is added + ]; + + # https://nix-community.github.io/nixvim/NeovimOptions/autoGroups/index.html + autoGroups = { + "kickstart-lsp-attach" = { + clear = true; + }; + }; + + # Brief aside: **What is LSP?** + # + # LSP is an initialism you've probably heard, but might not understand what it is. + # + # LSP stands for Language Server Protocol. It's a protocol that helps editors + # and language tooling communicate in a standardized fashion. + # + # In general, you have a "server" which is some tool built to understand a particular + # language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers + # (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone + # processes that communicate with some "client" - in this case, Neovim! + # + # LSP provides Neovim with features like: + # - Go to definition + # - Find references + # - Autocompletion + # - Symbol Search + # - and more! + # + # Thus, Language Servers are external tools that must be installed separately from + # Neovim which are configured below in the `server` section. + # + # If you're wondering about lsp vs treesitter, you can check out the wonderfully + # and elegantly composed help section, `:help lsp-vs-treesitter` + # + # https://nix-community.github.io/nixvim/plugins/lsp/index.html + plugins.lsp = { + enable = true; + + # Enable the following language servers + # Feel free to add/remove any LSPs that you want here. They will automatically be installed. + # + # Add any additional override configuration in the following tables. Available keys are: + # - cmd: Override the default command used to start the server + # - filetypes: Override the default list of associated filetypes for the server + # - capabilities: Override fields in capabilities. Can be used to disable certain LSP features. + # - settings: Override the default settings passed when initializing the server. + # For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/ + servers = { + # clangd = { + # enable = true; + #} + # gopls = { + # enable = true; + #} + # pyright = { + # enable = true; + #} + # rust_analyzer = { + # enable = true; + #} + # ...etc. See `https://nix-community.github.io/nixvim/plugins/lsp` for a list of pre-configured LSPs + # + # Some languages (like typscript) have entire language plugins that can be useful: + # `https://nix-community.github.io/nixvim/plugins/typescript-tools/index.html?highlight=typescript-tools#pluginstypescript-toolspackage` + # + # But for many setups the LSP (`tsserver`) will work just fine + # tsserver = { + # enable = true; + #} + + lua-ls = { + enable = true; + + # cmd = { + #}; + # filetypes = { + #}; + settings = { + completion = { + callSnippet = "Replace"; + }; + #diagnostics = { + # disable = { + # "missing-fields"; + #}; + }; + }; + }; + + keymaps = { + # Diagnostic keymaps + diagnostic = { + "q" = { + #mode = "n"; + action = "setloclist"; + desc = "Open diagnostic [Q]uickfix list"; + }; + }; + + extra = [ + # Jump to the definition of the word under your cusor. + # This is where a variable was first declared, or where a function is defined, etc. + # To jump back, press . + { + mode = "n"; + key = "gd"; + action.__raw = "require('telescope.builtin').lsp_definitions"; + options = { + desc = "LSP: [G]oto [D]efinition"; + }; + } + # Find references for the word under your cursor. + { + mode = "n"; + key = "gr"; + action.__raw = "require('telescope.builtin').lsp_references"; + options = { + desc = "LSP: [G]oto [R]eferences"; + }; + } + # Jump to the implementation of the word under your cursor. + # Useful when your language has ways of declaring types without an actual implementation. + { + mode = "n"; + key = "gI"; + action.__raw = "require('telescope.builtin').lsp_implementations"; + options = { + desc = "LSP: [G]oto [I]mplementation"; + }; + } + # Jump to the type of the word under your cursor. + # Useful when you're not sure what type a variable is and you want to see + # the definition of its *type*, not where it was *defined*. + { + mode = "n"; + key = "D"; + action.__raw = "require('telescope.builtin').lsp_type_definitions"; + options = { + desc = "LSP: Type [D]efinition"; + }; + } + # Fuzzy find all the symbols in your current document. + # Symbols are things like variables, functions, types, etc. + { + mode = "n"; + key = "ds"; + action.__raw = "require('telescope.builtin').lsp_document_symbols"; + options = { + desc = "LSP: [D]ocument [S]ymbols"; + }; + } + # Fuzzy find all the symbols in your current workspace. + # Similar to document symbols, except searches over your entire project. + { + mode = "n"; + key = "ws"; + action.__raw = "require('telescope.builtin').lsp_dynamic_workspace_symbols"; + options = { + desc = "LSP: [W]orkspace [S]ymbols"; + }; + } + ]; + + lspBuf = { + # Rename the variable under your cursor. + # Most Language Servers support renaming across files, etc. + "rn" = { + action = "rename"; + desc = "LSP: [R]e[n]ame"; + }; + # Execute a code action, usually your cursor needs to be on top of an error + # or a suggestion from your LSP for this to activate. + "ca" = { + #mode = "n"; + action = "code_action"; + desc = "LSP: [C]ode [A]ction"; + }; + # WARN: This is not Goto Definition, this is Goto Declaration. + # For example, in C this would take you to the header. + "gD" = { + action = "declaration"; + desc = "LSP: [G]oto [D]eclaration"; + }; + }; + }; + + # LSP servers and clients are able to communicate to each other what features they support. + # By default, Neovim doesn't support everything that is in the LSP specification. + # When you add nvim-cmp, luasnip, etc. Neovim now has *more* capabilities. + # So, we create new capabilities with nvim cmp, and then broadcast that to the servers. + # NOTE: This is done automatically by Nixvim when enabling cmp-nvim-lsp below is an example if you did want to add new capabilities + #capabilities = '' + # capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities()) + #''; + + # This function gets run when an LSP attaches to a particular buffer. + # That is to say, every time a new file is opened that is associated with + # an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this + # function will be executred to configure the current buffer + # NOTE: This is an example of an attribute that takes raw lua + onAttach = '' + -- NOTE: Remember that Lua is a real programming language, and as such it is possible + -- to define small helper and utility functions so you don't have to repeat yourself. + -- + -- In this case, 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 map = function(keys, func, desc) + vim.keymap.set('n', keys, func, { buffer = bufnr, desc = 'LSP: ' .. desc }) + end + + -- The following two autocommands are used to highlight references of the + -- word under the cursor when your cursor rests there for a little while. + -- See `:help CursorHold` for information about when this is executed + -- + -- When you move your cursor, the highlights will be cleared (the second autocommand). + if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then + local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false }) + vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { + buffer = bufnr, + group = highlight_augroup, + callback = vim.lsp.buf.document_highlight, + }) + + vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { + buffer = bufnr, + group = highlight_augroup, + callback = vim.lsp.buf.clear_references, + }) + + vim.api.nvim_create_autocmd('LspDetach', { + group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }), + callback = function(event2) + vim.lsp.buf.clear_references() + vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf } + end, + }) + end + + -- The following autocommand is used to enable inlay hints in your + -- code, if the language server you are using supports them + -- + -- This may be unwanted, since they displace some of your code + if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then + map('th', function() + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) + end, '[T]oggle Inlay [H]ints') + end + ''; + }; + }; +} diff --git a/home/programs/cli/neovim/plugins/mini.nix b/home/programs/cli/neovim/plugins/mini.nix new file mode 100755 index 0000000..9d75ebc --- /dev/null +++ b/home/programs/cli/neovim/plugins/mini.nix @@ -0,0 +1,50 @@ +{ + programs.nixvim = { + # Collection of various small independent plugins/modules + # https://nix-community.github.io/nixvim/plugins/mini.html + plugins.mini = { + enable = true; + + modules = { + # Better Around/Inside textobjects + # + # Examples: + # - va) - [V]isually select [A]round [)]paren + # - yinq - [Y]ank [I]nside [N]ext [Q]uote + # - ci' - [C]hange [I]nside [']quote + ai = { + n_lines = 500; + }; + + # Add/delete/replace surroundings (brackets, quotes, etc.) + # + # Examples: + # - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren + # - sd' - [S]urround [D]elete [']quotes + # - sr)' - [S]urround [R]eplace [)] ['] + surround = { + }; + + # Simple and easy statusline. + # You could remove this setup call if you don't like it, + # and try some other statusline plugin + statusline = { + use_icons.__raw = "vim.g.have_nerd_font"; + }; + + # ... and there is more! + # Check out: https://github.com/echasnovski/mini.nvim + }; + }; + + # You can configure sections in the statusline by overriding their + # default behavior. For example, here we set the section for + # cursor location to LINE:COLUMN + # https://nix-community.github.io/nixvim/NeovimOptions/index.html?highlight=extraconfiglu#extraconfiglua + extraConfigLua = '' + require('mini.statusline').section_location = function() + return '%2l:%-2v' + end + ''; + }; +} diff --git a/home/programs/cli/neovim/plugins/neo-tree.nix b/home/programs/cli/neovim/plugins/neo-tree.nix new file mode 100755 index 0000000..772c8e6 --- /dev/null +++ b/home/programs/cli/neovim/plugins/neo-tree.nix @@ -0,0 +1,28 @@ +{ + programs.nixvim = { + # Neo-tree is a Neovim plugin to browse the file system + # https://nix-community.github.io/nixvim/plugins/neo-tree/index.html?highlight=neo-tree#pluginsneo-treepackage + plugins.neo-tree = { + enable = true; + + filesystem = { + window = { + mappings = { + "\\" = "close_window"; + }; + }; + }; + }; + + # https://nix-community.github.io/nixvim/keymaps/index.html + keymaps = [ + { + key = "\\"; + action = "Neotree reveal"; + options = { + desc = "NeoTree reveal"; + }; + } + ]; + }; +} diff --git a/home/programs/cli/neovim/plugins/nvim-cmp.nix b/home/programs/cli/neovim/plugins/nvim-cmp.nix new file mode 100755 index 0000000..c18f285 --- /dev/null +++ b/home/programs/cli/neovim/plugins/nvim-cmp.nix @@ -0,0 +1,130 @@ +{ + programs.nixvim = { + # Dependencies + # + # Snippet Engine & its associated nvim-cmp source + # https://nix-community.github.io/nixvim/plugins/luasnip/index.html + plugins.luasnip = { + enable = true; + }; + + # https://nix-community.github.io/nixvim/plugins/cmp-nvim-lsp.html + plugins.cmp-nvim-lsp = { + enable = true; + }; + + # https://nix-community.github.io/nixvim/plugins/cmp-path.html + plugins.cmp-path = { + enable = true; + }; + + # `friendly-snippets` contains a variety of premade snippets + # See the README about individual language/framework/plugin snippets: + # https://github.com/rafamadriz/friendly-snippets + # https://nix-community.github.io/nixvim/plugins/friendly-snippets.html + # plugins.friendly-snippets = { + # enable = true; + # }; + + # TODO: Waiting on this bug to be fixed https://github.com/NixOS/nixpkgs/issues/306367 + # https://nix-community.github.io/nixvim/NeovimOptions/index.html?highlight=extralua#extraluapackages + extraLuaPackages = ps: [ + # Required by luasnip + ps.jsregexp + ]; + + # Autocompletion + # See `:help cmp` + # https://nix-community.github.io/nixvim/plugins/cmp/index.html + plugins.cmp = { + enable = true; + + settings = { + snippet = { + expand = '' + function(args) + require('luasnip').lsp_expand(args.body) + end + ''; + }; + + completion = { + completeopt = "menu,menuone,noinsert"; + }; + + # For an understanding of why these mappings were + # chosen, you will need to read `:help ins-completion` + # + # No, but seriously, Please read `:help ins-completion`, it is really good! + mapping = { + # Select the [n]ext item + "" = "cmp.mapping.select_next_item()"; + # Select the [p]revious item + "" = "cmp.mapping.select_prev_item()"; + # Scroll the documentation window [b]ack / [f]orward + "" = "cmp.mapping.scroll_docs(-4)"; + "" = "cmp.mapping.scroll_docs(4)"; + # Accept ([y]es) the completion. + # This will auto-import if your LSP supports it. + # This will expand snippets if the LSP sent a snippet. + "" = "cmp.mapping.confirm { select = true }"; + # If you prefer more traditional completion keymaps, + # you can uncomment the following lines. + # "" = "cmp.mapping.confirm { select = true }"; + # "" = "cmp.mapping.select_next_item()"; + # "" = "cmp.mapping.select_prev_item()"; + + # Manually trigger a completion from nvim-cmp. + # Generally you don't need this, because nvim-cmp will display + # completions whenever it has completion options available. + "" = "cmp.mapping.complete {}"; + + # Think of as moving to the right of your snippet expansion. + # So if you have a snippet that's like: + # function $name($args) + # $body + # end + # + # will move you to the right of the expansion locations. + # is similar, except moving you backwards. + "" = '' + cmp.mapping(function() + if luasnip.expand_or_locally_jumpable() then + luasnip.expand_or_jump() + end + end, { 'i', 's' }) + ''; + "" = '' + cmp.mapping(function() + if luasnip.locally_jumpable(-1) then + luasnip.jump(-1) + end + end, { 'i', 's' }) + ''; + + # For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: + # https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps + }; + + # WARNING: If plugins.cmp.autoEnableSources Nixivm will automatically enable the + # corresponding source plugins. This will work only when this option is set to a list. + # If you use a raw lua string, you will need to explicitly enable the relevant source + # plugins in your nixvim configuration. + sources = [ + { + name = "luasnip"; + } + # Adds other completion capabilites. + # nvim-cmp does not ship with all sources by default. They are split + # into multiple repos for maintenance purposes. + { + name = "nvim_lsp"; + } + { + name = "path"; + } + ]; + }; + }; + }; +} diff --git a/home/programs/cli/neovim/plugins/telescope.nix b/home/programs/cli/neovim/plugins/telescope.nix new file mode 100755 index 0000000..acbece3 --- /dev/null +++ b/home/programs/cli/neovim/plugins/telescope.nix @@ -0,0 +1,169 @@ +{ + programs.nixvim = { + # Fuzzy Finder (files, lsp, etc) + # https://nix-community.github.io/nixvim/plugins/telescope/index.html + plugins.telescope = { + # Telescope is a fuzzy finder that comes with a lot of different things that + # it can fuzzy find! It's more than just a "file finder", it can search + # many different aspects of Neovim, your workspace, LSP, and more! + # + # The easiest way to use Telescope, is to start by doing something like: + # :Telescope help_tags + # + # After running this command, a window will open up and you're able to + # type in the prompt window. You'll see a list of `help_tags` options and + # a corresponding preview of the help. + # + # Two important keymaps to use while in Telescope are: + # - Insert mode: + # - Normal mode: ? + # + # This opens a window that shows you all of the keymaps for the current + # Telescope picker. This is really useful to discover what Telescope can + # do as well as how to actually do it! + # + # [[ Configure Telescope ]] + # See `:help telescope` and `:help telescope.setup()` + enable = true; + + # Enable Telescope extensions + extensions = { + fzf-native.enable = true; + ui-select.enable = true; + }; + + # You can put your default mappings / updates / etc. in here + # See `:help telescope.builtin` + keymaps = { + "sh" = { + mode = "n"; + action = "help_tags"; + options = { + desc = "[S]earch [H]elp"; + }; + }; + "sk" = { + mode = "n"; + action = "keymaps"; + options = { + desc = "[S]earch [K]eymaps"; + }; + }; + "sf" = { + mode = "n"; + action = "find_files"; + options = { + desc = "[S]earch [F]iles"; + }; + }; + "ss" = { + mode = "n"; + action = "builtin"; + options = { + desc = "[S]earch [S]elect Telescope"; + }; + }; + "sw" = { + mode = "n"; + action = "grep_string"; + options = { + desc = "[S]earch current [W]ord"; + }; + }; + "sg" = { + mode = "n"; + action = "live_grep"; + options = { + desc = "[S]earch by [G]rep"; + }; + }; + "sd" = { + mode = "n"; + action = "diagnostics"; + options = { + desc = "[S]earch [D]iagnostics"; + }; + }; + "sr" = { + mode = "n"; + action = "resume"; + options = { + desc = "[S]earch [R]esume"; + }; + }; + "s" = { + mode = "n"; + action = "oldfiles"; + options = { + desc = "[S]earch Recent Files ('.' for repeat)"; + }; + }; + "" = { + mode = "n"; + action = "buffers"; + options = { + desc = "[ ] Find existing buffers"; + }; + }; + }; + settings = { + extensions.__raw = "{ ['ui-select'] = { require('telescope.themes').get_dropdown() } }"; + }; + }; + + # https://nix-community.github.io/nixvim/keymaps/index.html + keymaps = [ + # Slightly advanced example of overriding default behavior and theme + { + mode = "n"; + key = "/"; + # You can pass additional configuration to Telescope to change the theme, layout, etc. + action.__raw = '' + function() + require('telescope.builtin').current_buffer_fuzzy_find( + require('telescope.themes').get_dropdown { + winblend = 10, + previewer = false + } + ) + end + ''; + options = { + desc = "[/] Fuzzily search in current buffer"; + }; + } + { + mode = "n"; + key = "s/"; + # It's also possible to pass additional configuration options. + # See `:help telescope.builtin.live_grep()` for information about particular keys + action.__raw = '' + function() + require('telescope.builtin').live_grep { + grep_open_files = true, + prompt_title = 'Live Grep in Open Files' + } + end + ''; + options = { + desc = "[S]earch [/] in Open Files"; + }; + } + # Shortcut for searching your Neovim configuration files + { + mode = "n"; + key = "sn"; + action.__raw = '' + function() + require('telescope.builtin').find_files { + cwd = vim.fn.stdpath 'config' + } + end + ''; + options = { + desc = "[S]earch [N]eovim files"; + }; + } + ]; + }; +} diff --git a/home/programs/cli/neovim/plugins/treesitter.nix b/home/programs/cli/neovim/plugins/treesitter.nix new file mode 100755 index 0000000..898b9d2 --- /dev/null +++ b/home/programs/cli/neovim/plugins/treesitter.nix @@ -0,0 +1,47 @@ +{ + programs.nixvim = { + # Highlight, edit, and navigate code + # https://nix-community.github.io/nixvim/plugins/treesitter/index.html + plugins.treesitter = { + enable = true; + + # TODO: Don't think I need this as nixGrammars is true which should auto install these??? + settings = { + ensureInstalled = [ + "bash" + "c" + "diff" + "html" + "lua" + "luadoc" + "markdown" + "markdown_inline" + "query" + "vim" + "vimdoc" + ]; + + highlight = { + enable = true; + + # Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules. + additional_vim_regex_highlighting = true; + }; + + indent = { + enable = true; + disable = [ + "ruby" + ]; + }; + + # There are additional nvim-treesitter modules that you can use to interact + # with nvim-treesitter. You should go explore a few and see what interests you: + # + # - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod` + # - Show your current context: https://nix-community.github.io/nixvim/plugins/treesitter-context/index.html + # - Treesitter + textobjects: https://nix-community.github.io/nixvim/plugins/treesitter-textobjects/index.html + }; + }; + }; +} diff --git a/home/programs/cli/neovim/plugins/which-key.nix b/home/programs/cli/neovim/plugins/which-key.nix new file mode 100755 index 0000000..4beff64 --- /dev/null +++ b/home/programs/cli/neovim/plugins/which-key.nix @@ -0,0 +1,47 @@ +{ + programs.nixvim = { + # Useful plugin to show you pending keybinds. + # https://nix-community.github.io/nixvim/plugins/which-key/index.html + plugins.which-key = { + enable = true; + + # Document existing key chains + settings = { + spec = [ + { + __unkeyed-1 = "c"; + group = "[C]ode"; + } + { + __unkeyed-1 = "d"; + group = "[D]ocument"; + } + { + __unkeyed-1 = "r"; + group = "[R]ename"; + } + { + __unkeyed-1 = "s"; + group = "[S]earch"; + } + { + __unkeyed-1 = "w"; + group = "[W]orkspace"; + } + { + __unkeyed-1 = "t"; + group = "[T]oggle"; + } + { + __unkeyed-1 = "h"; + group = "Git [H]unk"; + mode = [ + "n" + "v" + ]; + } + ]; + }; + }; + }; +} diff --git a/home/programs/cli/pkgs.nix b/home/programs/cli/pkgs.nix new file mode 100644 index 0000000..8856425 --- /dev/null +++ b/home/programs/cli/pkgs.nix @@ -0,0 +1,52 @@ +{ pkgs, yazi, ... }: +{ + home.packages = with pkgs; [ + fff + joshuto + + bat + fzf + + cava + lutgen + + micro + helix + + inxi + zoxide + starship + fastfetch + cpufetch + pulsemixer + + openvpn + nix-tree + nix-prefetch-github + + nvtopPackages.amd + btop + + bluetuith + confetty + tenki + light + + # trash-cli + trashy + fuc + zip + atool + + ffmpegthumbnailer + p7zip + jq + poppler_min + imagemagick + glow + ouch + + # ferium + # portablemc + ]; +} diff --git a/home/programs/cli/yazi/binds.nix b/home/programs/cli/yazi/binds.nix new file mode 100644 index 0000000..556e728 --- /dev/null +++ b/home/programs/cli/yazi/binds.nix @@ -0,0 +1,50 @@ +{ ... }: +{ + programs.yazi.keymap = { + manager = { + prepend_keymap = [ + # NAVIGATE + { on = "l"; run = "plugin --sync smart-enter"; } + { on = "Enter"; run = "plugin --sync smart-enter"; } + + # VISUAL + { on = [ "v" "m" ]; run = "plugin --sync max-preview"; } + { on = [ "v" "p" ]; run = "plugin --sync hide-preview"; } + { on = [ "v" "v" ]; run = "visual_mode"; } + { on = [ "v" "V" ]; run = "visual_mode --unset"; } + { on = [ "v" "a" ]; run = "select_all --state=true"; } + { on = [ "v" "r" ]; run = "select_all --state=none"; } + { on = [ "v" "h" ]; run = "hidden toggle"; } + + # DELETION + { on = [ "d" "d" ]; run = "remove"; } + { on = [ "d" "D" ]; run = "remove --permanently"; } + { on = [ "D" "d" ]; run = "remove --force"; } + { on = [ "D" "D" ]; run = "remove --permanently --force"; } + + # CREATE + { on = [ "a" "f" ]; run = "create"; } + { on = [ "a" "d" ]; run = "create --dir"; } + + # RENAME + { on = [ "r" "r" ]; run = "rename"; } + { on = [ "r" "n" ]; run = "rename --empty=stem"; } + { on = [ "r" "e" ]; run = "rename --empty=ext"; } + { on = [ "r" "a" ]; run = "rename --empty=all"; } + + # NAVIGATE + { on = [ "c" "d" ]; run = "cd --interactive"; } + { on = [ "g" "f" ]; run = "cd ~/.flake"; } + { on = [ "g" "w" ]; run = "cd ~/.flake/hosts/wyswort"; } + { on = [ "g" "m" ]; run = "cd ~/.flake/home/megamozg"; } + ]; + }; + completion = { + prepend_keymap = [ + { on = "C-j"; run = "arrow 1"; } + { on = "C-k"; run = "arrow -1"; } + # { on = "C-l"; run = "lose --submit" "close_input --submit" ; } + ]; + }; + }; +} diff --git a/home/programs/cli/yazi/default.nix b/home/programs/cli/yazi/default.nix new file mode 100644 index 0000000..3ae9165 --- /dev/null +++ b/home/programs/cli/yazi/default.nix @@ -0,0 +1,64 @@ +{ pkgs, inputs, ... }: +{ + imports = [ + ./binds.nix + ./theme.nix + ./lua.nix + ./plugins.nix + ./starship.nix + ]; + programs.yazi = { + enable = true; + package = inputs.yazi.packages.${pkgs.system}.default; + settings = { + manager = { + ratio = [ 1 4 4 ]; + show_hidden = false; + sort_by = "natural"; + sort_dir_first = true; + sort_reverse = false; + linemode = "size"; + show_symlink = true; + }; + preview = { + wrap = "yes"; + tab_size = 1; + image_filter = "lanczos3"; + image_quality = 90; + max_height = 1000; + max_width = 1000; + }; + opener = { + edit = [ + { run = "hx $@"; block = true; } + ]; + play = [ + { run = "mpv $@"; orphan = true; } + ]; + open = [ + { run = "xdg-open $@"; } + ]; + }; + open = { + rules = [ + { mime = "text/*"; use = "edit"; } + { mime = "video/*"; use = "play"; } + { mime = "audio/*"; use = "play"; } + { mime = "image/*"; use = "open"; } + ]; + }; + plugin = { + prepend_previewers = [ + { mime = "application/*zip"; run = "ouch"; } + { mime = "application/x-tar"; run = "ouch"; } + { mime = "application/x-bzip2"; run = "ouch"; } + { mime = "application/x-7z-compressed"; run = "ouch"; } + { mime = "application/x-rar"; run = "ouch"; } + { mime = "application/x-xz"; run = "ouch"; } + + { name = "*.md"; run = "glow"; } + ]; + }; + }; + }; +} diff --git a/home/programs/cli/yazi/lua.nix b/home/programs/cli/yazi/lua.nix new file mode 100644 index 0000000..e2a496f --- /dev/null +++ b/home/programs/cli/yazi/lua.nix @@ -0,0 +1,101 @@ +{ ... }: +{ + programs.yazi.initLua = '' + require("no-status"):setup() + -- require("starship"):setup() + require("starship"):setup({ config_file = "/home/megamozg/.config/yazi/star.toml" }) + + -- require("yatline"):setup({ + -- section_separator = { open = "", close = "" }, + -- part_separator = { open = "", close = "" }, + -- inverse_separator = { open = "", close = "" }, + -- + -- style_a = { + -- fg = "black", + -- bg_mode = { + -- normal = "cyan", + -- select = "yellow", + -- un_set = "blue" + -- } + -- }, + -- style_b = { bg = "black", fg = "white" }, + -- style_c = { bg = "black", fg = "white" }, + -- + -- permissions_t_fg = "green", + -- permissions_r_fg = "yellow", + -- permissions_w_fg = "red", + -- permissions_x_fg = "cyan", + -- permissions_s_fg = "darkgray", + -- + -- tab_width = 20, + -- tab_use_inverse = false, + -- + -- selected = { icon = "󰻭", fg = "yellow" }, + -- copied = { icon = "", fg = "green" }, + -- cut = { icon = "", fg = "red" }, + -- + -- total = { icon = "󰮍", fg = "yellow" }, + -- succ = { icon = "", fg = "green" }, + -- fail = { icon = "", fg = "red" }, + -- found = { icon = "󰮕", fg = "blue" }, + -- processed = { icon = "󰐍", fg = "green" }, + -- + -- show_background = true, + -- + -- display_header_line = true, + -- display_status_line = true, + -- + -- header_line = { + -- left = { + -- section_a = { -- EDGE LEFT + -- -- {type = "line", custom = false, name = "tabs", params = {"left"}}, + -- {type = "string", custom = false, name = "tab_path"}, + -- }, + -- section_b = { -- LEFT CENTER + -- }, + -- section_c = { -- RIGHT LEFT + -- } + -- }, + -- right = { + -- section_a = { -- EDGE RIGHT + -- -- {type = "line", custom = false, name = "tabs", params = {"right"}}, + -- }, + -- section_b = { -- CENTER RIGHT + -- }, + -- section_c = { -- LEFT RIGHT + -- } + -- } + -- }, + -- + -- status_line = { + -- left = { + -- section_a = { + -- }, + -- section_b = { + -- }, + -- section_c = { + -- } + -- }, + -- right = { + -- section_a = { + -- }, + -- section_b = { + -- }, + -- section_c = { + -- } + -- } + -- }, + -- }) + + require("full-border"):setup { + type = ui.Border.ROUNDED, + } + + Header:children_add(function() + if ya.target_family() ~= "unix" then + return ui.Line {} + end + return ui.Span(ya.user_name() .. "@" .. ya.host_name() .. ": "):fg("red") + end, 500, Header.LEFT) + ''; +} diff --git a/home/programs/cli/yazi/plugins.nix b/home/programs/cli/yazi/plugins.nix new file mode 100644 index 0000000..961eba8 --- /dev/null +++ b/home/programs/cli/yazi/plugins.nix @@ -0,0 +1,77 @@ +{ pkgs, lib, ... }: +let + yazi-plugins = pkgs.fetchFromGitHub { + owner = "yazi-rs"; + repo = "plugins"; + rev = "74a837c6eafba59e22dc3d8d8ec630934580c70c"; + hash = "sha256-h+CoRLRyC+fJogfAoOw7twXSRkUotbgnS3gBFvlxNlw="; + }; +in +{ + # PLUGINS FROM REPO + programs.yazi.plugins = { + # BUILTINED + chmod = "${yazi-plugins}/chmod.yazi"; + max-preview = "${yazi-plugins}/max-preview.yazi"; + no-status = "${yazi-plugins}/no-status.yazi"; + hide-preview = "${yazi-plugins}/hide-preview.yazi"; + full-border = "${yazi-plugins}/full-border.yazi"; + + # FETCHED + ouch = pkgs.fetchFromGitHub { + owner = "ndtoan96"; + repo = "ouch.yazi"; + rev = "251da6930ca8b7ee0384810086c3bf644caede3e"; + hash = "sha256-yLt9aY6hUIOdBI5bMdCs7VYFJGyD3WIkmPxvWKNCskA="; + }; + glow = pkgs.fetchFromGitHub { + owner = "Reledia"; + repo = "glow.yazi"; + rev = "4e016fa2357e5e7e9b1a4881e1492d73a0a2f2cc"; + hash = "sha256-d73C8s8p85c0xfq8Nfzlnp83JUakMPbviQDFCX0G+qE="; + }; + ffmpeg = pkgs.fetchFromGitHub { + owner = "Tyarel8"; + repo = "video-ffmpeg.yazi"; + rev = "fe26a18f9b32880e10b686df5c4559d9af2bce6b"; + hash = "sha256-PIsetF42mlxDv7hEBgjt4FdryDhWTAF/o0Z3Z1G8HJE="; + }; + relative = pkgs.fetchFromGitHub { + owner = "dedukun"; + repo = "relative-motions.yazi"; + rev = "89d0cb9c84a7bba98d2e7ca4bac706d2458d0c06"; + hash = "sha256-qtjAgH+NS4YFVIwq+x2sC90y4vDSXNI8pGXIZ3FuQMU="; + }; + enter = pkgs.fetchFromGitHub { + owner = "ourongxing"; + repo = "fast-enter.yazi"; + rev = "dd498123cb0696d7fa50b32d2268fb8c2084a4a4"; + hash = "sha256-jjluqFboFXV4yqBMvW7WhO61Urn2FQ/O31PqlaCxB2c="; + }; + starship = pkgs.fetchFromGitHub { + owner = "Rolv-Apneseth"; + repo = "starship.yazi"; + rev = "77a65f5a367f833ad5e6687261494044006de9c3"; + hash = "sha256-sAB0958lLNqqwkpucRsUqLHFV/PJYoJL2lHFtfHDZF8="; + }; + yatline = pkgs.fetchFromGitHub { + owner = "imsi32"; + repo = "yatline.yazi"; + rev = "7b56434864d6a0b5d547fed2339b99346a018522"; + hash = "sha256-4qxBAXFyPBQhSU24xL7fzhgM5e8Cq7BigEp4GPxSjD4="; + }; + }; + + # CUSTOM PLUGINS + xdg.configFile = { + # SMART ENTER + "yazi/plugins/smart-enter.yazi/init.lua".text = '' + return { + entry = function() + local h = cx.active.current.hovered + ya.manager_emit(h and h.cha.is_dir and "enter" or "open", { hovered = true }) + end, + } + ''; + }; +} diff --git a/home/programs/cli/yazi/starship.nix b/home/programs/cli/yazi/starship.nix new file mode 100644 index 0000000..9cdde1e --- /dev/null +++ b/home/programs/cli/yazi/starship.nix @@ -0,0 +1,43 @@ +{ config, ... }: +{ + xdg.configFile = with config.lib.stylix.colors; { + "yazi/star.toml".text = '' + # format = """ + # $hostname\ + # $username\ + # $directory\ + # """ + + format = """ + $directory\ + $git_branch\ + $git_status\ + $git_metrics\ + """ + + [directory] + style = "bold fg:green" + format = "in [$path ]($style)" + truncation_length = 3 + truncation_symbol = "…/" + read_only = '[󰌾]' + read_only_style = 'bold fg:red' + + [git_branch] + style = "bold fg:yellow" + + [git_status] + style = "bold fg:red" + + [git_metrics] + added_style = "bold fg:blue" + deleted_style = "bold fg:red" + + [directory.substitutions] + "Documents" = "󰈙 " + "Downloads" = " " + "Music" = " " + "Pictures" = " " + ''; + }; +} diff --git a/home/programs/cli/yazi/theme.nix b/home/programs/cli/yazi/theme.nix new file mode 100644 index 0000000..7a6813d --- /dev/null +++ b/home/programs/cli/yazi/theme.nix @@ -0,0 +1,619 @@ +{ lib, ... }: +{ + programs.yazi.theme = lib.mkForce { + manager = { + cwd = { fg = "green"; }; + + hovered = { fg = "black"; bg = "blue"; bold = true; }; + preview_hovered = { underline = false; }; + + tab_active = { fg = "red"; bg = "black"; }; + tab_inactive = { fg = "black"; bg = "white"; }; + + border_style = { fg = "black"; }; + + marker_selected = { bg = "cyan"; }; + marker_copied = { bg = "green"; }; + marker_cut = { bg = "yellow"; }; + }; + which = { + cols = 3; + mask = { bg = "black"; }; + }; + filetype = { + rules = [ + { mime = "{audio,video}/*"; fg = "green"; } + { name = "*"; fg = "white"; } + { name = "*/"; fg = "blue"; } + ]; + }; + icon = { + exts = [ + { name = "3gp"; text = ""; fg = "white"; } + { name = "3mf"; text = "󰆧"; fg = "white"; } + { name = "7z"; text = ""; fg = "white"; } + { name = "a"; text = ""; fg = "white"; } + { name = "aac"; text = ""; fg = "white"; } + { name = "ai"; text = ""; fg = "white"; } + { name = "aif"; text = ""; fg = "white"; } + { name = "aiff"; text = ""; fg = "white"; } + { name = "android"; text = ""; fg = "white"; } + { name = "ape"; text = ""; fg = "white"; } + { name = "apk"; text = ""; fg = "white"; } + { name = "app"; text = ""; fg = "white"; } + { name = "applescript"; text = ""; fg = "white"; } + { name = "asc"; text = "󰦝"; fg = "white"; } + { name = "ass"; text = "󰨖"; fg = "white"; } + { name = "astro"; text = ""; fg = "white"; } + { name = "awk"; text = ""; fg = "white"; } + { name = "azcli"; text = ""; fg = "white"; } + { name = "bak"; text = "󰁯"; fg = "white"; } + { name = "bash"; text = ""; fg = "white"; } + { name = "bat"; text = ""; fg = "white"; } + { name = "bazel"; text = ""; fg = "white"; } + { name = "bib"; text = "󱉟"; fg = "white"; } + { name = "bicep"; text = ""; fg = "white"; } + { name = "bicepparam"; text = ""; fg = "white"; } + { name = "bin"; text = ""; fg = "white"; } + { name = "blade.php"; text = ""; fg = "white"; } + { name = "blend"; text = "󰂫"; fg = "white"; } + { name = "blp"; text = "󰺾"; fg = "white"; } + { name = "bmp"; text = ""; fg = "white"; } + { name = "brep"; text = "󰻫"; fg = "white"; } + { name = "bz"; text = ""; fg = "white"; } + { name = "bz2"; text = ""; fg = "white"; } + { name = "bz3"; text = ""; fg = "white"; } + { name = "bzl"; text = ""; fg = "white"; } + { name = "c"; text = ""; fg = "white"; } + { name = "c++"; text = ""; fg = "white"; } + { name = "cache"; text = ""; fg = "white"; } + { name = "cast"; text = ""; fg = "white"; } + { name = "cbl"; text = "⚙"; fg = "white"; } + { name = "cc"; text = ""; fg = "white"; } + { name = "ccm"; text = ""; fg = "white"; } + { name = "cfg"; text = ""; fg = "white"; } + { name = "cjs"; text = ""; fg = "white"; } + { name = "clj"; text = ""; fg = "white"; } + { name = "cljc"; text = ""; fg = "white"; } + { name = "cljd"; text = ""; fg = "white"; } + { name = "cljs"; text = ""; fg = "white"; } + { name = "cmake"; text = ""; fg = "white"; } + { name = "cob"; text = "⚙"; fg = "white"; } + { name = "cobol"; text = "⚙"; fg = "white"; } + { name = "coffee"; text = ""; fg = "white"; } + { name = "conf"; text = ""; fg = "white"; } + { name = "config.ru"; text = ""; fg = "white"; } + { name = "cp"; text = ""; fg = "white"; } + { name = "cpp"; text = ""; fg = "white"; } + { name = "cppm"; text = ""; fg = "white"; } + { name = "cpy"; text = "⚙"; fg = "white"; } + { name = "cr"; text = ""; fg = "white"; } + { name = "crdownload"; text = ""; fg = "white"; } + { name = "cs"; text = "󰌛"; fg = "white"; } + { name = "csh"; text = ""; fg = "white"; } + { name = "cshtml"; text = "󱦗"; fg = "white"; } + { name = "cson"; text = ""; fg = "white"; } + { name = "csproj"; text = "󰪮"; fg = "white"; } + { name = "css"; text = ""; fg = "white"; } + { name = "csv"; text = ""; fg = "white"; } + { name = "cts"; text = ""; fg = "white"; } + { name = "cu"; text = ""; fg = "white"; } + { name = "cue"; text = "󰲹"; fg = "white"; } + { name = "cuh"; text = ""; fg = "white"; } + { name = "cxx"; text = ""; fg = "white"; } + { name = "cxxm"; text = ""; fg = "white"; } + { name = "d"; text = ""; fg = "white"; } + { name = "d.ts"; text = ""; fg = "white"; } + { name = "dart"; text = ""; fg = "white"; } + { name = "db"; text = ""; fg = "white"; } + { name = "dconf"; text = ""; fg = "white"; } + { name = "desktop"; text = ""; fg = "white"; } + { name = "diff"; text = ""; fg = "white"; } + { name = "dll"; text = ""; fg = "white"; } + { name = "doc"; text = "󰈬"; fg = "white"; } + { name = "Dockerfile"; text = "󰡨"; fg = "white"; } + { name = "docx"; text = "󰈬"; fg = "white"; } + { name = "dot"; text = "󱁉"; fg = "white"; } + { name = "download"; text = ""; fg = "white"; } + { name = "drl"; text = ""; fg = "white"; } + { name = "dropbox"; text = ""; fg = "white"; } + { name = "dump"; text = ""; fg = "white"; } + { name = "dwg"; text = "󰻫"; fg = "white"; } + { name = "dxf"; text = "󰻫"; fg = "white"; } + { name = "ebook"; text = ""; fg = "white"; } + { name = "edn"; text = ""; fg = "white"; } + { name = "eex"; text = ""; fg = "white"; } + { name = "ejs"; text = ""; fg = "white"; } + { name = "el"; text = ""; fg = "white"; } + { name = "elc"; text = ""; fg = "white"; } + { name = "elf"; text = ""; fg = "white"; } + { name = "elm"; text = ""; fg = "white"; } + { name = "eln"; text = ""; fg = "white"; } + { name = "env"; text = ""; fg = "white"; } + { name = "eot"; text = ""; fg = "white"; } + { name = "epp"; text = ""; fg = "white"; } + { name = "epub"; text = ""; fg = "white"; } + { name = "erb"; text = ""; fg = "white"; } + { name = "erl"; text = ""; fg = "white"; } + { name = "ex"; text = ""; fg = "white"; } + { name = "exe"; text = ""; fg = "white"; } + { name = "exs"; text = ""; fg = "white"; } + { name = "f#"; text = ""; fg = "white"; } + { name = "f3d"; text = "󰻫"; fg = "white"; } + { name = "f90"; text = "󱈚"; fg = "white"; } + { name = "fbx"; text = "󰆧"; fg = "white"; } + { name = "fcbak"; text = ""; fg = "white"; } + { name = "fcmacro"; text = ""; fg = "white"; } + { name = "fcmat"; text = ""; fg = "white"; } + { name = "fcparam"; text = ""; fg = "white"; } + { name = "fcscript"; text = ""; fg = "white"; } + { name = "fcstd"; text = ""; fg = "white"; } + { name = "fcstd1"; text = ""; fg = "white"; } + { name = "fctb"; text = ""; fg = "white"; } + { name = "fctl"; text = ""; fg = "white"; } + { name = "fdmdownload"; text = ""; fg = "white"; } + { name = "fish"; text = ""; fg = "white"; } + { name = "flac"; text = ""; fg = "white"; } + { name = "flc"; text = ""; fg = "white"; } + { name = "flf"; text = ""; fg = "white"; } + { name = "fnl"; text = ""; fg = "white"; } + { name = "fs"; text = ""; fg = "white"; } + { name = "fsi"; text = ""; fg = "white"; } + { name = "fsscript"; text = ""; fg = "white"; } + { name = "fsx"; text = ""; fg = "white"; } + { name = "gcode"; text = "󰐫"; fg = "white"; } + { name = "gd"; text = ""; fg = "white"; } + { name = "gemspec"; text = ""; fg = "white"; } + { name = "gif"; text = ""; fg = "white"; } + { name = "git"; text = ""; fg = "white"; } + { name = "glb"; text = ""; fg = "white"; } + { name = "gnumakefile"; text = ""; fg = "white"; } + { name = "go"; text = ""; fg = "white"; } + { name = "godot"; text = ""; fg = "white"; } + { name = "gql"; text = ""; fg = "white"; } + { name = "graphql"; text = ""; fg = "white"; } + { name = "gresource"; text = ""; fg = "white"; } + { name = "gv"; text = "󱁉"; fg = "white"; } + { name = "gz"; text = ""; fg = "white"; } + { name = "h"; text = ""; fg = "white"; } + { name = "haml"; text = ""; fg = "white"; } + { name = "hbs"; text = ""; fg = "white"; } + { name = "heex"; text = ""; fg = "white"; } + { name = "hex"; text = ""; fg = "white"; } + { name = "hh"; text = ""; fg = "white"; } + { name = "hpp"; text = ""; fg = "white"; } + { name = "hrl"; text = ""; fg = "white"; } + { name = "hs"; text = ""; fg = "white"; } + { name = "htm"; text = ""; fg = "white"; } + { name = "html"; text = ""; fg = "white"; } + { name = "huff"; text = "󰡘"; fg = "white"; } + { name = "hurl"; text = ""; fg = "white"; } + { name = "hx"; text = ""; fg = "white"; } + { name = "hxx"; text = ""; fg = "white"; } + { name = "ical"; text = ""; fg = "white"; } + { name = "icalendar"; text = ""; fg = "white"; } + { name = "ico"; text = ""; fg = "white"; } + { name = "ics"; text = ""; fg = "white"; } + { name = "ifb"; text = ""; fg = "white"; } + { name = "ifc"; text = "󰻫"; fg = "white"; } + { name = "ige"; text = "󰻫"; fg = "white"; } + { name = "iges"; text = "󰻫"; fg = "white"; } + { name = "igs"; text = "󰻫"; fg = "white"; } + { name = "image"; text = ""; fg = "white"; } + { name = "img"; text = ""; fg = "white"; } + { name = "import"; text = ""; fg = "white"; } + { name = "info"; text = ""; fg = "white"; } + { name = "ini"; text = ""; fg = "white"; } + { name = "ino"; text = ""; fg = "white"; } + { name = "ipynb"; text = ""; fg = "white"; } + { name = "iso"; text = ""; fg = "white"; } + { name = "ixx"; text = ""; fg = "white"; } + { name = "java"; text = ""; fg = "white"; } + { name = "jl"; text = ""; fg = "white"; } + { name = "jpeg"; text = ""; fg = "white"; } + { name = "jpg"; text = ""; fg = "white"; } + { name = "js"; text = ""; fg = "white"; } + { name = "json"; text = ""; fg = "white"; } + { name = "json5"; text = ""; fg = "white"; } + { name = "jsonc"; text = ""; fg = "white"; } + { name = "jsx"; text = ""; fg = "white"; } + { name = "jwmrc"; text = ""; fg = "white"; } + { name = "jxl"; text = ""; fg = "white"; } + { name = "kbx"; text = "󰯄"; fg = "white"; } + { name = "kdb"; text = ""; fg = "white"; } + { name = "kdbx"; text = ""; fg = "white"; } + { name = "kdenlive"; text = ""; fg = "white"; } + { name = "kdenlivetitle"; text = ""; fg = "white"; } + { name = "kicad_dru"; text = ""; fg = "white"; } + { name = "kicad_mod"; text = ""; fg = "white"; } + { name = "kicad_pcb"; text = ""; fg = "white"; } + { name = "kicad_prl"; text = ""; fg = "white"; } + { name = "kicad_pro"; text = ""; fg = "white"; } + { name = "kicad_sch"; text = ""; fg = "white"; } + { name = "kicad_sym"; text = ""; fg = "white"; } + { name = "kicad_wks"; text = ""; fg = "white"; } + { name = "ko"; text = ""; fg = "white"; } + { name = "kpp"; text = ""; fg = "white"; } + { name = "kra"; text = ""; fg = "white"; } + { name = "krz"; text = ""; fg = "white"; } + { name = "ksh"; text = ""; fg = "white"; } + { name = "kt"; text = ""; fg = "white"; } + { name = "kts"; text = ""; fg = "white"; } + { name = "lck"; text = ""; fg = "white"; } + { name = "leex"; text = ""; fg = "white"; } + { name = "less"; text = ""; fg = "white"; } + { name = "lff"; text = ""; fg = "white"; } + { name = "lhs"; text = ""; fg = "white"; } + { name = "lib"; text = ""; fg = "white"; } + { name = "license"; text = ""; fg = "white"; } + { name = "liquid"; text = ""; fg = "white"; } + { name = "lock"; text = ""; fg = "white"; } + { name = "log"; text = "󰌱"; fg = "white"; } + { name = "lrc"; text = "󰨖"; fg = "white"; } + { name = "lua"; text = ""; fg = "white"; } + { name = "luac"; text = ""; fg = "white"; } + { name = "luau"; text = ""; fg = "white"; } + { name = "m"; text = ""; fg = "white"; } + { name = "m3u"; text = "󰲹"; fg = "white"; } + { name = "m3u8"; text = "󰲹"; fg = "white"; } + { name = "m4a"; text = ""; fg = "white"; } + { name = "m4v"; text = ""; fg = "white"; } + { name = "magnet"; text = ""; fg = "white"; } + { name = "makefile"; text = ""; fg = "white"; } + { name = "markdown"; text = ""; fg = "white"; } + { name = "material"; text = "󰔉"; fg = "white"; } + { name = "md"; text = ""; fg = "white"; } + { name = "md5"; text = "󰕥"; fg = "white"; } + { name = "mdx"; text = ""; fg = "white"; } + { name = "mint"; text = "󰌪"; fg = "white"; } + { name = "mjs"; text = ""; fg = "white"; } + { name = "mk"; text = ""; fg = "white"; } + { name = "mkv"; text = ""; fg = "white"; } + { name = "ml"; text = ""; fg = "white"; } + { name = "mli"; text = ""; fg = "white"; } + { name = "mm"; text = ""; fg = "white"; } + { name = "mo"; text = "∞"; fg = "white"; } + { name = "mobi"; text = ""; fg = "white"; } + { name = "mov"; text = ""; fg = "white"; } + { name = "mp3"; text = ""; fg = "white"; } + { name = "mp4"; text = ""; fg = "white"; } + { name = "mpp"; text = ""; fg = "white"; } + { name = "msf"; text = ""; fg = "white"; } + { name = "mts"; text = ""; fg = "white"; } + { name = "mustache"; text = ""; fg = "white"; } + { name = "nfo"; text = ""; fg = "white"; } + { name = "nim"; text = ""; fg = "white"; } + { name = "nix"; text = ""; fg = "white"; } + { name = "nswag"; text = ""; fg = "white"; } + { name = "nu"; text = ">"; fg = "white"; } + { name = "o"; text = ""; fg = "white"; } + { name = "obj"; text = "󰆧"; fg = "white"; } + { name = "ogg"; text = ""; fg = "white"; } + { name = "opus"; text = ""; fg = "white"; } + { name = "org"; text = ""; fg = "white"; } + { name = "otf"; text = ""; fg = "white"; } + { name = "out"; text = ""; fg = "white"; } + { name = "part"; text = ""; fg = "white"; } + { name = "patch"; text = ""; fg = "white"; } + { name = "pck"; text = ""; fg = "white"; } + { name = "pcm"; text = ""; fg = "white"; } + { name = "pdf"; text = ""; fg = "white"; } + { name = "php"; text = ""; fg = "white"; } + { name = "pl"; text = ""; fg = "white"; } + { name = "pls"; text = "󰲹"; fg = "white"; } + { name = "ply"; text = "󰆧"; fg = "white"; } + { name = "pm"; text = ""; fg = "white"; } + { name = "png"; text = ""; fg = "white"; } + { name = "po"; text = ""; fg = "white"; } + { name = "pot"; text = ""; fg = "white"; } + { name = "pp"; text = ""; fg = "white"; } + { name = "ppt"; text = "󰈧"; fg = "white"; } + { name = "prisma"; text = ""; fg = "white"; } + { name = "pro"; text = ""; fg = "white"; } + { name = "ps1"; text = "󰨊"; fg = "white"; } + { name = "psb"; text = ""; fg = "white"; } + { name = "psd"; text = ""; fg = "white"; } + { name = "psd1"; text = "󰨊"; fg = "white"; } + { name = "psm1"; text = "󰨊"; fg = "white"; } + { name = "pub"; text = "󰷖"; fg = "white"; } + { name = "pxd"; text = ""; fg = "white"; } + { name = "pxi"; text = ""; fg = "white"; } + { name = "py"; text = ""; fg = "white"; } + { name = "pyc"; text = ""; fg = "white"; } + { name = "pyd"; text = ""; fg = "white"; } + { name = "pyi"; text = ""; fg = "white"; } + { name = "pyo"; text = ""; fg = "white"; } + { name = "pyx"; text = ""; fg = "white"; } + { name = "qm"; text = ""; fg = "white"; } + { name = "qml"; text = ""; fg = "white"; } + { name = "qrc"; text = ""; fg = "white"; } + { name = "qss"; text = ""; fg = "white"; } + { name = "query"; text = ""; fg = "white"; } + { name = "r"; text = "󰟔"; fg = "white"; } + { name = "rake"; text = ""; fg = "white"; } + { name = "rar"; text = ""; fg = "white"; } + { name = "razor"; text = "󱦘"; fg = "white"; } + { name = "rb"; text = ""; fg = "white"; } + { name = "res"; text = ""; fg = "white"; } + { name = "resi"; text = ""; fg = "white"; } + { name = "rlib"; text = ""; fg = "white"; } + { name = "rmd"; text = ""; fg = "white"; } + { name = "rproj"; text = "󰗆"; fg = "white"; } + { name = "rs"; text = ""; fg = "white"; } + { name = "rss"; text = ""; fg = "white"; } + { name = "sass"; text = ""; fg = "white"; } + { name = "sbt"; text = ""; fg = "white"; } + { name = "sc"; text = ""; fg = "white"; } + { name = "scad"; text = ""; fg = "white"; } + { name = "scala"; text = ""; fg = "white"; } + { name = "scm"; text = "󰘧"; fg = "white"; } + { name = "scss"; text = ""; fg = "white"; } + { name = "sh"; text = ""; fg = "white"; } + { name = "sha1"; text = "󰕥"; fg = "white"; } + { name = "sha224"; text = "󰕥"; fg = "white"; } + { name = "sha256"; text = "󰕥"; fg = "white"; } + { name = "sha384"; text = "󰕥"; fg = "white"; } + { name = "sha512"; text = "󰕥"; fg = "white"; } + { name = "sig"; text = "λ"; fg = "white"; } + { name = "signature"; text = "λ"; fg = "white"; } + { name = "skp"; text = "󰻫"; fg = "white"; } + { name = "sldasm"; text = "󰻫"; fg = "white"; } + { name = "sldprt"; text = "󰻫"; fg = "white"; } + { name = "slim"; text = ""; fg = "white"; } + { name = "sln"; text = ""; fg = "white"; } + { name = "slvs"; text = "󰻫"; fg = "white"; } + { name = "sml"; text = "λ"; fg = "white"; } + { name = "so"; text = ""; fg = "white"; } + { name = "sol"; text = ""; fg = "white"; } + { name = "spec.js"; text = ""; fg = "white"; } + { name = "spec.jsx"; text = ""; fg = "white"; } + { name = "spec.ts"; text = ""; fg = "white"; } + { name = "spec.tsx"; text = ""; fg = "white"; } + { name = "sql"; text = ""; fg = "white"; } + { name = "sqlite"; text = ""; fg = "white"; } + { name = "sqlite3"; text = ""; fg = "white"; } + { name = "srt"; text = "󰨖"; fg = "white"; } + { name = "ssa"; text = "󰨖"; fg = "white"; } + { name = "ste"; text = "󰻫"; fg = "white"; } + { name = "step"; text = "󰻫"; fg = "white"; } + { name = "stl"; text = "󰆧"; fg = "white"; } + { name = "stp"; text = "󰻫"; fg = "white"; } + { name = "strings"; text = ""; fg = "white"; } + { name = "styl"; text = ""; fg = "white"; } + { name = "sub"; text = "󰨖"; fg = "white"; } + { name = "sublime"; text = ""; fg = "white"; } + { name = "suo"; text = ""; fg = "white"; } + { name = "sv"; text = "󰍛"; fg = "white"; } + { name = "svelte"; text = ""; fg = "white"; } + { name = "svg"; text = "󰜡"; fg = "white"; } + { name = "svh"; text = "󰍛"; fg = "white"; } + { name = "swift"; text = ""; fg = "white"; } + { name = "t"; text = ""; fg = "white"; } + { name = "tbc"; text = "󰛓"; fg = "white"; } + { name = "tcl"; text = "󰛓"; fg = "white"; } + { name = "templ"; text = ""; fg = "white"; } + { name = "terminal"; text = ""; fg = "white"; } + { name = "test.js"; text = ""; fg = "white"; } + { name = "test.jsx"; text = ""; fg = "white"; } + { name = "test.ts"; text = ""; fg = "white"; } + { name = "test.tsx"; text = ""; fg = "white"; } + { name = "tex"; text = ""; fg = "white"; } + { name = "tf"; text = ""; fg = "white"; } + { name = "tfvars"; text = ""; fg = "white"; } + { name = "tgz"; text = ""; fg = "white"; } + { name = "tmux"; text = ""; fg = "white"; } + { name = "toml"; text = ""; fg = "white"; } + { name = "torrent"; text = ""; fg = "white"; } + { name = "tres"; text = ""; fg = "white"; } + { name = "ts"; text = ""; fg = "white"; } + { name = "tscn"; text = ""; fg = "white"; } + { name = "tsconfig"; text = ""; fg = "white"; } + { name = "tsx"; text = ""; fg = "white"; } + { name = "ttf"; text = ""; fg = "white"; } + { name = "twig"; text = ""; fg = "white"; } + { name = "txt"; text = "󰈙"; fg = "white"; } + { name = "txz"; text = ""; fg = "white"; } + { name = "typoscript"; text = ""; fg = "white"; } + { name = "ui"; text = ""; fg = "white"; } + { name = "v"; text = "󰍛"; fg = "white"; } + { name = "vala"; text = ""; fg = "white"; } + { name = "vh"; text = "󰍛"; fg = "white"; } + { name = "vhd"; text = "󰍛"; fg = "white"; } + { name = "vhdl"; text = "󰍛"; fg = "white"; } + { name = "vim"; text = ""; fg = "white"; } + { name = "vsh"; text = ""; fg = "white"; } + { name = "vsix"; text = ""; fg = "white"; } + { name = "vue"; text = ""; fg = "white"; } + { name = "wasm"; text = ""; fg = "white"; } + { name = "wav"; text = ""; fg = "white"; } + { name = "webm"; text = ""; fg = "white"; } + { name = "webmanifest"; text = ""; fg = "white"; } + { name = "webp"; text = ""; fg = "white"; } + { name = "webpack"; text = "󰜫"; fg = "white"; } + { name = "wma"; text = ""; fg = "white"; } + { name = "woff"; text = ""; fg = "white"; } + { name = "woff2"; text = ""; fg = "white"; } + { name = "wrl"; text = "󰆧"; fg = "white"; } + { name = "wrz"; text = "󰆧"; fg = "white"; } + { name = "x"; text = ""; fg = "white"; } + { name = "xaml"; text = "󰙳"; fg = "white"; } + { name = "xcf"; text = ""; fg = "white"; } + { name = "xcplayground"; text = ""; fg = "white"; } + { name = "xcstrings"; text = ""; fg = "white"; } + { name = "xls"; text = "󰈛"; fg = "white"; } + { name = "xlsx"; text = "󰈛"; fg = "white"; } + { name = "xm"; text = ""; fg = "white"; } + { name = "xml"; text = "󰗀"; fg = "white"; } + { name = "xpi"; text = ""; fg = "white"; } + { name = "xul"; text = ""; fg = "white"; } + { name = "xz"; text = ""; fg = "white"; } + { name = "yaml"; text = ""; fg = "white"; } + { name = "yml"; text = ""; fg = "white"; } + { name = "zig"; text = ""; fg = "white"; } + { name = "zip"; text = ""; fg = "white"; } + { name = "zsh"; text = ""; fg = "white"; } + { name = "zst"; text = ""; fg = "white"; } + ]; + files = [ + { name = "gulpfile.js"; text = ""; fg = "white"; } + { name = ".babelrc"; text = ""; fg = "white"; } + { name = "copying.lesser"; text = ""; fg = "white"; } + { name = ".npmrc"; text = ""; fg = "white"; } + { name = "docker-compose.yml"; text = "󰡨"; fg = "white"; } + { name = "svelte.config.js"; text = ""; fg = "white"; } + { name = "copying"; text = ""; fg = "white"; } + { name = "prettier.config.ts"; text = ""; fg = "white"; } + { name = "gruntfile.babel.js"; text = ""; fg = "white"; } + { name = ".SRCINFO"; text = "󰣇"; fg = "white"; } + { name = ".xinitrc"; text = ""; fg = "white"; } + { name = "docker-compose.yaml"; text = "󰡨"; fg = "white"; } + { name = "nuxt.config.ts"; text = "󱄆"; fg = "white"; } + { name = "build"; text = ""; fg = "white"; } + { name = ".editorconfig"; text = ""; fg = "white"; } + { name = "nuxt.config.mjs"; text = "󱄆"; fg = "white"; } + { name = ".gitlab-ci.yml"; text = ""; fg = "white"; } + { name = "PKGBUILD"; text = ""; fg = "white"; } + { name = ".bash_profile"; text = ""; fg = "white"; } + { name = ".bashrc"; text = ""; fg = "white"; } + { name = "compose.yml"; text = "󰡨"; fg = "white"; } + { name = "eslint.config.cjs"; text = ""; fg = "white"; } + { name = "go.mod"; text = ""; fg = "white"; } + { name = ".mailmap"; text = "󰊢"; fg = "white"; } + { name = "gtkrc"; text = ""; fg = "white"; } + { name = "go.work"; text = ""; fg = "white"; } + { name = "justfile"; text = ""; fg = "white"; } + { name = "kritadisplayrc"; text = ""; fg = "white"; } + { name = "commitlint.config.js"; text = "󰜘"; fg = "white"; } + { name = ".env"; text = ""; fg = "white"; } + { name = "PrusaSlicerGcodeViewer.ini"; text = ""; fg = "white"; } + { name = "r"; text = "󰟔"; fg = "white"; } + { name = "license"; text = ""; fg = "white"; } + { name = ".gitignore"; text = ""; fg = "white"; } + { name = "tailwind.config.js"; text = "󱏿"; fg = "white"; } + { name = ".prettierrc.yml"; text = ""; fg = "white"; } + { name = ".zprofile"; text = ""; fg = "white"; } + { name = ".zshenv"; text = ""; fg = "white"; } + { name = "xmonad.hs"; text = ""; fg = "white"; } + { name = ".eslintignore"; text = ""; fg = "white"; } + { name = "tsconfig.json"; text = ""; fg = "white"; } + { name = ".prettierrc.json5"; text = ""; fg = "white"; } + { name = ".ds_store"; text = ""; fg = "white"; } + { name = "gulpfile.coffee"; text = ""; fg = "white"; } + { name = "R"; text = "󰟔"; fg = "white"; } + { name = ".zshrc"; text = ""; fg = "white"; } + { name = ".prettierrc.toml"; text = ""; fg = "white"; } + { name = ".gvimrc"; text = ""; fg = "white"; } + { name = ".xsession"; text = ""; fg = "white"; } + { name = ".justfile"; text = ""; fg = "white"; } + { name = ".gitconfig"; text = ""; fg = "white"; } + { name = "gradle-wrapper.properties"; text = ""; fg = "white"; } + { name = "ionic.config.json"; text = ""; fg = "white"; } + { name = "cantorrc"; text = ""; fg = "white"; } + { name = ".gleam"; text = ""; fg = "white"; } + { name = "package-lock.json"; text = ""; fg = "white"; } + { name = "package.json"; text = ""; fg = "white"; } + { name = "hyprland.conf"; text = ""; fg = "white"; } + { name = "gulpfile.babel.js"; text = ""; fg = "white"; } + { name = ".nvmrc"; text = ""; fg = "white"; } + { name = ".prettierignore"; text = ""; fg = "white"; } + { name = "ext_typoscript_setup.txt"; text = ""; fg = "white"; } + { name = "QtProject.conf"; text = ""; fg = "white"; } + { name = "avif"; text = ""; fg = "white"; } + { name = "mix.lock"; text = ""; fg = "white"; } + { name = "build.gradle"; text = ""; fg = "white"; } + { name = "gemfile$"; text = ""; fg = "white"; } + { name = ".vimrc"; text = ""; fg = "white"; } + { name = "i18n.config.ts"; text = "󰗊"; fg = "white"; } + { name = "gulpfile.ts"; text = ""; fg = "white"; } + { name = "build.zig.zon"; text = ""; fg = "white"; } + { name = "checkhealth"; text = "󰓙"; fg = "white"; } + { name = "xmobarrc"; text = ""; fg = "white"; } + { name = "_vimrc"; text = ""; fg = "white"; } + { name = ".luaurc"; text = ""; fg = "white"; } + { name = "kdenlive-layoutsrc"; text = ""; fg = "white"; } + { name = "gradlew"; text = ""; fg = "white"; } + { name = "xsettingsd.conf"; text = ""; fg = "white"; } + { name = "vlcrc"; text = "󰕼"; fg = "white"; } + { name = "xorg.conf"; text = ""; fg = "white"; } + { name = "xmobarrc.hs"; text = ""; fg = "white"; } + { name = "workspace"; text = ""; fg = "white"; } + { name = ".gitattributes"; text = ""; fg = "white"; } + { name = "favicon.ico"; text = ""; fg = "white"; } + { name = "go.sum"; text = ""; fg = "white"; } + { name = "pom.xml"; text = ""; fg = "white"; } + { name = "webpack"; text = "󰜫"; fg = "white"; } + { name = "vagrantfile$"; text = ""; fg = "white"; } + { name = "unlicense"; text = ""; fg = "white"; } + { name = "tmux.conf.local"; text = ""; fg = "white"; } + { name = "settings.gradle"; text = ""; fg = "white"; } + { name = ".dockerignore"; text = "󰡨"; fg = "white"; } + { name = "sym-lib-table"; text = ""; fg = "white"; } + { name = "_gvimrc"; text = ""; fg = "white"; } + { name = "kdenliverc"; text = ""; fg = "white"; } + { name = "kdeglobals"; text = ""; fg = "white"; } + { name = ".prettierrc.yaml"; text = ""; fg = "white"; } + { name = "rmd"; text = ""; fg = "white"; } + { name = "tailwind.config.mjs"; text = "󱏿"; fg = "white"; } + { name = "sxhkdrc"; text = ""; fg = "white"; } + { name = "robots.txt"; text = "󰚩"; fg = "white"; } + { name = "tailwind.config.ts"; text = "󱏿"; fg = "white"; } + { name = "prettier.config.mjs"; text = ""; fg = "white"; } + { name = "mpv.conf"; text = ""; fg = "white"; } + { name = "py.typed"; text = ""; fg = "white"; } + { name = "PrusaSlicer.ini"; text = ""; fg = "white"; } + { name = "procfile"; text = ""; fg = "white"; } + { name = "rakefile"; text = ""; fg = "white"; } + { name = "kritarc"; text = ""; fg = "white"; } + { name = ".Xresources"; text = ""; fg = "white"; } + { name = "prettier.config.js"; text = ""; fg = "white"; } + { name = "commitlint.config.ts"; text = "󰜘"; fg = "white"; } + { name = "weston.ini"; text = ""; fg = "white"; } + { name = "eslint.config.js"; text = ""; fg = "white"; } + { name = "cmakelists.txt"; text = ""; fg = "white"; } + { name = ".git-blame-ignore-revs"; text = ""; fg = "white"; } + { name = "config"; text = ""; fg = "white"; } + { name = "nuxt.config.cjs"; text = "󱄆"; fg = "white"; } + { name = "node_modules"; text = ""; fg = "white"; } + { name = "makefile"; text = ""; fg = "white"; } + { name = "lxqt.conf"; text = ""; fg = "white"; } + { name = "i18n.config.js"; text = "󰗊"; fg = "white"; } + { name = "FreeCAD.conf"; text = ""; fg = "white"; } + { name = "prettier.config.cjs"; text = ""; fg = "white"; } + { name = "tmux.conf"; text = ""; fg = "white"; } + { name = "kalgebrarc"; text = ""; fg = "white"; } + { name = "i3status.conf"; text = ""; fg = "white"; } + { name = ".settings.json"; text = ""; fg = "white"; } + { name = "containerfile"; text = "󰡨"; fg = "white"; } + { name = "i3blocks.conf"; text = ""; fg = "white"; } + { name = "lxde-rc.xml"; text = ""; fg = "white"; } + { name = "gradle.properties"; text = ""; fg = "white"; } + { name = "hypridle.conf"; text = ""; fg = "white"; } + { name = "gruntfile.ts"; text = ""; fg = "white"; } + { name = "gruntfile.js"; text = ""; fg = "white"; } + { name = "dockerfile"; text = "󰡨"; fg = "white"; } + { name = "groovy"; text = ""; fg = "white"; } + { name = "hyprlock.conf"; text = ""; fg = "white"; } + { name = ".prettierrc"; text = ""; fg = "white"; } + { name = "gnumakefile"; text = ""; fg = "white"; } + { name = "commit_editmsg"; text = ""; fg = "white"; } + { name = "fp-lib-table"; text = ""; fg = "white"; } + { name = "fp-info-cache"; text = ""; fg = "white"; } + { name = "eslint.config.ts"; text = ""; fg = "white"; } + { name = "nuxt.config.js"; text = "󱄆"; fg = "white"; } + { name = "platformio.ini"; text = ""; fg = "white"; } + { name = ".nuxtrc"; text = "󱄆"; fg = "white"; } + { name = "gruntfile.coffee"; text = ""; fg = "white"; } + { name = "eslint.config.mjs"; text = ""; fg = "white"; } + { name = "compose.yaml"; text = "󰡨"; fg = "white"; } + { name = "bspwmrc"; text = ""; fg = "white"; } + { name = "brewfile"; text = ""; fg = "white"; } + { name = ".eslintrc"; text = ""; fg = "white"; } + { name = ".gtkrc-2.0"; text = ""; fg = "white"; } + { name = ".Xauthority"; text = ""; fg = "white"; } + { name = ".prettierrc.json"; text = ""; fg = "white"; } + { name = ".npmignore"; text = ""; fg = "white"; } + { name = ".gitmodules"; text = ""; fg = "white"; } + ]; + }; + }; +} diff --git a/home/programs/cli/zoxide/default.nix b/home/programs/cli/zoxide/default.nix new file mode 100644 index 0000000..0412fd9 --- /dev/null +++ b/home/programs/cli/zoxide/default.nix @@ -0,0 +1,9 @@ +{ pkgs, ... }: +{ + programs.zoxide = { + enable = true; + enableFishIntegration = true; + enableZshIntegration = true; + options = [ "--cmd cd" ]; + }; +} diff --git a/home/programs/custom-pkgs/anicliru/anicli-api.nix b/home/programs/custom-pkgs/anicliru/anicli-api.nix new file mode 100644 index 0000000..51f675b --- /dev/null +++ b/home/programs/custom-pkgs/anicliru/anicli-api.nix @@ -0,0 +1,35 @@ +{ lib, fetchPypi, python3Packages, python3 }: + +python3Packages.buildPythonApplication rec{ + pname = "anicli_api"; + version = "0.6.11"; + pyproject = true; + + src = fetchPypi { + pname = "anicli_api"; + inherit version; + hash = "sha256-1jfPl+Vh7c4zWjQJ/qdvFOhXBvVTX4iqShxoMtbN6j4="; + }; + + build-system = with python3Packages; [ + poetry-core + ]; + + dependencies = with python3Packages; [ + ( python3.withPackages ( ps: with ps; [ httpx ] ++ httpx.optional-dependencies.http2 ) ) + ( pkgs.callPackage ./chompjs.nix { } ) + attrs + parsel + tqdm + ]; + + dontCheckRuntimeDeps = true; + + meta = with lib; { + description = "anicli-api"; + homepage = "https://github.com/vypivshiy/anicli-api"; # DEAD + maintainers = with maintainers; [ DADA30000 azikx ]; + mainProgram = "anicli-api"; + platforms = platforms.unix; + }; +} diff --git a/home/programs/custom-pkgs/anicliru/anicli-ru.nix b/home/programs/custom-pkgs/anicliru/anicli-ru.nix new file mode 100644 index 0000000..4c038e6 --- /dev/null +++ b/home/programs/custom-pkgs/anicliru/anicli-ru.nix @@ -0,0 +1,33 @@ +{ lib, pkgs , fetchPypi, python3Packages }: + +python3Packages.buildPythonApplication rec{ + pname = "ani-cli-ru"; + version = "5.0.12"; + pyproject = true; + + src = fetchPypi { + pname = "anicli_ru"; + inherit version; + hash = "sha256-s8uI0ch+SPqthHy+d0jcB6o5/Zqx89JHM68Q00nwCFA="; + }; + + build-system = with python3Packages; [ + hatchling + setuptools + ]; + + dependencies = [ + python3Packages.hatchling + (pkgs.callPackage ./eggella.nix { }) + (pkgs.callPackage ./anicli-api.nix { }) + ]; + + meta = with lib; { + description = "Script to watch anime from terminal with russian translation, written in python."; + homepage = "https://github.com/vypivshiy/ani-cli-ru"; # DEAD + license = with licenses; [ gpl3Plus ]; + maintainers = with maintainers; [ DADA30000 azikx ]; + mainProgram = "anicli-ru"; + platforms = platforms.unix; + }; +} diff --git a/home/programs/custom-pkgs/anicliru/chompjs.nix b/home/programs/custom-pkgs/anicliru/chompjs.nix new file mode 100644 index 0000000..5d28140 --- /dev/null +++ b/home/programs/custom-pkgs/anicliru/chompjs.nix @@ -0,0 +1,30 @@ +{ lib, pkgs, fetchPypi, python3Packages }: + +python3Packages.buildPythonApplication rec{ + pname = "chompjs"; + version = "1.3.0"; + pyproject = true; + + src = fetchPypi { + pname = "chompjs"; + inherit version; + hash = "sha256-isCzF1XpOTSPsq8cwBw1fbUMhU+j1QbOeSGPwV8FaGg="; + }; + + build-system = with python3Packages; [ + setuptools + ]; + + dependencies = with python3Packages; [ + setuptools + ]; + + meta = with lib; { + description = "chompjs"; + homepage = "https://github.com/Nykakin/chompjs"; + license = with licenses; [ mit ]; + maintainers = with maintainers; [ DADA30000 ]; + mainProgram = "chompjs"; + platforms = platforms.unix; + }; +} diff --git a/home/programs/custom-pkgs/anicliru/eggella.nix b/home/programs/custom-pkgs/anicliru/eggella.nix new file mode 100644 index 0000000..951502c --- /dev/null +++ b/home/programs/custom-pkgs/anicliru/eggella.nix @@ -0,0 +1,32 @@ +{ lib, fetchPypi, python3Packages }: + +python3Packages.buildPythonApplication rec{ + pname = "eggella"; + version = "0.1.7"; + pyproject = true; + + src = fetchPypi { + pname = "eggella"; + inherit version; + hash = "sha256-8Vo39BePA86wcLKs/F+u2N7tpIpPrEyEPp3POszy050="; + }; + + build-system = with python3Packages; [ + hatchling + setuptools + ]; + + dependencies = [ + python3Packages.prompt-toolkit + python3Packages.rich + python3Packages.typer + ]; + + meta = with lib; { + description = "Framework for easy creating REPL applications."; + homepage = "https://github.com/vypivshiy/eggella"; # DEAD + maintainers = with maintainers; [ DADA30000 azikx ]; + mainProgram = "eggella"; + platforms = platforms.unix; + }; +} diff --git a/home/programs/custom-pkgs/default.nix b/home/programs/custom-pkgs/default.nix new file mode 100644 index 0000000..8e00f79 --- /dev/null +++ b/home/programs/custom-pkgs/default.nix @@ -0,0 +1,8 @@ +{ pkgs, ... }: +{ + home.packages = with pkgs; [ + (callPackage ./anicliru/anicli-ru.nix { }) + (callPackage ./torrserver/default.nix { }) + # (callPackage ./termdash/default.nix { }) + ]; +} diff --git a/home/programs/custom-pkgs/femto/default.nix b/home/programs/custom-pkgs/femto/default.nix new file mode 100644 index 0000000..aba77c9 --- /dev/null +++ b/home/programs/custom-pkgs/femto/default.nix @@ -0,0 +1,24 @@ +{ lib, fetchFromGitHub, rustPlatform }: + +rustPlatform.buildRustPackage rec { + pname = "femto"; + version = "12.1.1"; + + src = fetchFromGitHub { + owner = "frapa"; + repo = pname; + rev = "922c54ecd4a4a6995fcc71ac9afbdbf70906f201"; + hash = "sha256-oeXRqE1ZjLYZUVFp4nx4wP1+om1raSP8FxW7R+ODi80="; + }; + + cargoHash = lib.fakeHash; + cargoSha256 = lib.fakeSha256; + sourceRoot = "source/workspace-a"; + + meta = { + description = "Tiny text editor"; + homepage = "https://github.com/frapa/femto"; + license = lib.licenses.mit; + maintainers = [ "azikx" ]; + }; +} diff --git a/home/programs/custom-pkgs/termdash/default.nix b/home/programs/custom-pkgs/termdash/default.nix new file mode 100644 index 0000000..95da7b9 --- /dev/null +++ b/home/programs/custom-pkgs/termdash/default.nix @@ -0,0 +1,30 @@ +{ lib, stdenv, fetchurl, autoPatchelfHook }: +let + version = "0.20.0"; + hash = "sha256-WDygG9aGnD20nGxtG0t+T2KEwbJ+fZ0uRaCndirrsXI="; +in +stdenv.mkDerivation { + name = "termdash"; + # dontUnpack = true; + + src = fetchurl { + url = "https://github.com/mum4k/termdash/archive/refs/tags/v${version}.tar.gz"; + sha256 = "${hash}"; + }; + + nativeBuildInputs = [ autoPatchelfHook ]; + + installPhase = '' + mkdir -p $out/bin + cp $src $out/bin/termdash + chmod +x $out/bin/termdash + ''; + + meta = with lib; { + description = "termdash"; + homepage = "https://github.com/mum4k/termdash"; + license = licenses.unlicense; + meta.platforms = platforms.all; + mainProgram = "termdash"; + }; +} diff --git a/home/programs/custom-pkgs/tgt/tdlib.nix b/home/programs/custom-pkgs/tgt/tdlib.nix new file mode 100644 index 0000000..86c9acc --- /dev/null +++ b/home/programs/custom-pkgs/tgt/tdlib.nix @@ -0,0 +1,31 @@ +{ lib, pkgs, rustPlatform, ... }: rustPlatform.buildRustPackage rec { + pname = "tgt"; + version = "1.0.0"; + + src = pkgs.fetchFromGitHub { + owner = "FedericoBruzzone"; + repo = "${pname}"; + rev = "0d30106e34c7fd0ead4f788d62b6b1dc507b6a02"; + hash = "sha256-VQ8JNtLT+UMTAkek9pJ8fqXUW+E6s4XGwJ9rwqwASIQ="; + }; + + LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.tdlib ]; + RUST_BACKTRACE = 1; + + buildFeatures = [ "download-tdlib" ]; + + nativeBuildInputs = with pkgs; [ pkg-config openssl tdlib ]; + buildInputs = with pkgs; [ pkg-config openssl tdlib ]; + + cargoHash = "sha256-O3KTYHe8f2ij2FV5gH4myafPzkgA/1sX90GYO/GxUbE="; + + meta = with lib; { + description = "Terminal client for Telegram"; + homepage = "https://github.com/FedericoBruzzone/tgt"; + changelog = "https://github.com/FedericoBruzzone/tgt/releases/tag/v${version}"; + license = licenses.mit; + maintainers = with maintainers; [ somokill ]; + main_program = "tgt"; + }; +} + diff --git a/home/programs/custom-pkgs/tgt/tgt.nix b/home/programs/custom-pkgs/tgt/tgt.nix new file mode 100644 index 0000000..59eb6c1 --- /dev/null +++ b/home/programs/custom-pkgs/tgt/tgt.nix @@ -0,0 +1,30 @@ +{ lib, pkgs, rustPlatform, ... }: rustPlatform.buildRustPackage rec { + pname = "tgt"; + version = "1.0.0"; + + src = pkgs.fetchFromGitHub { + owner = "FedericoBruzzone"; + repo = "${pname}"; + rev = "0d30106e34c7fd0ead4f788d62b6b1dc507b6a02"; + hash = "sha256-VQ8JNtLT+UMTAkek9pJ8fqXUW+E6s4XGwJ9rwqwASIQ="; + }; + + # LD_LIBRARY_PATH = lib.makeLibraryPath [ pkgs.tdlib ]; + RUST_BACKTRACE = 1; + LOCAL_TDLIB_PATH = "${pkgs.tdlib}/lib"; + # buildFeatures = [ "local-tdlib" ]; + + nativeBuildInputs = with pkgs; [ pkg-config openssl tdlib ]; + buildInputs = with pkgs; [ pkg-config openssl tdlib ]; + + cargoHash = "sha256-O3KTYHe8f2ij2FV5gH4myafPzkgA/1sX90GYO/GxUbE="; + + meta = with lib; { + description = "Terminal client for Telegram"; + homepage = "https://github.com/FedericoBruzzone/tgt"; + changelog = "https://github.com/FedericoBruzzone/tgt/releases/tag/v${version}"; + license = licenses.mit; + maintainers = with maintainers; [ somokill azikx ]; + main_program = "tgt"; + }; +} diff --git a/home/programs/custom-pkgs/torrserver/default.nix b/home/programs/custom-pkgs/torrserver/default.nix new file mode 100644 index 0000000..d45f8ae --- /dev/null +++ b/home/programs/custom-pkgs/torrserver/default.nix @@ -0,0 +1,30 @@ +{ lib, stdenv, fetchurl, autoPatchelfHook }: +let + version = "134"; + hash = "sha256-WDygG9aGnD20nGxtG0t+T2KEwbJ+fZ0uRaCndirrsXI="; +in +stdenv.mkDerivation { + name = "torrserver"; + dontUnpack = true; + + src = fetchurl { + url = "https://github.com/YouROK/TorrServer/releases/download/MatriX.${version}/TorrServer-linux-amd64"; + sha256 = "${hash}"; + }; + + nativeBuildInputs = [ autoPatchelfHook ]; + + installPhase = '' + mkdir -p $out/bin + cp $src $out/bin/torrserver + chmod +x $out/bin/torrserver + ''; + + meta = with lib; { + description = "Torrserver"; + homepage = "https://github.com/yt-dlp/yt-dlp"; + license = licenses.unlicense; + meta.platforms = platforms.all; + mainProgram = "torrserver"; + }; +} diff --git a/home/programs/default.nix b/home/programs/default.nix new file mode 100644 index 0000000..c3cc195 --- /dev/null +++ b/home/programs/default.nix @@ -0,0 +1,9 @@ +{ + imports = [ + ./custom-pkgs + ./shells + ./misc + ./cli + ./gui + ]; +} diff --git a/home/programs/gui/ayugram/default.nix b/home/programs/gui/ayugram/default.nix new file mode 100644 index 0000000..44cde06 --- /dev/null +++ b/home/programs/gui/ayugram/default.nix @@ -0,0 +1,108 @@ +{ ... }: +{ + home.file = { + ".local/share/AyuGramDesktop/tdata/ayu_settings.json".text = '' + { + "appIcon": "chibi2", + "channelBottomButton": 0, + "collapseSimilarChannels": true, + "deletedMark": "deleted", + "disableAds": true, + "disableCustomBackgrounds": false, + "disableNotificationsDelay": false, + "disableStories": false, + "editedMark": "edited", + "gifConfirmation": false, + "hideAllChatsFolder": true, + "hideFromBlocked": false, + "hideNotificationBadge": false, + "hideNotificationCounters": false, + "hideSimilarChannels": false, + "increaseWebviewHeight": false, + "increaseWebviewWidth": false, + "localPremium": true, + "markReadAfterAction": true, + "monoFont": "JetBrainsMono Nerd Font Mono", + "recentStickersCount": 40, + "saveDeletedMessages": true, + "saveMessagesHistory": true, + "sendOfflinePacketAfterOnline": false, + "sendOnlinePackets": true, + "sendReadMessages": true, + "sendReadStories": false, + "sendUploadProgress": true, + "showGhostToggleInDrawer": true, + "showGhostToggleInTray": true, + "showHideMessageInContextMenu": 0, + "showLReadToggleInDrawer": true, + "showMessageDetailsInContextMenu": 2, + "showMessageSeconds": false, + "showMessageShot": true, + "showPeerId": 2, + "showReactionsPanelInContextMenu": 1, + "showSReadToggleInDrawer": true, + "showStreamerToggleInDrawer": false, + "showStreamerToggleInTray": false, + "showUserMessagesInContextMenu": 2, + "showViewsPanelInContextMenu": 1, + "simpleQuotesAndReplies": true, + "spoofWebviewAsAndroid": false, + "stickerConfirmation": false, + "useScheduledMessages": false, + "voiceConfirmation": false + } + ''; + ".local/share/AyuGramDesktop/tdata/shortcuts-custom.json".text = '' + [ + { + "command": "quit_telegram", + "keys": "alt+q" + }, + { + "command": "folder1", + "keys": "alt+1" + }, + { + "command": "folder2", + "keys": "alt+2" + }, + { + "command": "folder3", + "keys": "alt+3" + }, + { + "command": "show_archive", + "keys": "alt+0" + }, + { + "command": "search", + "keys": "alt+/" + }, + { + "command": "show_contacts", + "keys": "alt+g" + }, + { + "command": "next_chat", + "keys": "alt+j" + }, + { + "command": "previous_chat", + "keys": "alt+k" + }, + { + "command": "next_folder", + "keys": "alt+l" + }, + { + "command": "previous_folder", + "keys": "alt+h" + }, + { + "command": "media_playpause", + "keys": "alt+p" + } + ] + ''; + }; +} diff --git a/home/programs/gui/default.nix b/home/programs/gui/default.nix new file mode 100644 index 0000000..a1725a6 --- /dev/null +++ b/home/programs/gui/default.nix @@ -0,0 +1,13 @@ +{ + imports = [ + ./spotify + ./obs-studio + ./ayugram + ./firefox + ./qbittorrent + ./mpv + ./swayimg + + ./pkgs.nix + ]; +} diff --git a/home/programs/gui/firefox/default.nix b/home/programs/gui/firefox/default.nix new file mode 100644 index 0000000..7f69ba8 --- /dev/null +++ b/home/programs/gui/firefox/default.nix @@ -0,0 +1,67 @@ +{ pkgs, inputs, ... }: +{ + imports = [ + ./user + + ./settings.nix + ./search.nix + ]; + programs.firefox = { + enable = true; + languagePacks = [ "ru" ]; + profiles.dragora = { + id = 0; + name = "megamozg"; + isDefault = true; + extensions = with inputs.firefox-addons.packages."x86_64-linux"; [ + #VERY IMPORTANT + omnisearch + ublock-origin + sponsorblock + darkreader + vimium-c + newtab-adapter + censor-tracker + + # MISC + tabcenter-reborn + firefox-color + stylus + translate-web-pages + ]; + }; + policies = { + CaptivePortal = false; + DisableFirefoxStudies = true; + DisablePocket = true; + DisableTelemetry = true; + # DisableFirefoxAccounts = true; + DisableFormHistory = true; + DisplayBookmarksToolbar = false; + DontCheckDefaultBrowser = true; + DisableProfileRefresh = true; + PromptForDownloadLocation = false; + NetworkPrediction = false; + showSearchBar = true; + DisableSetDesktopBackground = true; + LegacyProfiles = true; + ManualAppUpdateOnly = true; + DisableFirefoxScreenshots = true; + HardwareAcceleration = true; + FirefoxHome = { + Pocket = false; + Snippets = false; + }; + SanitizeOnShutdown = { + Cache = true; + History = false; + Cookies = false; + Downloads = true; + FormData = true; + Sessions = true; + OfflineApps = true; + }; + PasswordManagerEnabled = true; + }; + }; +} diff --git a/home/programs/gui/firefox/search.nix b/home/programs/gui/firefox/search.nix new file mode 100644 index 0000000..71ee1af --- /dev/null +++ b/home/programs/gui/firefox/search.nix @@ -0,0 +1,27 @@ +{ pkgs, ... }: +{ + programs.firefox.profiles.dragora = { + search = { + force = true; + default = "Google"; + engines = { + "Nix Packages" = { + urls = [{ + template = "https://search.nixos.org/packages?channel=unstable"; + params = [ + { name = "type"; value = "packages"; } + { name = "query"; value = "{searchTerms}"; } + ]; + }]; + icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; + definedAliases = [ "@np" ]; + }; + + "Bing".metaData.hidden = true; + "DuckDuckGo".metaData.hidden = true; + "Wikipedia (en)".metaData.hidden = true; + "Google".metaData.alias = "@g"; + }; + }; + }; +} diff --git a/home/programs/gui/firefox/settings.nix b/home/programs/gui/firefox/settings.nix new file mode 100644 index 0000000..d747260 --- /dev/null +++ b/home/programs/gui/firefox/settings.nix @@ -0,0 +1,165 @@ +{ ... }: +{ + programs.firefox.profiles.dragora.settings = { + # OTHER + "layers.acceleration.force-enabled" = true; + "gfx.webrender.all" = true; + "svg.context-properties.content.enabled" = true; + "ui.key.menuAccessKeyFocuses" = false; + + # FASTFOX + "content.notify.interval" = 100000; + "gfx.canvas.accelerated.cache-items" = 4096; + "gfx.canvas.accelerated.cache-size" = 512; + "gfx.content.skia-font-cache-size" = 20; + "browser.cache.jsbc_compression_level" = 3; + "media.memory_cache_max_size" = 65536; + "media.cache_readahead_limit" = 7200; + "media.cache_resume_threshold" = 3600; + "image.mem.decode_bytes_at_a_time" = 32768; + "network.http.max-connections" = 1800; + "network.http.max-persistent-connections-per-server" = 10; + "network.http.max-urgent-start-excessive-connections-per-host" = 5; + "network.http.pacing.requests.enabled" = false; + "network.dnsCacheExpiration" = 3600; + "network.ssl_tokens_cache_capacity" = 10240; + "network.dns.disablePrefetch" = true; + "network.dns.disablePrefetchFromHTTPS" = true; + "network.prefetch-next" = false; + "network.predictor.enabled" = false; + "network.predictor.enable-prefetch" = false; + "layout.css.grid-template-masonry-value.enabled" =true; + "dom.enable_web_task_scheduling" = true; + "dom.security.sanitizer.enabled" =true; + + # SECUREFOX + "browser.contentblocking.category" = "strict"; + "urlclassifier.trackingSkipURLs" = "*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com"; + "urlclassifier.features.socialtracking.skipURLs" = "*.instagram.com, *.twitter.com, *.twimg.com"; + "network.cookie.sameSite.noneRequiresSecure" = true; + "browser.download.start_downloads_in_tmp_dir" = true; + "browser.helperApps.deleteTempFileOnExit" = true; + "browser.uitour.enabled" = false; + "privacy.globalprivacycontrol.enabled" = true; + "security.OCSP.enabled" = 0; + "security.remote_settings.crlite_filters.enabled" = true; + "security.pki.crlite_mode" = 2; + "security.ssl.treat_unsafe_negotiation_as_broken" = true; + "browser.xul.error_pages.expert_bad_cert" = true; + "security.tls.enable_0rtt_data" = false; + "browser.privatebrowsing.forceMediaMemoryCache" = true; + "browser.sessionstore.interval" = 60000; + "privacy.history.custom" = true; + "browser.urlbar.trimHttps" = true; + "browser.urlbar.untrimOnUserInteraction.featureGate" = true; + "browser.search.separatePrivateDefault.ui.enabled" = true; + "browser.urlbar.update2.engineAliasRefresh" = true; + "browser.search.suggest.enabled" = false; + "browser.urlbar.quicksuggest.enabled" = false; + "browser.urlbar.suggest.quicksuggest.sponsored" = false; + "browser.urlbar.suggest.quicksuggest.nonsponsored" = false; + "browser.urlbar.groupLabels.enabled" = false; + "browser.formfill.enable" = false; + "security.insecure_connection_text.enabled" = true; + "security.insecure_connection_text.pbmode.enabled" = true; + "network.IDN_show_punycode" = true; + "dom.security.https_first" = true; + "signon.formlessCapture.enabled" = false; + "signon.privateBrowsingCapture.enabled" = false; + "network.auth.subresource-http-auth-allow" = 1; + "editor.truncate_user_pastes" = false; + "security.mixed_content.block_display_content" = true; + "pdfjs.enableScripting" = false; + "extensions.postDownloadThirdPartyPrompt" = false; + "network.http.referer.XOriginTrimmingPolicy" = 2; + "privacy.userContext.ui.enabled" = true; + "media.peerconnection.ice.proxy_only_if_behind_proxy" = true; + "media.peerconnection.ice.default_address_only" = true; + "browser.safebrowsing.downloads.remote.enabled" = false; + "permissions.default.desktop-notification" = 2; + "permissions.default.geo" = 2; + "permissions.manager.defaultsUrl" = ""; + "webchannel.allowObject.urlWhitelist" = ""; + "datareporting.policy.dataSubmissionEnabled" = false; + "datareporting.healthreport.uploadEnabled" = false; + "toolkit.telemetry.unified" = false; + "toolkit.telemetry.enabled" = false; + "toolkit.telemetry.server" = "data:,"; + "toolkit.telemetry.archive.enabled" = false; + "toolkit.telemetry.newProfilePing.enabled" = false; + "toolkit.telemetry.shutdownPingSender.enabled" = false; + "toolkit.telemetry.updatePing.enabled" = false; + "toolkit.telemetry.bhrPing.enabled" = false; + "toolkit.telemetry.firstShutdownPing.enabled" = false; + "toolkit.telemetry.coverage.opt-out" = true; + "toolkit.coverage.opt-out" = true; + "toolkit.coverage.endpoint.base" = ""; + "browser.newtabpage.activity-stream.feeds.telemetry" = false; + "browser.newtabpage.activity-stream.telemetry" = false; + "app.shield.optoutstudies.enabled" = false; + "app.normandy.enabled" = false; + "app.normandy.api_url" = ""; + "breakpad.reportURL" = ""; + "browser.tabs.crashReporting.sendReport" = false; + "browser.crashReports.unsubmittedCheck.autoSubmit2" = false; + "captivedetect.canonicalURL" = ""; + "network.captive-portal-service.enabled" = false; + "network.connectivity-service.enabled" = false; + + # PESKYFOX + "browser.privatebrowsing.vpnpromourl" = ""; + "extensions.getAddons.showPane" = false; + "extensions.htmlaboutaddons.recommendations.enabled" = false; + "browser.discovery.enabled" = false; + "browser.shell.checkDefaultBrowser" = false; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" = false; + "browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" = false; + "browser.preferences.moreFromMozilla" = false; + "browser.aboutConfig.showWarning" = false; + "browser.aboutwelcome.enabled" = false; + "browser.tabs.tabmanager.enabled" = false; + "browser.profiles.enabled" = true; + "toolkit.legacyUserProfileCustomizations.stylesheets" = true; + "browser.compactmode.show" = true; + "browser.display.focus_ring_on_anything" = true; + "browser.display.focus_ring_style" = 0; + "browser.display.focus_ring_width" = 0; + "layout.css.prefers-color-scheme.content-override" = 2; + "browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled" = true; + "cookiebanners.service.mode" = 1; + "cookiebanners.service.mode.privateBrowsing" = 1; + "full-screen-api.transition-duration.enter" = "0 0"; + "full-screen-api.transition-duration.leave" = "0 0"; + "full-screen-api.warning.delay" = -1; + "full-screen-api.warning.timeout" = 0; + "browser.urlbar.suggest.engines" = false; + "browser.urlbar.suggest.searches" = false; + "browser.urlbar.suggest.calculator" = true; + "browser.urlbar.unitConversion.enabled" = true; + "browser.urlbar.trending.featureGate" = false; + "browser.newtabpage.activity-stream.feeds.topsites" = false; + "browser.newtabpage.activity-stream.feeds.section.topstories" = false; + "extensions.pocket.enabled" = false; + "browser.download.manager.addToRecentDocs" = false; + "browser.download.open_pdf_attachments_inline" = true; + "browser.bookmarks.openInTabClosesMenu" = false; + "browser.menu.showViewImageInfo" = true; + "findbar.highlightAll" = true; + "layout.word_select.eat_space_to_next_word" = false; + "browser.startup.page" = 1; + + # SMOOTHFOX + "general.smoothScroll" = true; + "general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS" = 12; + "general.smoothScroll.msdPhysics.enabled" = true; + "general.smoothScroll.msdPhysics.motionBeginSpringConstant" = 600; + "general.smoothScroll.msdPhysics.regularSpringConstant" = 650; + "general.smoothScroll.msdPhysics.slowdownMinDeltaMS" = 25; + "general.smoothScroll.msdPhysics.slowdownMinDeltaRatio" = "2"; + "general.smoothScroll.msdPhysics.slowdownSpringConstant" = 250; + "general.smoothScroll.stopDecelerationWeighting" = "0.6"; + "general.smoothScroll.currentVelocityWeighting" = "0.15"; + "mousewheel.default.delta_multiplier_y" = 300; + "mousewheel.min_line_scroll_amount" = 10; + }; +} diff --git a/home/programs/gui/firefox/user/cascade/colors.nix b/home/programs/gui/firefox/user/cascade/colors.nix new file mode 100644 index 0000000..d99c03a --- /dev/null +++ b/home/programs/gui/firefox/user/cascade/colors.nix @@ -0,0 +1,112 @@ +{ ... }: +{ + programs.firefox.profiles.dragora.userChrome = '' + /*---+---+---+---+---+---+---+ + | C | O | L | O | U | R | S | + +---+---+---+---+---+---+---*/ + + + @media (prefers-color-scheme: dark) { :root { + + /* These colours are (mainly) used by the + Container Tabs Plugin */ + --uc-identity-colour-blue: #8DA3B9; + --uc-identity-colour-turquoise: #8AA6A2; + --uc-identity-colour-green: #8C977D; + --uc-identity-colour-yellow: #D9BC8C; + --uc-identity-colour-orange: #D9BC8C; + --uc-identity-colour-red: #B66467; + --uc-identity-colour-pink: #A988B0; + --uc-identity-colour-purple: #A988B0; + + /* Cascades main Colour Scheme */ + --uc-base-colour: #151515; + --uc-highlight-colour: #1F1F1F; + --uc-inverted-colour: #E8E3E3; + --uc-muted-colour: #BBB6B6; + --uc-accent-colour: var(--uc-identity-colour-purple); + + }} + + + @media (prefers-color-scheme: light) { :root { + + /* These colours are (mainly) used by the + Container Tabs Plugin */ + --uc-identity-colour-blue: #1D65F5; + --uc-identity-colour-turquoise: #209FB5; + --uc-identity-colour-green: #40A02B; + --uc-identity-colour-yellow: #E49320; + --uc-identity-colour-orange: #FE640B; + --uc-identity-colour-red: #FC5C65; + --uc-identity-colour-pink: #EC83D0; + --uc-identity-colour-purple: #822FEE; + + /* Cascades main Colour Scheme */ + --uc-base-colour: #FAFAFC; + --uc-highlight-colour: #DADADC; + --uc-inverted-colour: #1E2021; + --uc-muted-colour: #191B1C; + --uc-accent-colour: var(--uc-identity-colour-purple); + + }} + + + + + + + /* Down here I'm just reassigning variables based on the colours set above. + Feel free to play around with these but there is no editing necessary below this line. c: + */ + + :root { + + --lwt-frame: var(--uc-base-colour) !important; + --lwt-accent-color: var(--lwt-frame) !important; + --lwt-text-color: var(--uc-inverted-colour) !important; + + --toolbar-field-color: var(--uc-inverted-colour) !important; + + --toolbar-field-focus-color: var(--uc-inverted-colour) !important; + --toolbar-field-focus-background-color: var(--uc-highlight-colour) !important; + --toolbar-field-focus-border-color: transparent !important; + + --toolbar-field-background-color: var(--lwt-frame) !important; + --lwt-toolbar-field-highlight: var(--uc-inverted-colour) !important; + --lwt-toolbar-field-highlight-text: var(--uc-highlight-colour) !important; + --urlbar-popup-url-color: var(--uc-accent-colour) !important; + + --lwt-tab-text: var(--lwt-text-colour) !important; + + --lwt-selected-tab-background-color: var(--uc-highlight-colour) !important; + + --toolbar-bgcolor: var(--lwt-frame) !important; + --toolbar-color: var(--lwt-text-color) !important; + --toolbarseparator-color: var(--uc-accent-colour) !important; + --toolbarbutton-hover-background: var(--uc-highlight-colour) !important; + --toolbarbutton-active-background: var(--toolbarbutton-hover-background) !important; + + --lwt-sidebar-background-color: var(--lwt-frame) !important; + --sidebar-background-color: var(--lwt-sidebar-background-color) !important; + + --urlbar-box-bgcolor: var(--uc-highlight-colour) !important; + --urlbar-box-text-color: var(--uc-muted-colour) !important; + --urlbar-box-hover-bgcolor: var(--uc-highlight-colour) !important; + --urlbar-box-hover-text-color: var(--uc-inverted-colour) !important; + --urlbar-box-focus-bgcolor: var(--uc-highlight-colour) !important; + + } + + + + .identity-color-blue { --identity-tab-color: var(--uc-identity-colour-blue) !important; --identity-icon-color: var(--uc-identity-colour-blue) !important; } + .identity-color-turquoise { --identity-tab-color: var(--uc-identity-colour-turquoise) !important; --identity-icon-color: var(--uc-identity-colour-turquoise) !important; } + .identity-color-green { --identity-tab-color: var(--uc-identity-colour-green) !important; --identity-icon-color: var(--uc-identity-colour-green) !important; } + .identity-color-yellow { --identity-tab-color: var(--uc-identity-colour-yellow) !important; --identity-icon-color: var(--uc-identity-colour-yellow) !important; } + .identity-color-orange { --identity-tab-color: var(--uc-identity-colour-orange) !important; --identity-icon-color: var(--uc-identity-colour-orange) !important; } + .identity-color-red { --identity-tab-color: var(--uc-identity-colour-red) !important; --identity-icon-color: var(--uc-identity-colour-red) !important; } + .identity-color-pink { --identity-tab-color: var(--uc-identity-colour-pink) !important; --identity-icon-color: var(--uc-identity-colour-pink) !important; } + .identity-color-purple { --identity-tab-color: var(--uc-identity-colour-purple) !important; --identity-icon-color: var(--uc-identity-colour-purple) !important; } + ''; +} diff --git a/home/programs/gui/firefox/user/cascade/config.nix b/home/programs/gui/firefox/user/cascade/config.nix new file mode 100644 index 0000000..ad15c37 --- /dev/null +++ b/home/programs/gui/firefox/user/cascade/config.nix @@ -0,0 +1,166 @@ +{ ... }: +{ + programs.firefox.profiles.dragora.userChrome = '' + /*---+---+---+---+---+---+ + | G | L | O | B | A | L | + +---+---+---+---+---+---*/ + + + :root { + + /* Global Border Radius + * applied to ALL UI elements + */ --uc-border-radius: 12px; + + + /* The distance the Statuspanel floats + * away from the window border + * 0 places directly in the corner + */ --uc-status-panel-spacing: 12px; + + } + + + /* remove window control buttons */ + .titlebar-buttonbox-container { display: none !important; } + + + #pageActionButton { display: none !important; } + + #PanelUI-menu-button { padding: 0px !important; } + #PanelUI-menu-button .toolbarbutton-icon { width: 1px !important; } + #PanelUI-menu-button .toolbarbutton-badge-stack { padding: 0px !important; } + + + + + + /*---+---+---+---+---+---+---+ + | T | O | O | L | B | A | R | + +---+---+---+---+---+---+---*/ + + + /* Position of the Personal Toolbar + * possible values: + * 0 – toolbar on top + * 4 – toolbar on bottom + */ + :root { + --uc-toolbar-position: 0; + } + + /* Darken the Personal Toolbar by X amount + * where X = 1 means pure black + * and X = 0 means no darkening at all + */ + @media (prefers-color-scheme: dark) { :root { + --uc-darken-toolbar: 0.2; + }} @media (prefers-color-scheme: light) { :root { + --uc-darken-toolbar: 0; + }} + + + + + /*---+---+---+---+---+---+---+ + | U | R | L | — | B | A | R | + +---+---+---+---+---+---+---*/ + + + :root { + + /* Width of the URL Bar for the Oneline layout + * If enabled the max-width is applied on focus + * otherwise the URL Bar will always be it's min-width + */ --uc-urlbar-min-width: 0vw; + --uc-urlbar-max-width: 100vw; + + /* Position of the URL Bar + * possible values: + * 1 – tabs on the right + * 3 – tabs on the left + */ --uc-urlbar-position: 1; + + /* Firefox can be a little wonky with the vertical + * URL Bar placement. Change this variable to adapt + * to this when necessary. + */ --uc-urlbar-top-spacing: 1px; + + } + + + /* Disable the Navigation Buttons */ + #back-button, + #forward-button { display: none !important; } + + /* Disables the Tracking Protection Shield */ + /* #tracking-protection-icon-container { display: none !important; } */ + + /* Encryption and Permissions icons */ + /* Only hides permission items */ + #identity-permission-box { display: none !important; } + /* Hides encryption AND permission items */ + /* #identity-box { display: none !important } */ + + /* Hide everything BUT the zoom indicator within the URL Bar */ + /* #page-action-buttons > :not(#urlbar-zoom-button) { display: none !important; } */ + + /* Hide the »Go«-arrow in the URL Bar */ + #urlbar-go-button { display: none !important; } + + /* Hides the Extensions Menu Icon */ + #unified-extensions-button { display: -moz-inline-block !important; } + + + + + + /*---+---+---+---+---+---+---+ + | T | A | B | — | B | A | R | + +---+---+---+---+---+---+---*/ + + + :root { + + /* Allow tabs to have dynamic widths based on + * the Tab Bars maximum width + */ --uc-active-tab-width: clamp(100px, 18vw, 170px); + --uc-inactive-tab-width: clamp(100px, 15vw, 90px); + + + /* Enable this to always show the Tab Close button + * possible values: + * show: -moz-inline-block + * hide: none + */ --show-tab-close-button: none; + + /* Enable this to only show the Tab Close button on tab hover + * possible values: + * show: -moz-inline-block + * hide: none + */ --show-tab-close-button-hover: none; + + /* Hide the all Tabs button from the Tab Bar + * possible values: + * show: -moz-box + * hide: none + */ --uc-show-all-tabs-button: none; + + + /* Left and Right "dip" of the container indicator + * 0px equals tab width + * higer values make the indicator smaller + */ --container-tabs-indicator-margin: 10px; + + /* Amount of Glow to add to the container indicator + * Setting it to 0 disables the Glow + */ --uc-identity-glow: 0 1px 10px 1px; + + } + + + /* Hide the secondary Tab Label + * e.g. playing indicator (the text, not the icon) */ + .tab-secondary-label { display: none !important; } + ''; +} diff --git a/home/programs/gui/firefox/user/cascade/default.nix b/home/programs/gui/firefox/user/cascade/default.nix new file mode 100644 index 0000000..5d981a0 --- /dev/null +++ b/home/programs/gui/firefox/user/cascade/default.nix @@ -0,0 +1,11 @@ +{ + imports = [ + ./colors.nix + ./config.nix + ./layout.nix + ./navbar.nix + # ./resp.nix + ./tabs.nix + ./tcr.nix + ]; +} diff --git a/home/programs/gui/firefox/user/cascade/layout.nix b/home/programs/gui/firefox/user/cascade/layout.nix new file mode 100644 index 0000000..18a415b --- /dev/null +++ b/home/programs/gui/firefox/user/cascade/layout.nix @@ -0,0 +1,66 @@ +{ ... }: +{ + programs.firefox.profiles.dragora.userChrome = '' + :root { + + --toolbarbutton-border-radius: var(--uc-border-radius) !important; + --tab-border-radius: var(--uc-border-radius) !important; + --arrowpanel-border-radius: var(--uc-border-radius) !important; + + } + + + + + + #main-window, + #toolbar-menubar, + #TabsToolbar, + #navigator-toolbox, + #sidebar-box, + #nav-bar { box-shadow: none !important; } + + + #main-window, + #toolbar-menubar, + #TabsToolbar, + #PersonalToolbar, + #navigator-toolbox, + #sidebar-box, + #nav-bar { border: none !important; } + + + /* remove "padding" left and right from tabs */ + .titlebar-spacer { display: none !important; } + + /* fix Shield Icon padding */ + #urlbar-input-container[pageproxystate="valid"] + > #tracking-protection-icon-container + > #tracking-protection-icon-box + > #tracking-protection-icon { + padding-bottom: 1px; + } + + + + + + #PersonalToolbar { + + padding: 6px !important; + box-shadow: inset 0 0 50vh rgba(0, 0, 0, var(--uc-darken-toolbar)) !important;; + + } + + + + + + #statuspanel #statuspanel-label { + + border: none !important; + border-radius: var(--uc-border-radius) !important; + + } + ''; +} diff --git a/home/programs/gui/firefox/user/cascade/navbar.nix b/home/programs/gui/firefox/user/cascade/navbar.nix new file mode 100644 index 0000000..2f611d0 --- /dev/null +++ b/home/programs/gui/firefox/user/cascade/navbar.nix @@ -0,0 +1,52 @@ +{ ... }: +{ + programs.firefox.profiles.dragora.userChrome = '' + #navigator-toolbox:not(:-moz-lwtheme) { background: var(--toolbar-field-background-color) !important; } + + + + #nav-bar { + + padding-block-start: 0px !important; + + border: none !important; + box-shadow: none !important; + background: transparent !important; + + } + + + #urlbar, + #urlbar * { + + padding-block-start: var(--uc-urlbar-top-spacing) !important; + + outline: none !important; + box-shadow: none !important; + + } + + + #urlbar-background { border: transparent !important; } + + #urlbar[focused='true'] + > #urlbar-background, + #urlbar:not([open]) + > #urlbar-background { background: var(--toolbar-field-background-color) !important; } + + + #urlbar[open] + > #urlbar-background { background: var(--toolbar-field-background-color) !important; } + + + .urlbarView-row:hover + > .urlbarView-row-inner, + .urlbarView-row[selected] + > .urlbarView-row-inner { background: var(--toolbar-field-focus-background-color) !important; } + + + .urlbar-icon, #urlbar-go-button { margin: auto; } + .urlbar-page-action { padding: 0 inherit !important; } + .urlbar-page-action .urlbar-icon { margin-top: 6px !important; } + ''; +} diff --git a/home/programs/gui/firefox/user/cascade/resp.nix b/home/programs/gui/firefox/user/cascade/resp.nix new file mode 100644 index 0000000..61f2d6d --- /dev/null +++ b/home/programs/gui/firefox/user/cascade/resp.nix @@ -0,0 +1,14 @@ +{ ... }: +{ + programs.firefox.profiles.dragora.userChrome = '' + @media (min-width: 1000px) { + + #nav-bar { margin: calc((var(--urlbar-min-height) * -1) - 12px) calc(100vw - var(--uc-urlbar-min-width)) 0 0 !important; } + #titlebar { margin-inline-start: var(--uc-urlbar-min-width) !important; } + + #navigator-toolbox:focus-within #nav-bar { margin: calc((var(--urlbar-min-height) * -1) - 12px) calc(100vw - var(--uc-urlbar-max-width)) 0 0 !important; } + #navigator-toolbox:focus-within #titlebar { margin-inline-start: var(--uc-urlbar-max-width) !important; } + + } + ''; +} diff --git a/home/programs/gui/firefox/user/cascade/tabs.nix b/home/programs/gui/firefox/user/cascade/tabs.nix new file mode 100644 index 0000000..cee0896 --- /dev/null +++ b/home/programs/gui/firefox/user/cascade/tabs.nix @@ -0,0 +1,160 @@ +{ ... }: +{ + programs.firefox.profiles.dragora.userChrome = '' + /* remove gap after pinned tabs */ + #tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]) + > #tabbrowser-arrowscrollbox + > .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) { margin-inline-start: 0 !important; } + + + /* Hides the list-all-tabs button*/ + #alltabs-button { display: var(--uc-show-all-tabs-button) !important; } + + + /* remove tab shadow */ + .tabbrowser-tab + >.tab-stack + > .tab-background { box-shadow: none !important; } + + + /* multi tab selection */ + #tabbrowser-tabs:not([noshadowfortests]) .tabbrowser-tab:is([multiselected]) + > .tab-stack + > .tab-background:-moz-lwtheme { outline-color: var(--toolbarseparator-color) !important; } + + + + + + /* tab close button options */ + .tabbrowser-tab:not([pinned]) .tab-close-button { display: var(--show-tab-close-button) !important; } + .tabbrowser-tab:not([pinned]):hover .tab-close-button { display: var(--show-tab-close-button-hover) !important } + + + + + + /* adaptive tab width */ + .tabbrowser-tab[selected][fadein]:not([pinned]) { max-width: var(--uc-active-tab-width) !important; } + .tabbrowser-tab[fadein]:not([selected]):not([pinned]) { max-width: var(--uc-inactive-tab-width) !important; } + + + + + + /* container tabs indicator */ + .tabbrowser-tab[usercontextid] + > .tab-stack + > .tab-background + > .tab-context-line { + + margin: -1px var(--container-tabs-indicator-margin) 0 var(--container-tabs-indicator-margin) !important; + height: 1px !important; + + box-shadow: var(--uc-identity-glow) var(--identity-tab-color) !important; + + } + + + + + + /* show favicon when media is playing but tab is hovered */ + .tab-icon-image:not([pinned]) { opacity: 1 !important; } + + + /* Makes the speaker icon to always appear if the tab is playing (not only on hover) */ + .tab-icon-overlay:not([crashed]), + .tab-icon-overlay[pinned][crashed][selected] { + + top: 5px !important; + z-index: 1 !important; + + padding: 1.5px !important; + inset-inline-end: -8px !important; + width: 16px !important; height: 16px !important; + + border-radius: 10px !important; + + } + + + /* style and position speaker icon */ + .tab-icon-overlay:not([sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) { + + stroke: transparent !important; + background: transparent !important; + opacity: 1 !important; fill-opacity: 0.8 !important; + + color: currentColor !important; + + stroke: var(--toolbar-bgcolor) !important; + background-color: var(--toolbar-bgcolor) !important; + + } + + + /* change the colours of the speaker icon on active tab to match tab colours */ + .tabbrowser-tab[selected] .tab-icon-overlay:not([sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) { + + stroke: var(--toolbar-bgcolor) !important; + background-color: var(--toolbar-bgcolor) !important; + + } + + + .tab-icon-overlay:not([pinned], [sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) { margin-inline-end: 9.5px !important; } + + + .tabbrowser-tab:not([image]) .tab-icon-overlay:not([pinned], [sharing], [crashed]) { + + top: 0 !important; + + padding: 0 !important; + margin-inline-end: 5.5px !important; + inset-inline-end: 0 !important; + + } + + + .tab-icon-overlay:not([crashed])[soundplaying]:hover, + .tab-icon-overlay:not([crashed])[muted]:hover, + .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover { + + color: currentColor !important; + stroke: var(--toolbar-color) !important; + background-color: var(--toolbar-color) !important; + fill-opacity: 0.95 !important; + + } + + + .tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[soundplaying]:hover, + .tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[muted]:hover, + .tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover { + + color: currentColor !important; + stroke: var(--toolbar-color) !important; + background-color: var(--toolbar-color) !important; + fill-opacity: 0.95 !important; + + } + + + /* speaker icon colour fix */ + #TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying], + #TabsToolbar .tab-icon-overlay:not([crashed])[muted], + #TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked] { color: var(--toolbar-color) !important; } + + + /* speaker icon colour fix on hover */ + #TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying]:hover, + #TabsToolbar .tab-icon-overlay:not([crashed])[muted]:hover, + #TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover { color: var(--toolbar-bgcolor) !important; } + + /* selected tab colour fix*/ + .tabbrowser-tab[selected] .tab-content { + background-color: var(--uc-highlight-colour) !important; + } + ''; +} diff --git a/home/programs/gui/firefox/user/cascade/tcr.nix b/home/programs/gui/firefox/user/cascade/tcr.nix new file mode 100644 index 0000000..8f331d8 --- /dev/null +++ b/home/programs/gui/firefox/user/cascade/tcr.nix @@ -0,0 +1,42 @@ +{ ... }: +{ + programs.firefox.profiles.dragora.userChrome = '' + #TabsToolbar { display: none !important; } + #nav-bar { width: 100vw !important; } + + + + #browser { position: relative; } + #sidebar-box[sidebarcommand*="tabcenter"] #sidebar-header { display: none; } + + #sidebar-box[sidebarcommand*="tabcenter"]:not([hidden]) { + + display: block; + + position: absolute; + top: 0; bottom: 0; + z-index: 1; + + min-width: 50px !important; max-width: 50px !important; + + border-right: none; + + transition: all 0.2s ease; + + overflow: hidden; + + } + + [sidebarcommand*="tabcenter"] #sidebar, + #sidebar-box[sidebarcommand*="tabcenter"]:hover { min-width: 10vw !important; width: 30vw !important; max-width: 250px !important; } + + [sidebarcommand*="tabcenter"] #sidebar { height: 100%; max-height: 100%; } + + #sidebar-box[sidebarcommand*="tabcenter"]:not([hidden]) ~ #appcontent { margin-left: 50px; } + #main-window[inFullscreen][inDOMFullscreen] #appcontent { margin-left: 0; } + /* Removes gap between active tab highlight and edge of bar */ + #sidebar-box[sidebarcommand="tabcenter-reborn_ariasuni-sidebar-action"] #sidebar-header, #sidebar-box[sidebarcommand="tabcenter-reborn_ariasuni-sidebar-action"] ~ #sidebar-splitter { + display: none; + } + ''; +} diff --git a/home/programs/gui/firefox/user/chrome.nix b/home/programs/gui/firefox/user/chrome.nix new file mode 100644 index 0000000..d68dbab --- /dev/null +++ b/home/programs/gui/firefox/user/chrome.nix @@ -0,0 +1,9 @@ +{ ... }: +{ + programs.firefox.profiles.dragora.userChrome = '' + * { + font-family: "JetBrainsMono Nerd Font" !important; + font-size: 12pt !important; + } + ''; +} diff --git a/home/programs/gui/firefox/user/content.nix b/home/programs/gui/firefox/user/content.nix new file mode 100644 index 0000000..c412a34 --- /dev/null +++ b/home/programs/gui/firefox/user/content.nix @@ -0,0 +1,32 @@ +{ ... }: +let + repo = "https://github.com/axax-loll/fuji-wallpapers/blob/main"; +in +{ + programs.firefox.profiles.dragora.userContent = '' + @-moz-document url(about:home), url(about:newtab), url(about:privatebrowsing) { + .click-target-container *, .top-sites-list * { + color: #fff !important ; + text-shadow: 2px 2px 2px #222 !important ; + } + body::before { + content: "" ; + z-index: -1 ; + position: fixed ; + top: 0 ; + left: 0 ; + background: #0F0F0F no-repeat url("${repo}/synth.png?raw=true") center ; + background-size: cover ; + width: 100vw ; + height: 100vh ; + } + .logo { background-image: url("${repo}/logo.png?raw=true") !important; } + .search-wrapper input { background: #0F0F0F !important; } + #PlacesToolbarItems { + width: 100%; + display: flex; + justify-content: center; + } + } + ''; +} diff --git a/home/programs/gui/firefox/user/default.nix b/home/programs/gui/firefox/user/default.nix new file mode 100644 index 0000000..708e7f3 --- /dev/null +++ b/home/programs/gui/firefox/user/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./cascade + + ./chrome.nix + ./content.nix + ]; +} diff --git a/home/programs/gui/firefox/user/waterfall.nix b/home/programs/gui/firefox/user/waterfall.nix new file mode 100644 index 0000000..519e84b --- /dev/null +++ b/home/programs/gui/firefox/user/waterfall.nix @@ -0,0 +1,439 @@ +{ config, ... }: +{ + programs.firefox.profiles.dragora.userChrome = with config.lib.stylix.colors; '' + /*========================================================================================================* + + +-----+-----+-----+-----+-----+-----+-----+ + | █▀▀ | ▄▀█ | █▀▀ | █▀▀ | ▄▀█ | █▀▄ | █▀▀ | + | █▄▄ | █▀█ | ▄▄█ | █▄▄ | █▀█ | █▄▀ | ██▄ | + +-----+-----+-----+-----+-----+-----+-----+ Mouse Edition. + + + Description: Cascade, Mouse Edition, is a Firefox Style based on the Cascade theme by Andreas Grafen + What you get is a really simple one-line layout using the new Proton UI. + + The original Cascade Theme by Andreas Grafen was based on SimpleFox : + > SimpleFox: https://github.com/migueravila/SimpleFox + + + Authors: Andreas Grafen (original cascade theme) + (https://andreas.grafen.info) + + Clément Rambaud (minor tweaks on the original file) + + + Repository: https://github.com/andreasgrafen/cascade + https://github.com/crambaud/cascade + + *========================================================================================================*/ + + + /*---+---+---+---+---+---+ + | C | O | N | F | I | G | + +---+---+---+---+---+---*/ + + /* Feel free to tweak the following + * config settingsto your own liking. */ + + + :root { + + /*---+---+---+---+---+---+---+ + | C | O | L | O | U | R | S | + +---+---+---+---+---+---+---*/ + + /* Comment the color theme you don't want to use */ + + /* Dark Theme Colors */ + --window-colour: #${base00}; + --secondary-colour: #${base01}; + --inverted-colour: #${base07}; + + /* Light Theme Colors + --window-colour: #FAFAFC; + --secondary-colour: #EAEAEC; + --inverted-colour: #1E2021; + */ + + + /* Containter Tab Colours */ + --uc-identity-colour-blue: #${base0D}; + --uc-identity-colour-turquoise: #${base0C}; + --uc-identity-colour-green: #${base0B}; + --uc-identity-colour-yellow: #${base09}; + --uc-identity-colour-orange: #${base0A}; + --uc-identity-colour-red: #${base08}; + --uc-identity-colour-pink: #${base0F}; + --uc-identity-colour-purple: #${base0E}; + + + /* URL colour in URL bar suggestions */ + --urlbar-popup-url-color: var(--uc-identity-color-purple) !important; + + + + /*---+---+---+---+---+---+---+ + | V | I | S | U | A | L | S | + +---+---+---+---+---+---+---*/ + + /* global border radius */ + --uc-border-radius: 16; + + /* dynamic url bar width settings */ + --uc-urlbar-width: clamp(250px, 50vw, 500px); + + /* dynamic tab width settings */ + --uc-active-tab-width: clamp( 50px, 18vw, 170px); + --uc-inactive-tab-width: clamp( 50px, 15vw, 90px); + + /* if active always shows the tab close button */ + --show-tab-close-button: none; /* DEFAULT: -moz-inline-box; */ + + /* if active only shows the tab close button on hover*/ + --show-tab-close-button-hover: none; /* DEFAULT: -moz-inline-box; */ + + /* adds left and right margin to the container-tabs indicator */ + --container-tabs-indicator-margin: 0px; + + } + + /*---+---+---+---+---+---+---+ + | B | U | T | T | O | N | S | + +---+---+---+---+---+---+---*/ + + /* showing only the back button */ + #back-button{ display: -moz-inline-box !important; } + #forward-button{ display: none !important; } + #stop-button{ display: none !important; } + #reload-button{ display: none !important; } + + /* bookmark icon */ + #star-button{ display: none !important; } + + /* zoom indicator */ + #urlbar-zoom-button { display: none !important; } + + /* Show Hamburger Menu */ + #PanelUI-button { display: -moz-inline-box !important;} + + #reader-mode-button{ display: none !important; } + + /* tracking protection shield icon */ + #tracking-protection-icon-container { display: none !important; } + + /* #identity-box { display: none !important } /* hides encryption AND permission items */ + #identity-permission-box { display: none !important; } /* only hides permission items */ + + /* e.g. playing indicator (secondary - not icon) */ + .tab-secondary-label { display: none !important; } + + #pageActionButton { display: none !important; } + #page-action-buttons { display: none !important; } + + + + + + /*=============================================================================================*/ + + + /*---+---+---+---+---+---+ + | L | A | Y | O | U | T | + +---+---+---+---+---+---*/ + + /* No need to change anything below this comment. + * Just tweak it if you want to tweak the overall layout. c: */ + + :root { + + --uc-theme-colour: var(--window-colour); + --uc-hover-colour: var(--secondary-colour); + --uc-inverted-colour: var(--inverted-colour); + + --button-bgcolor: var(--uc-theme-colour) !important; + --button-hover-bgcolor: var(--uc-hover-colour) !important; + --button-active-bgcolor: var(--uc-hover-colour) !important; + + --toolbar-bgcolor: var(--uc-theme-colour) !important; + --toolbarbutton-hover-background: var(--uc-hover-colour) !important; + --toolbarbutton-active-background: var(--uc-hover-colour) !important; + --toolbarbutton-border-radius: var(--uc-border-radius) !important; + --lwt-toolbar-field-focus: var(--uc-theme-colour) !important; + --toolbarbutton-icon-fill: var(--uc-inverted-colour) !important; + --toolbar-field-focus-background-color: var(--secondary-colour) !important; + --toolbar-field-color: var(--uc-inverted-colour) !important; + --toolbar-field-focus-color: var(--uc-inverted-colour) !important; + + --tabs-border-color: var(--uc-theme-colour) !important; + --tab-border-radius: var(--uc-border-radius) !important; + --lwt-text-color: var(--uc-inverted-colour) !important; + --lwt-tab-text: var(--uc-inverted-colour) !important; + + --lwt-sidebar-background-color: var(--uc-hover-colour) !important; + --lwt-sidebar-text-color: var(--uc-inverted-colour) !important; + + --arrowpanel-border-color: var(--uc-theme-colour) !important; + --arrowpanel-border-radius: var(--uc-border-radius) !important; + --arrowpanel-background: var(--uc-theme-colour) !important; + --arrowpanel-color: var(--inverted-colour) !important; + + --autocomplete-popup-highlight-background: var(--uc-inverted-colour) !important; + --autocomplete-popup-highlight-color: var(--uc-inverted-colour) !important; + --autocomplete-popup-hover-background: var(--uc-inverted-colour) !important; + + + --tab-block-margin: 2px !important; + + } + + + + + + window, + #main-window, + #toolbar-menubar, + #TabsToolbar, + #PersonalToolbar, + #navigator-toolbox, + #sidebar-box, + #nav-bar { + + -moz-appearance: none !important; + + border: none !important; + box-shadow: none !important; + background: var(--uc-theme-colour) !important; + + } + + + + + + /* grey out ccons inside the toolbar to make it + * more aligned with the Black & White colour look */ + #PersonalToolbar toolbarbutton:not(:hover), + #bookmarks-toolbar-button:not(:hover) { filter: grayscale(1) !important; } + + + /* Show Window Control Button */ + .titlebar-buttonbox-container { display: -moz-inline-box !important; } + + + /* remove "padding" left and right from tabs */ + .titlebar-spacer { display: none !important; } + + + /* remove gap after pinned tabs */ + #tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]) + > #tabbrowser-arrowscrollbox + > .tabbrowser-tab[first-visible-unpinned-tab] { margin-inline-start: 0 !important; } + + + /* remove tab shadow */ + .tabbrowser-tab + >.tab-stack + > .tab-background { box-shadow: none !important; } + + + /* tab background */ + .tabbrowser-tab + > .tab-stack + > .tab-background { background: var(--uc-theme-colour) !important; } + + + /* active tab background */ + .tabbrowser-tab[selected] + > .tab-stack + > .tab-background { background: var(--uc-hover-colour) !important; } + + + /* tab close button options */ + .tabbrowser-tab:not([pinned]) .tab-close-button { display: var(--show-tab-close-button) !important; } + .tabbrowser-tab:not([pinned]):hover .tab-close-button { display: var(--show-tab-close-button-hover) !important } + + + /* adaptive tab width */ + .tabbrowser-tab[selected][fadein]:not([pinned]) { max-width: var(--uc-active-tab-width) !important; } + .tabbrowser-tab[fadein]:not([selected]):not([pinned]) { max-width: var(--uc-inactive-tab-width) !important; } + + + /* container tabs indicator */ + .tabbrowser-tab[usercontextid] + > .tab-stack + > .tab-background + > .tab-context-line { + + margin: -1px var(--container-tabs-indicator-margin) 0 var(--container-tabs-indicator-margin) !important; + + border-radius: var(--tab-border-radius) !important; + + } + + + /* show favicon when media is playing but tab is hovered */ + .tab-icon-image:not([pinned]) { opacity: 1 !important; } + + + /* Makes the speaker icon to always appear if the tab is playing (not only on hover) */ + .tab-icon-overlay:not([crashed]), + .tab-icon-overlay[pinned][crashed][selected] { + + top: 5px !important; + z-index: 1 !important; + + padding: 1.5px !important; + inset-inline-end: -8px !important; + width: 16px !important; height: 16px !important; + + border-radius: 10px !important; + + } + + + /* style and position speaker icon */ + .tab-icon-overlay:not([sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) { + + stroke: transparent !important; + background: transparent !important; + opacity: 1 !important; fill-opacity: 0.8 !important; + + color: currentColor !important; + + stroke: var(--uc-theme-colour) !important; + background-color: var(--uc-theme-colour) !important; + + } + + + /* change the colours of the speaker icon on active tab to match tab colours */ + .tabbrowser-tab[selected] .tab-icon-overlay:not([sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) { + + stroke: var(--uc-hover-colour) !important; + background-color: var(--uc-hover-colour) !important; + + } + + + .tab-icon-overlay:not([pinned], [sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) { margin-inline-end: 9.5px !important; } + + + .tabbrowser-tab:not([image]) .tab-icon-overlay:not([pinned], [sharing], [crashed]) { + + top: 0 !important; + + padding: 0 !important; + margin-inline-end: 5.5px !important; + inset-inline-end: 0 !important; + + } + + + .tab-icon-overlay:not([crashed])[soundplaying]:hover, + .tab-icon-overlay:not([crashed])[muted]:hover, + .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover { + + color: currentColor !important; + stroke: var(--uc-inverted-colour) !important; + background-color: var(--uc-inverted-colour) !important; + fill-opacity: 0.95 !important; + + } + + + .tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[soundplaying]:hover, + .tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[muted]:hover, + .tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover { + + color: currentColor !important; + stroke: var(--uc-inverted-colour) !important; + background-color: var(--uc-inverted-colour) !important; + fill-opacity: 0.95 !important; + + } + + + /* speaker icon colour fix */ + #TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying], + #TabsToolbar .tab-icon-overlay:not([crashed])[muted], + #TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked] { color: var(--uc-inverted-colour) !important; } + + + /* speaker icon colour fix on hover */ + #TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying]:hover, + #TabsToolbar .tab-icon-overlay:not([crashed])[muted]:hover, + #TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover { color: var(--uc-theme-colour) !important; } + + + + + + #nav-bar { + + border: none !important; + box-shadow: none !important; + background: transparent !important; + + } + + + /* remove border below whole nav */ + #navigator-toolbox { border-bottom: none !important; } + + + #urlbar, + #urlbar * { box-shadow: none !important; } + + + #urlbar-background { border: var(--uc-hover-colour) !important; } + + + #urlbar[focused="true"] + > #urlbar-background, + #urlbar:not([open]) + > #urlbar-background { background: transparent !important; } + + + #urlbar[open] + > #urlbar-background { background: var(--uc-theme-colour) !important; } + + + .urlbarView-row:hover + > .urlbarView-row-inner, + .urlbarView-row[selected] + > .urlbarView-row-inner { background: var(--uc-hover-colour) !important; } + + + + + + /* transition to oneline */ + @media (min-width: 1000px) { + + + /* move tabs bar over */ + #TabsToolbar { margin-left: var(--uc-urlbar-width) !important; } + + + /* move entire nav bar */ + #nav-bar { margin: calc((var(--urlbar-min-height) * -1) - 8px) calc(100vw - var(--uc-urlbar-width)) 0 0 !important; } + + + } /* end media query */ + + + + + + /* Container Tabs */ + .identity-color-blue { --identity-tab-color: var(--uc-identity-color-blue) !important; --identity-icon-color: var(--uc-identity-color-blue) !important; } + .identity-color-turquoise { --identity-tab-color: var(--uc-identity-color-turquoise) !important; --identity-icon-color: var(--uc-identity-color-turquoise) !important; } + .identity-color-green { --identity-tab-color: var(--uc-identity-color-green) !important; --identity-icon-color: var(--uc-identity-color-green) !important; } + .identity-color-yellow { --identity-tab-color: var(--uc-identity-color-yellow) !important; --identity-icon-color: var(--uc-identity-color-yellow) !important; } + .identity-color-orange { --identity-tab-color: var(--uc-identity-color-orange) !important; --identity-icon-color: var(--uc-identity-color-orange) !important; } + .identity-color-red { --identity-tab-color: var(--uc-identity-color-red) !important; --identity-icon-color: var(--uc-identity-color-red) !important; } + .identity-color-pink { --identity-tab-color: var(--uc-identity-color-pink) !important; --identity-icon-color: var(--uc-identity-color-pink) !important; } + .identity-color-purple { --identity-tab-color: var(--uc-identity-color-purple) !important; --identity-icon-color: var(--uc-identity-color-purple) !important; } + ''; +} diff --git a/home/programs/gui/mpv/default.nix b/home/programs/gui/mpv/default.nix new file mode 100644 index 0000000..ab39796 --- /dev/null +++ b/home/programs/gui/mpv/default.nix @@ -0,0 +1,91 @@ +{ pkgs, ... }: +{ + # imports = [ ./shaders ]; + programs.mpv = { + enable = true; + scripts = with pkgs.mpvScripts; [ + thumbnail + sponsorblock-minimal + videoclip + ]; + scriptOpts = { + sponsorblock-minimal = { + sponsorblock_minimal-server = "https://sponsor.ajay.app/api/skipSegments"; + sponsorblock_minimal-categories = ["sponsor"]; + }; + mpv_thumbnail_script = { + autogenerate = "yes"; + autogenerate_max_duration = "3600"; + prefer_mpv = "yes"; + mpv_no_sub = "no"; + thumbnail_width = 200; + thumbnail_height = 200; + thumbnail_count = 150; + thumbnail_network = "no"; + background_color = "282828"; + }; + }; + config = { + fs = "yes"; + osc = "no"; + }; + bindings = { + WHEEL_UP = "add volume 2"; + WHEEL_DOWN = "add volume -2"; + "Shift+WHEEL_UP" = "add volume 5"; + "Shift+WHEEL_DOWN" = "add volume -5"; + + RIGHT = "seek 5"; + l = "seek 5"; + "д" = "seek 5"; + + LEFT = "seek -5"; + h = "seek -5"; + "р" = "seek -5"; + + UP = "add volume 2"; + k = "add volume 2"; + "л" = "add volume 2"; + + DOWN = "add volume -2"; + j = "add volume -2"; + "о" = "add volume -2"; + + "Shift+RIGHT" = "seek 10"; + "Shift+LEFT" = "seek -10"; + + "Shift+UP" = "add volume 5"; + "Shift+DOWN" = "add volume -5"; + + q = "quit"; + "й" = "quit"; + Q = "quit-watch-later"; + + SPACE = "cycle pause"; + p = "cycle pause"; + "з" = "cycle pause"; + + m = "cycle mute"; + "ь" = "cycle mute"; + + o = "show-progress"; + "щ" = "show-progress"; + + f = "cycle fullscreen"; + "а" = "cycle fullscreen"; + ESC = "set fullscreen no"; + + c = "script-binding videoclip-menu-open"; + }; + extraInput = '' + CTRL+1 no-osd change-list glsl-shaders set "${pkgs.anime4k}/Anime4K_Clamp_Highlights.glsl:${pkgs.anime4k}/Anime4K_Restore_CNN_M.glsl:${pkgs.anime4k}/Anime4K_Upscale_CNN_x2_M.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${pkgs.anime4k}/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode A (Fast)" + CTRL+2 no-osd change-list glsl-shaders set "${pkgs.anime4k}/Anime4K_Clamp_Highlights.glsl:${pkgs.anime4k}/Anime4K_Restore_CNN_Soft_M.glsl:${pkgs.anime4k}/Anime4K_Upscale_CNN_x2_M.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${pkgs.anime4k}/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode B (Fast)" + CTRL+3 no-osd change-list glsl-shaders set "${pkgs.anime4k}/Anime4K_Clamp_Highlights.glsl:${pkgs.anime4k}/Anime4K_Upscale_Denoise_CNN_x2_M.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${pkgs.anime4k}/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode C (Fast)" + CTRL+4 no-osd change-list glsl-shaders set "${pkgs.anime4k}/Anime4K_Clamp_Highlights.glsl:${pkgs.anime4k}/Anime4K_Restore_CNN_M.glsl:${pkgs.anime4k}/Anime4K_Upscale_CNN_x2_M.glsl:${pkgs.anime4k}/Anime4K_Restore_CNN_S.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${pkgs.anime4k}/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode A+A (Fast)" + CTRL+5 no-osd change-list glsl-shaders set "${pkgs.anime4k}/Anime4K_Clamp_Highlights.glsl:${pkgs.anime4k}/Anime4K_Restore_CNN_Soft_M.glsl:${pkgs.anime4k}/Anime4K_Upscale_CNN_x2_M.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${pkgs.anime4k}/Anime4K_Restore_CNN_Soft_S.glsl:${pkgs.anime4k}/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode B+B (Fast)" + CTRL+6 no-osd change-list glsl-shaders set "${pkgs.anime4k}/Anime4K_Clamp_Highlights.glsl:${pkgs.anime4k}/Anime4K_Upscale_Denoise_CNN_x2_M.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x2.glsl:${pkgs.anime4k}/Anime4K_AutoDownscalePre_x4.glsl:${pkgs.anime4k}/Anime4K_Restore_CNN_S.glsl:${pkgs.anime4k}/Anime4K_Upscale_CNN_x2_S.glsl"; show-text "Anime4K: Mode C+A (Fast)" + + CTRL+0 no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared" + ''; + }; +} diff --git a/home/programs/gui/obs-studio/default.nix b/home/programs/gui/obs-studio/default.nix new file mode 100644 index 0000000..8957596 --- /dev/null +++ b/home/programs/gui/obs-studio/default.nix @@ -0,0 +1,12 @@ +{ pkgs, ... }: +{ + programs.obs-studio = { + enable = true; + package = pkgs.obs-studio; + plugins = with pkgs.obs-studio-plugins; [ + wlrobs + obs-vkcapture + input-overlay + ]; + }; +} diff --git a/home/programs/gui/pkgs.nix b/home/programs/gui/pkgs.nix new file mode 100644 index 0000000..9b3c3a3 --- /dev/null +++ b/home/programs/gui/pkgs.nix @@ -0,0 +1,62 @@ +{ pkgs, inputs, config, ... }: +{ + imports = [ + inputs.nur.hmModules.nur + ]; + home.packages = with pkgs; [ + home-manager + + vesktop + tor-browser + qbittorrent-enhanced + + xdg-user-dirs + libreoffice-fresh + onlyoffice-bin + + nemo-with-extensions + nemo-fileroller + nemo-emblems + gvfs + + obsidian + inkscape + + popsicle + ventoy + + swayimg + anime4k + + bottles + # "wineWow64Packages.staging" + mindustry-wayland + mangohud + superTuxKart + transmission_4-gtk + + # (vivaldi.override { + # isSnapshot = true; + # }) + + (prismlauncher.override { + jdks = [ + temurin-bin-21 + temurin-bin-17 + temurin-bin-8 + ]; + }) + + trayscale + + (nerdfonts.override { + fonts = [ + "FiraCode" + "JetBrainsMono" + ]; + }) + + config.nur.repos.abszero.palgen + inputs.ayugram-desktop.packages.${pkgs.system}.default + ]; +} diff --git a/home/programs/gui/qbittorrent/default.nix b/home/programs/gui/qbittorrent/default.nix new file mode 100644 index 0000000..5bbffdd --- /dev/null +++ b/home/programs/gui/qbittorrent/default.nix @@ -0,0 +1,108 @@ +{ ... }: +{ + xdg.configFile = { + # CONFIG FILE + "qBittorrent/qBittorrent.conf".text = '' + [AddNewTorrentDialog] + Attached=false + DialogSize=@Size(942 1014) + DownloadPathHistory= + Enabled=true + RememberLastSavePath=false + SavePathHistory=/home/megamozg/Downloads + SplitterState=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\x1\xc6\0\0\x1\x83\0\xff\xff\xff\xff\x1\0\0\0\x1\0) + TopLevel=true + TreeHeaderState="@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x6\x34\0\0\0\x3\0\0\0\x2\0\0\0\x64\0\0\0\x4\0\0\0\x64\0\0\0\x5\0\0\0\x64\0\0\x1,\0\0\0\x6\x1\x1\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x6\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\x64)" + [Application] + FileLogger\Age=1 + FileLogger\AgeType=1 + FileLogger\Backup=true + FileLogger\DeleteOld=true + FileLogger\Enabled=true + FileLogger\MaxSizeBytes=66560 + FileLogger\Path=/home/megamozg/.local/share/qBittorrent/logs + GUI\Notifications\TorrentAdded=false + [BitTorrent] + Session\MaxActiveDownloads=1 + Session\MaxActiveTorrents=8 + Session\MaxActiveUploads=2 + Session\Port=37977 + Session\QueueingSystemEnabled=true + Session\TorrentContentLayout=Subfolder + [Core] + AutoDeleteAddedTorrentFile=Never + [GUI] + DownloadTrackerFavicon=false + Log\Enabled=false + MainWindow\FiltersSidebarVisible=false + StartUpWindowState=Normal + UIThemeDialog\Size=@Size(718 559) + [LegalNotice] + Accepted=true + [MainWindow] + LastDir=/home/megamozg/Downloads + geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\ai\0\0\x3\xf5\0\0\0\0\0\0\0\0\0\0\a\x7f\0\0\x4\x37\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\ai\0\0\x3\xf5) + [Meta] + MigrationVersion=6 + [OptionsDialog] + HorizontalSplitterSizes=119, 634 + LastViewedPage=4 + Size=@Size(779 591) + [Preferences] + Advanced\TrayIconStyle=MonoDark + Advanced\useSystemIconTheme=true + Bittorrent\CustomizeTrackersListUrl=https://ngosang.github.io/trackerslist/trackers_best.txt + General\CloseToTray=false + General\ExitConfirm=false + General\Locale=en + General\StatusbarDisplayed=false + General\ToolbarDisplayed=false + [RSS] + AutoDownloader\DownloadRepacks=true + AutoDownloader\SmartEpisodeFilter=s(\\d+)e(\\d+), (\\d+)x(\\d+), "(\\d{4}[.\\-]\\d{1,2}[.\\-]\\d{1,2})", "(\\d{1,2}[.\\-]\\d{1,2}[.\\-]\\d{4})" + [TorrentProperties] + CurrentTab=0 + Peers\qt5\PeerListState=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x10@\x80\0\0\0\x2\0\0\0\x6\0\0\0\x64\0\0\0\xf\0\0\0\x64\0\0\x5x\0\0\0\x10\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x10\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\xff\xff\xff\xff) + SplitterSizes="681,361" + Trackers\qt5\TrackerListState=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x3 \0\0\0\b\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\b\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\x64) + Visible=true + qt5\FilesListState=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x2X\0\0\0\x6\x1\x1\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\x6\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\0\x64\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\x64) + [TransferList] + SubSortColumn=8 + SubSortOrder=0 + qt5\HeaderState=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\x1\0\0\0\"\0\0\0\0\0\0\0\x1\0\0\0\x4\0\0\0\x5\0\0\0\x3\0\0\0\x2\0\0\0\a\0\0\0\b\0\0\0\t\0\0\0\n\0\0\0\v\0\0\0\f\0\0\0\r\0\0\0\xe\0\0\0\xf\0\0\0\x10\0\0\0\x11\0\0\0\x12\0\0\0\x13\0\0\0\x14\0\0\0\x15\0\0\0\x16\0\0\0\x17\0\0\0\x6\0\0\0\x18\0\0\0\x19\0\0\0\x1a\0\0\0\x1b\0\0\0\x1c\0\0\0\x1d\0\0\0\x1e\0\0\0\x1f\0\0\0 \0\0\0!\0\0\0\"\0\0\0\0\0\0\0\x1\0\0\0\x5\0\0\0\x4\0\0\0\x2\0\0\0\x3\0\0\0\x17\0\0\0\x6\0\0\0\a\0\0\0\b\0\0\0\t\0\0\0\n\0\0\0\v\0\0\0\f\0\0\0\r\0\0\0\xe\0\0\0\xf\0\0\0\x10\0\0\0\x11\0\0\0\x12\0\0\0\x13\0\0\0\x14\0\0\0\x15\0\0\0\x16\0\0\0\x18\0\0\0\x19\0\0\0\x1a\0\0\0\x1b\0\0\0\x1c\0\0\0\x1d\0\0\0\x1e\0\0\0\x1f\0\0\0 \0\0\0!\0\0\0\"\xa0\xfd\xff\xff\x3\0\0\0\x1b\0\0\0\x10\0\0\0\x64\0\0\0\x11\0\0\0\x64\0\0\0\x1e\0\0\0\x64\0\0\0\x1f\0\0\0\x64\0\0\0\x1c\0\0\0\x64\0\0\0\x1d\0\0\0\x64\0\0\0\x1a\0\0\0\x64\0\0\0\x1b\0\0\0\x64\0\0\0\x18\0\0\0\x64\0\0\0\x19\0\0\0\x64\0\0\0\x6\0\0\0\x64\0\0\0\a\0\0\0\x64\0\0\0 \0\0\0\x64\0\0\0!\0\0\0\x64\0\0\0\x3\0\0\0\x64\0\0\0\xe\0\0\0\x64\0\0\0\xf\0\0\0\x64\0\0\0\f\0\0\0\x64\0\0\0\r\0\0\0\x64\0\0\0\n\0\0\0\x64\0\0\0\v\0\0\0\x64\0\0\0\t\0\0\0\x64\0\0\0\x16\0\0\0\x64\0\0\0\x14\0\0\0\x64\0\0\0\x15\0\0\0\x64\0\0\0\x12\0\0\0\x64\0\0\0\x13\0\0\0\x64\0\0\x3Z\0\0\0\"\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\xff\xff\xff\xff\0\0\0\x81\0\0\0\0\0\0\0\"\0\0\0+\0\0\0\x1\0\0\0\0\0\0\x1\x19\0\0\0\x1\0\0\0\0\0\0\0M\0\0\0\x1\0\0\0\0\0\0\0^\0\0\0\x1\0\0\0\0\0\0\0z\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0{\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0v\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\x64) + ''; + + # COLORSCHEME + "qBittorrent/themes/default/config.json".text = '' + { + "colors.dark": { + "Log.BannedPeer": "#b66467", + "Log.Critical": "#b66467", + "Log.Info": "#8da3b9", + "Log.TimeStamp": "#bbb6b6", + "Log.Warning": "#d9bc8c", + "TransferList.CheckingDownloading": "#8c977d", + "TransferList.CheckingResumeData": "#8c977d", + "TransferList.CheckingUploading": "#8c977d", + "TransferList.Downloading": "#d9bc8c", + "TransferList.DownloadingMetadata": "#d9bc8c", + "TransferList.Error": "#b66467", + "TransferList.ForcedDownloading": "#d9bc8c", + "TransferList.ForcedDownloadingMetadata": "#d9bc8c", + "TransferList.ForcedUploading": "#d9bc8c", + "TransferList.MissingFiles": "#b66467", + "TransferList.Moving": "#8aa6a2", + "TransferList.PausedDownloading": "#a988b0", + "TransferList.PausedUploading": "#a988b0", + "TransferList.QueuedDownloading": "#d9bc8c", + "TransferList.QueuedUploading": "#d9bc8c", + "TransferList.StalledDownloading": "#8c977d", + "TransferList.StalledUploading": "#bbb6b6", + "TransferList.Uploading": "#bbb6b6" + }, + "version": 2 + } + ''; + }; +} diff --git a/home/programs/gui/spotify/default.nix b/home/programs/gui/spotify/default.nix new file mode 100644 index 0000000..073b1b9 --- /dev/null +++ b/home/programs/gui/spotify/default.nix @@ -0,0 +1,48 @@ +{ pkgs, config, inputs, ... }: +let + spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.system}; +in +{ + imports = [ inputs.spicetify-nix.homeManagerModules.default ]; + programs.spicetify = { + enable = true; + theme = spicePkgs.themes.sleek; + colorScheme = "custom"; + customColorScheme = with config.lib.stylix.colors; { + # BASE 16 SCHEME + text = "${base07}"; + subtext = "${base06}"; + sidebar-text = "${base07}"; + main = "${base00}"; + sidebar = "${base02}"; + player = "${base00}"; + card = "${base00}"; + shadow = "${base00}"; + selected-row = "${base0C}"; + button = "${base0B}"; + button-active = "${base0B}"; + button-disabled = "${base03}"; + tab-active = "${base0A}"; + notification = "${base0A}"; + notification-error = "${base08}"; + misc = "${base02}"; + }; + enabledExtensions = with spicePkgs.extensions; [ + # OFFICIAL + fullAppDisplay + shuffle + + #COMMUNITY + adblockify + adblock + + historyShortcut + beautifulLyrics + playlistIcons + betterGenres + powerBar + seekSong + history + ]; + }; +} diff --git a/home/programs/gui/swayimg/default.nix b/home/programs/gui/swayimg/default.nix new file mode 100644 index 0000000..f5d98d8 --- /dev/null +++ b/home/programs/gui/swayimg/default.nix @@ -0,0 +1,220 @@ +{ config, ... }: +{ + xdg.configFile = with config.lib.stylix.colors; { + "swayimg/config".text = '' + ################################################################################ + # General configuration + ################################################################################ + [general] + # Mode at startup (viewer/gallery) + mode = viewer + # Window position (parent or absolute coordinates, e.g. 100,200) + position = parent + # Window size (fullscreen/parent/image, or absolute size, e.g. 800,600) + size = fullscreen + # Action performed by SIGUSR1 signal (same format as for key bindings) + sigusr1 = reload + # Action performed by SIGUSR2 signal (same format as for key bindings) + sigusr2 = next_file + # Application ID and window class name + app_id = swayimg + + ################################################################################ + # Viewer mode configuration + ################################################################################ + [viewer] + # Window background color (RGBA) + window = #000000ff + # Background for transparent images (grid/RGBA) + transparency = grid + # Default image scale (optimal/fit/width/height/fill/real) + scale = optimal + # Fix position of the image on the window surface (yes/no) + fixed = yes + # Anti-aliasing (yes/no) + antialiasing = no + # Run slideshow at startup (yes/no) + slideshow = no + # Slideshow image display time (seconds) + slideshow_time = 3 + # Number of previously viewed images to store in cache + history = 1 + # Number of preloaded images (read ahead) + preload = 1 + + ################################################################################ + # Gallery mode configuration + ################################################################################ + [gallery] + # Max size of the thumbnail (pixels) + size = 200 + # Max number of thumbnails in cache, 0 to unlimit + cache = 100 + # Fill the entire tile with thumbnail (yes/no) + fill = yes + # Use anti-aliasing for thumbnails (yes/no) + antialiasing = yes + # Background color of the window (RGBA) + window = #${base00}ff + # Background color of the tile (RGBA) + background = #${base01}ff + # Background color of the selected tile (RGBA) + select = #${base02}ff + # Border color of the selected tile (RGBA) + border = #${base0E}ff + # Shadow color of the selected tile (RGBA) + shadow = #${base00}a0 + + ################################################################################ + # Image list configuration + ################################################################################ + [list] + # Default order (none/alpha/reverse/random) + order = alpha + # Looping list of images (yes/no) + loop = yes + # Read directories recursively (yes/no) + recursive = no + # Open all files in the start directory (yes/no) + all = yes + + ################################################################################ + # Font configuration + ################################################################################ + [font] + # Font name + name = JetBrainsMono NerdFont + # Font size (pt) + size = 14 + # Font color (RGBA) + color = #${base06}ff + # Shadow color (RGBA) + shadow = #${base00}a0 + + ################################################################################ + # Image meta info scheme (format, size, EXIF, etc) + ################################################################################ + [info] + # Show on startup (yes/no) + show = yes + # Timeout to hide info (seconds, 0 to always show) + info_timeout = 5 + # Timeout to hide status message (seconds) + status_timeout = 3 + + # Display scheme for viewer mode (position = content) + [info.viewer] + top_left = none + top_right = index + bottom_left = none + bottom_right = none + + # Display scheme for gallery mode (position = content) + [info.gallery] + top_left = none + top_right = index + bottom_left = none + bottom_right = none + + ################################################################################ + # Viewer mode key binding configuration: key = action [parameters] + ################################################################################ + [keys.viewer] + F1 = help + Home = first_file + g = first_file + End = last_file + Shift+g = last_file + Prior = prev_file + Next = next_file + h = zoom +10 + j = next_file + k = prev_file + l = zoom -10 + Space = next_file + Shift+d = prev_dir + d = next_dir + Shift+o = prev_frame + o = next_frame + c = skip_file + Shift+s = slideshow + s = animation + f = fullscreen + Return = mode + Left = step_left 10 + Right = step_right 10 + Up = step_up 10 + Down = step_down 10 + Equal = zoom +10 + Plus = zoom +10 + Minus = zoom -10 + w = zoom width + Shift+w = zoom height + z = zoom fit + Shift+z = zoom fill + 0 = zoom real + BackSpace = zoom optimal + bracketleft = rotate_left + bracketright = rotate_right + m = flip_vertical + Shift+m = flip_horizontal + a = antialiasing + r = reload + i = info + Shift+Delete = exec rm "%"; skip_file + Escape = exit + q = exit + # Mouse related + ScrollLeft = step_right 5 + ScrollRight = step_left 5 + ScrollUp = step_up 5 + ScrollDown = step_down 5 + Ctrl+ScrollUp = zoom +10 + Ctrl+ScrollDown = zoom -10 + Shift+ScrollUp = prev_file + Shift+ScrollDown = next_file + Alt+ScrollUp = prev_frame + Alt+ScrollDown = next_frame + + ################################################################################ + # Gallery mode key binding configuration: key = action [parameters] + ################################################################################ + [keys.gallery] + F1 = help + + Home = first_file + g = first_file + + End = last_file + Shift+g = last_file + + Left = step_left + Right = step_right + Up = step_up + Down = step_down + + h = step_left + j = step_down + k = step_up + l = step_right + Prior = page_up + Next = page_down + + c = skip_file + f = fullscreen + Return = mode + a = antialiasing + r = reload + + i = info + Shift+Delete = exec rm "%"; skip_file + Escape = exit + q = exit + # Mouse related + ScrollLeft = step_right + ScrollRight = step_left + ScrollUp = step_up + ScrollDown = step_down + ''; + }; +} diff --git a/home/programs/misc/dconf.nix b/home/programs/misc/dconf.nix new file mode 100644 index 0000000..98d1ab5 --- /dev/null +++ b/home/programs/misc/dconf.nix @@ -0,0 +1,11 @@ +{ ... }: +{ + dconf = { + enable = true; + settings = { + "org/gnome/desktop/wm/preferences" = { + button-layout = ""; + }; + }; + }; +} diff --git a/home/programs/misc/default.nix b/home/programs/misc/default.nix new file mode 100644 index 0000000..edfd6a1 --- /dev/null +++ b/home/programs/misc/default.nix @@ -0,0 +1,9 @@ +{ + imports =[ + ./dconf.nix + ./nwg.nix + ./nix.nix + ./xdg.nix + # ./env.nix + ]; +} diff --git a/home/programs/misc/env.nix b/home/programs/misc/env.nix new file mode 100644 index 0000000..73591f8 --- /dev/null +++ b/home/programs/misc/env.nix @@ -0,0 +1,7 @@ +{ ... }: +{ + home.sessionVariables = { + MICRO_TRUECOLOR = "1"; + QT_QPA_PLATFORMTHEME = "qt5ct"; + }; +} diff --git a/home/programs/misc/nix.nix b/home/programs/misc/nix.nix new file mode 100644 index 0000000..a5d79b3 --- /dev/null +++ b/home/programs/misc/nix.nix @@ -0,0 +1,27 @@ +{ pkgs, ... }: +{ + nix = { + package = pkgs.nix; + settings = { + warn-dirty = false; + experimental-features = [ "nix-command" "flakes" ]; + extra-experimental-features = [ "nix-command" "flakes" ]; + builders-use-substitutes = true; + auto-optimise-store = true; + extra-substituters = [ + "https://yazi.cachix.org" + ]; + extra-trusted-public-keys = [ + "yazi.cachix.org-1:Dcdz63NZKfvUCbDGngQDAZq6kOroIrFoyO064uvLh8k=" + ]; + trusted-users = [ + "megamozg" + "@wheel" + ]; + }; + }; + nixpkgs.config = { + allowBroken = true; + allowUnfree = true; + }; +} diff --git a/home/programs/misc/nwg.nix b/home/programs/misc/nwg.nix new file mode 100644 index 0000000..a4e4a7f --- /dev/null +++ b/home/programs/misc/nwg.nix @@ -0,0 +1,21 @@ +{ pkgs, config, lib, ... }: +{ + xdg.configFile = { + "nwg-drawer/drawer.css".text = '' + window { + background-color: #${config.lib.stylix.colors.base00}; + color: #eeeeee; + } + + button { + color: #${config.lib.stylix.colors.base04}; + background-color: #${config.lib.stylix.colors.base00}; + } + + button:hover { + color: #${config.lib.stylix.colors.base04}; + background-color: #${config.lib.stylix.colors.base01}; + } + ''; + }; +} diff --git a/home/programs/misc/xdg.nix b/home/programs/misc/xdg.nix new file mode 100644 index 0000000..54765e6 --- /dev/null +++ b/home/programs/misc/xdg.nix @@ -0,0 +1,29 @@ +{ pkgs, config, ... }: +{ + xdg = { + portal = { + enable = true; + # xdgOpenUsePortal = true; + config.common.default = "gtk"; + extraPortals = with pkgs; [ + xdg-desktop-portal-hyprland + xdg-desktop-portal-gtk + ]; + }; + mime = { + enable = true; + }; + userDirs = { + enable = true; + createDirectories = true; + desktop = "${config.home.homeDirectory}/Desktop"; + documents = "${config.home.homeDirectory}/Documents"; + download = "${config.home.homeDirectory}/Downloads"; + music = "${config.home.homeDirectory}/Music"; + pictures = "${config.home.homeDirectory}/Pictures"; + publicShare = "${config.home.homeDirectory}/"; + templates = "${config.home.homeDirectory}/"; + videos = "${config.home.homeDirectory}/Videos"; + }; + }; +} diff --git a/home/programs/shells/default.nix b/home/programs/shells/default.nix new file mode 100644 index 0000000..f603f38 --- /dev/null +++ b/home/programs/shells/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./starship.nix + + # ./zsh + ./fish + ]; +} diff --git a/home/programs/shells/fish/default.nix b/home/programs/shells/fish/default.nix new file mode 100644 index 0000000..9f949e4 --- /dev/null +++ b/home/programs/shells/fish/default.nix @@ -0,0 +1,82 @@ +{ + programs.fish = { + enable = true; + shellAliases = { + e = "$EDITOR"; + sudo = "doas"; + + cp = "cpz"; + rm = "rmz"; + + c = "clear"; + x = "exit"; + + nhs = "nh home switch"; + nos = "nh os switch"; + nca = "nh clean all"; + + ls = "eza --icons=always --group-directories-first"; + lsl = "eza --icons=always -l --group-directories-first"; + lst = "eza --icons=always -T --group-directories-first"; + + ls1 = "eza --icons=always -1 --group-directories-first"; + ls11 = "eza --icons=never -1 --group-directories-first"; + lsd = "eza --icons=never -D1 --group-directories-first"; + lsf = "eza --icons=never -f1 --group-directories-first"; + + cat = "bat --theme base16"; + + ff = "fastfetch"; + + r = "ranger"; + y = "yazi"; + j = "joshuto"; + nxt = "nix-tree"; + + m = "micro"; + v = "nvim"; + h = "hx"; + + fsf = "fastfetch"; + cpf = "cpufetch"; + cav = "cava"; + pmx = "pulsemixer"; + blt = "bluetuith"; + + gl = "git clone"; + ga = "git add ."; + gA = "git add"; + gc = "git commit -m"; + gC = "git commit -m 'update  '"; + gp = "git push"; + gP = "git pull"; + + lut = "lutgen apply -p paradise"; + lutall = "lutgen apply -p paradise ./*"; + icat = "kitten icat"; + + btp = "btop"; + nvt = "nvtop -i"; + + ter = "tenki --mode rain --wind disable --timer-color cyan -f 80"; + tes = "tenki --mode snow --wind disable --timer-color yellow -f 80"; + tem = "tenki --mode meteor --wind disable --timer-color red -f 80"; + + rmr = "trash restore"; + rmp = "trash put"; + tre = "trash empty -all"; + + nxr = "nix run"; + nxf = "nix-prefetch-github"; + }; + interactiveShellInit = '' + set fish_greeting + [ "$(tty)" = /dev/tty1 ] && exec Hyprland + ''; + }; + xdg.configFile = { + "lutgen/paradise".text = '' + 151515 1F1F1F 2E2E2E 424242 BBB6B6 E8E3E3 E8E3E3 E8E3E3 B66467 D9BC8C D9BC8C 8C977D 8AA6A2 8DA3B9 A988B0 BBB6B6 + ''; + }; +} diff --git a/home/programs/shells/starship.nix b/home/programs/shells/starship.nix new file mode 100644 index 0000000..58e1296 --- /dev/null +++ b/home/programs/shells/starship.nix @@ -0,0 +1,70 @@ +{ lib, ... }: +{ + programs.starship = { + enable = true; + enableFishIntegration = true; + enableZshIntegration = true; + settings = { + add_newline = true; + format = lib.concatStrings [ + "$shell" + "$username" + "$directory" + "$git_branch" + "$package" + "$cmd_duration" + "$line_break" + "$character" + ]; + shell = { + fish_indicator = "\[fish\]($style)"; + zsh_indicator = "\[zsh\]($style)"; + bash_indicator = "\[bash\]($style)"; + nu_indicator = "\[nu\]($style)"; + unknown_indicator = "\[sh ?\]"; + style = "bold fg:purple"; + disabled = false; + }; + username = { + style_user = "bold red"; + style_root = "bold red"; + format = "[$user]($style) in "; + show_always = true; + disabled = false; + }; + directory = { + format = "[$path]($style) [$read_only]($read_only_style)"; + style = "bold fg:blue"; + read_only = "[󰌾] "; + read_only_style = "bold red"; + home_symbol = "~~"; + truncation_length = 2; + truncation_symbol = "../"; + disabled = false; + }; + git_branch = { + format = "on [$symbol$branch]($style) "; + style = "bold italic fg:green"; + symbol = " "; + truncation_length = 4; + truncation_symbol = ""; + disabled = false; + }; + package = { + format = "via [󰏗 $version](bold fg:yellow) "; + }; + cmd_duration = { + min_time = 1000; + format = "took [$duration](bold fg:yellow)"; + disabled = false; + }; + character = { + format = "$symbol "; + success_symbol = "[❯❯❯](bold green)"; + error_symbol = "[❯❯❯](bold red)"; + vimcmd_symbol = "[❯❯❯](bold yellow)"; + disabled = false; + }; + }; + }; +} diff --git a/home/programs/shells/zsh/default.nix b/home/programs/shells/zsh/default.nix new file mode 100644 index 0000000..3b39b11 --- /dev/null +++ b/home/programs/shells/zsh/default.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: +{ + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + completionInit = "autoload -U compinit && compinit"; + zplug = { + enable = true; + plugins = [ + { name = "nix-community/nix-zsh-completions"; } + { name = " jnooree/zoxide-zsh-completion"; } + { name = "toku-sa-n/zsh-dot-up"; } + { name = "anatolykopyl/doas-zsh-plugin"; } + { name = " zshzoo/cd-ls"; } + ]; + }; + }; +} diff --git a/home/themes/default.nix b/home/themes/default.nix new file mode 100644 index 0000000..7e2a0c1 --- /dev/null +++ b/home/themes/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./stylix/stylix.nix + ./gtk.nix + + ./qt + ]; +} diff --git a/home/themes/gtk.nix b/home/themes/gtk.nix new file mode 100644 index 0000000..18ebf2a --- /dev/null +++ b/home/themes/gtk.nix @@ -0,0 +1,32 @@ +{ pkgs, lib, ... }: +{ + home.packages = with pkgs; [ + adw-gtk3 + google-cursor + papirus-folders + papirus-icon-theme + + noto-fonts + noto-fonts-cjk + openmoji-color + + monaspace + (nerdfonts.override { fonts = [ "FiraCode" "JetBrainsMono" ]; }) + ]; + gtk = { + enable = true; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + font = lib.mkForce { + name = "JetBrainsMono NerdFont"; + package = pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; }; + size = 12; + }; + }; + # fonts.fontconfig = { + # enable = true; + # defaultFonts.emoji = [ "OpenMoji Color" ]; + # }; +} diff --git a/home/themes/qt/default.nix b/home/themes/qt/default.nix new file mode 100644 index 0000000..0d85ecb --- /dev/null +++ b/home/themes/qt/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./qt5ct.nix + ./qt6ct.nix + ./qt.nix + ]; +} diff --git a/home/themes/qt/qt.nix b/home/themes/qt/qt.nix new file mode 100644 index 0000000..a4e458f --- /dev/null +++ b/home/themes/qt/qt.nix @@ -0,0 +1,9 @@ +{ + qt = { + enable = true; + platformTheme.name = "qtct"; + # style = { + # name = "kvantum"; + # }; + }; +} diff --git a/home/themes/qt/qt5ct.nix b/home/themes/qt/qt5ct.nix new file mode 100644 index 0000000..726204e --- /dev/null +++ b/home/themes/qt/qt5ct.nix @@ -0,0 +1,49 @@ +{ pkgs, config, ... }: +{ + xdg.configFile = with config.lib.stylix.colors; { + "qt5ct/colors/paradise.conf".text = '' + [ColorScheme] + active_colors=#ff${base06}, #ff${base01}, #ff${base01}, #ff${base00}, #ff${base03}, #ff${base0C}, #ff${base06}, #ff${base06}, #${base06}, #ff${base00}, #ff${base01}, #ff${base00}, #ff${base02}, #ff${base06}, #ff${base0B}, #ff, #ff151515, #ffe8e3e3, #ff181926, #ffe8e3e3, #80151515 + disabled_colors=#ff808080, #ff1f1f1f, #ff1f1f1f, #ff151515, #ff424242, #ff6e738d, #ff808080, #ffe8e3e3, #ff808080, #ff151515, #ff1f1f1f, #ff151515, #ff2e2e2e, #ff808080, #ff8c977d, #ffed8796, #ff151515, #ffe8e3e3, #ff181926, #ffe8e3e3, #80151515 + inactive_colors=#ffe8e3e3, #ff1f1f1f, #ff1f1f1f, #ff151515, #ff424242, #ff6e738d, #ffe8e3e3, #ffe8e3e3, #ffe8e3e3, #ff151515, #ff1f1f1f, #ff151515, #ff2e2e2e, #ffbbb6b6, #ff8c977d, #ffed8796, #ff151515, #ffe8e3e3, #ff181926, #ffe8e3e3, #80151515 + ''; + "qt5ct/qt5ct.conf".text = '' + [Appearance] + color_scheme_path=/home/megamozg/.config/qt5ct/colors/paradise.conf + custom_palette=true + icon_theme=Papirus-Dark + standard_dialogs=default + style=Fusion + + [Fonts] + fixed="JetBrainsMono Nerd Font Mono,12,-1,5,50,0,0,0,0,0,Regular" + general="JetBrainsMono Nerd Font,12,-1,5,50,0,0,0,0,0,Regular" + + [Interface] + activate_item_on_single_click=1 + buttonbox_layout=0 + cursor_flash_time=1000 + dialog_buttons_have_icons=1 + double_click_interval=400 + gui_effects=@Invalid() + keyboard_scheme=2 + menus_have_icons=true + show_shortcuts_in_context_menus=true + stylesheets=@Invalid() + toolbutton_style=4 + underline_shortcut=1 + wheel_scroll_lines=3 + stylesheets=${pkgs.qt5ct}/share/qt5ct/qss/scrollbar-simple.qss, ${pkgs.qt5ct}/share/qt5ct/qss/sliders-simple.qss, ${pkgs.qt5ct}/share/qt5ct/qss/tooltip-simple.qss, ${pkgs.qt5ct}/share/qt5ct/qss/traynotification-simple.qss + + [PaletteEditor] + geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10) + + [SettingsWindow] + geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\xad\0\0\x3\xf5\0\0\0\0\0\0\0\0\0\0\x3\xbf\0\0\x4\v\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x3\xad\0\0\x3\xf5) + + [Troubleshooting] + force_raster_widgets=1 + ignored_applications=@Invalid() + ''; + }; +} diff --git a/home/themes/qt/qt6ct.nix b/home/themes/qt/qt6ct.nix new file mode 100644 index 0000000..a858061 --- /dev/null +++ b/home/themes/qt/qt6ct.nix @@ -0,0 +1,49 @@ +{ pkgs, ... }: +{ + xdg.configFile = { + "qt6ct/colors/paradise.conf".text = '' + [ColorScheme] + active_colors=#ffe8e3e3, #ff1f1f1f, #ff1f1f1f, #ff151515, #ff424242, #ff6e738d, #ffe8e3e3, #ffe8e3e3, #ffe8e3e3, #ff151515, #ff1f1f1f, #ff151515, #ff2e2e2e, #ffbbb6b6, #ff8c977d, #ffed8796, #ff151515, #ffe8e3e3, #ff181926, #ffe8e3e3, #80151515 + disabled_colors=#ff808080, #ff1f1f1f, #ff1f1f1f, #ff151515, #ff424242, #ff6e738d, #ff808080, #ffe8e3e3, #ff808080, #ff151515, #ff1f1f1f, #ff151515, #ff2e2e2e, #ff808080, #ff8c977d, #ffed8796, #ff151515, #ffe8e3e3, #ff181926, #ffe8e3e3, #80151515 + inactive_colors=#ffe8e3e3, #ff1f1f1f, #ff1f1f1f, #ff151515, #ff424242, #ff6e738d, #ffe8e3e3, #ffe8e3e3, #ffe8e3e3, #ff151515, #ff1f1f1f, #ff151515, #ff2e2e2e, #ffbbb6b6, #ff8c977d, #ffed8796, #ff151515, #ffe8e3e3, #ff181926, #ffe8e3e3, #80151515 + ''; + "qt6ct/qt6ct.conf".text = '' + [Appearance] + color_scheme_path=/home/megamozg/.config/qt6ct/colors/paradise.conf + custom_palette=true + icon_theme=Papirus-Dark + standard_dialogs=default + style=Fusion + + [Fonts] + fixed="JetBrainsMono Nerd Font Mono,12,-1,5,50,0,0,0,0,0,Regular" + general="JetBrainsMono Nerd Font,12,-1,5,50,0,0,0,0,0,Regular" + + [Interface] + activate_item_on_single_click=1 + buttonbox_layout=0 + cursor_flash_time=1000 + dialog_buttons_have_icons=1 + double_click_interval=400 + gui_effects=@Invalid() + keyboard_scheme=2 + menus_have_icons=true + show_shortcuts_in_context_menus=true + stylesheets=@Invalid() + toolbutton_style=4 + underline_shortcut=1 + wheel_scroll_lines=3 + stylesheets=${pkgs.qt6ct}/share/qt6ct/qss/scrollbar-simple.qss, ${pkgs.qt6ct}/share/qt6ct/qss/sliders-simple.qss, ${pkgs.qt6ct}/share/qt6ct/qss/tooltip-simple.qss, ${pkgs.qt6ct}/share/qt6ct/qss/traynotification-simple.qss + + [PaletteEditor] + geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2v\0\0\x2\x10) + + [SettingsWindow] + geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\xad\0\0\x3\xf5\0\0\0\0\0\0\0\0\0\0\x3\xbf\0\0\x4\v\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x3\xad\0\0\x3\xf5) + + [Troubleshooting] + force_raster_widgets=1 + ignored_applications=@Invalid() + ''; + }; +} diff --git a/home/themes/stylix/paradise.nix b/home/themes/stylix/paradise.nix new file mode 100644 index 0000000..b1a8ca0 --- /dev/null +++ b/home/themes/stylix/paradise.nix @@ -0,0 +1,25 @@ +{ inputs, ... }: +let walls = inputs.nix-wallpapers; in +{ + stylix = { + image = "${walls}/desktop/cassette.jpg"; + base16Scheme = { + base00 = "#151515"; + base01 = "#1F1F1F"; + base02 = "#2E2E2E"; + base03 = "#424242"; + base04 = "#BBB6B6"; + base05 = "#E8E3E3"; + base06 = "#E8E3E3"; + base07 = "#E8E3E3"; + base08 = "#B66467"; + base09 = "#D9BC8C"; + base0A = "#D9BC8C"; + base0B = "#8C977D"; + base0C = "#8AA6A2"; + base0D = "#8DA3B9"; + base0E = "#A988B0"; + base0F = "#BBB6B6"; + }; + }; +} diff --git a/home/themes/stylix/stylix.nix b/home/themes/stylix/stylix.nix new file mode 100644 index 0000000..71c6d65 --- /dev/null +++ b/home/themes/stylix/stylix.nix @@ -0,0 +1,55 @@ +{ config, pkgs, inputs, ... }: +{ + imports = [ + inputs.stylix.homeManagerModules.stylix + ./paradise.nix + ]; + stylix = { + enable = true; + autoEnable = false; + cursor = { + name = "GoogleDot-Black"; + package = pkgs.google-cursor; + size = 21; + }; + fonts = { + serif = { + name = "JetBrainsMono NerdFont"; + package = pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; }; + }; + monospace = config.stylix.fonts.serif; + emoji = { + name = "OpenMoji Color"; + package = pkgs.noto-fonts-emoji; + }; + sizes = { + desktop = 10; + popups = 10; + applications = 12; + terminal = 12; + }; + }; + targets = { + tmux.enable = true; + fish.enable = true; + nushell.enable = true; + hyprland.enable = true; + sway.enable = true; + # waybar = { enable = true; enableCenterBackColors = true; enableLeftBackColors = true; enableRightBackColors = true; }; + foot.enable = true; + kitty = { enable = true; variant256Colors = false; }; + gtk.enable = true; + # kde.enable = true; + # helix.enable = true; + nixvim.enable = true; + yazi.enable = true; + fzf.enable = true; + bat.enable = true; + mako.enable = true; + mangohud.enable = true; + vesktop.enable = true; + qutebrowser.enable = true; + firefox = { enable = true; }; + }; + }; +} diff --git a/home/window-managers/default.nix b/home/window-managers/default.nix new file mode 100644 index 0000000..1f0c008 --- /dev/null +++ b/home/window-managers/default.nix @@ -0,0 +1,31 @@ +{ pkgs, inputs, ... }: +{ + imports = [ + ./hyprland + # ./swayfx + ./terminals + ./misc + ]; + home.packages = with pkgs; [ + hyprcursor + + kitty + + swaybg + swaynotificationcenter + mako + + nwg-drawer + inputs.anyrun.packages."x86_64-linux".anyrun + + grimblast + # sway-contrib.grimshot + wf-recorder + + light + # swaylock + fprintd + wl-clipboard + hyprpicker + ]; +} diff --git a/home/window-managers/hyprland/binds.nix b/home/window-managers/hyprland/binds.nix new file mode 100644 index 0000000..8f5474f --- /dev/null +++ b/home/window-managers/hyprland/binds.nix @@ -0,0 +1,152 @@ +{ pkgs, config, ... }: +{ + wayland.windowManager.hyprland.settings = { + # SHORTCUTS + "$m" = "SUPER"; + "$s" = "SHIFT"; + "$a" = "ALT"; + "$c" = "CTRL"; + + "$rt" = "RETURN"; + "$sp" = "SPACE"; + "$tb" = "TAB"; + + "$nx" = "Next"; + "$pr" = "Prior"; + "$p" = "Print"; + + "$md" = "mouse_down"; + "$mu" = "mouse_up"; + + # MOUSE + bindm = [ + "$m, mouse:272, movewindow" + "$m, mouse:273, resizewindow" + "$m $s, mouse:273, resizewindow 1" + ]; + + # KEYBOARD + bind = [ + # BUILTIN COMMANDS + "$m, $sp, togglefloating" + "$m $s, $sp, hyprexpo:expo, toggle" + "$m, Q, killactive" + "$m, C, centerwindow" + "$m, F, fullscreen" + "$m, X, pseudo" + "$m, P, pin" + + "$m, O, cyclenext" + "$m $s, O, swapnext " + + "$m, G, togglegroup" + "$m $s, G, changegroupactive" + "$m $a, G, moveoutofgroup" + + "$m, D, togglespecialworkspace, extra" + "$m $s, D, movetoworkspace, special:extra" + + "$m, S, togglespecialworkspace, magic" + "$m $s, S, movetoworkspace, special:magic" + + "$m, $md, workspace, e+1" + "$m, $mu, workspace, e-1" + + "$m, $nx, workspace, e+1" + "$m, $pr, workspace, e-1" + + # PROGRAMS + "$m, $rt, exec, kitty -T Terminal" + "$m $s, $rt, exec, kitty --class=termfloat -T Terminal" + + "$m, $tb, exec, nwg-drawer -ovl -nocats -nofs -d -c 7 -mb -49" + "$m $s, $tb, exec, anyrun" + + "$m, V, exec, ayugram-desktop" + "$m $s, V, exec, vesktop" + + "$m, B, exec, firefox" + "$m $s, B, exec, chromium" + + "$m, N, exec, kitty -T Explorer joshuto" + "$m $s, N, exec, kitty --class=tfm -T Explorer joshuto" + "$m $a, N, exec, nemo" + + "$m, M, exec, spotify" + "$m $s, M, exec, obsidian" + + "$m, A, exec, kitty --class=anicliru -T Anime anicli-ru -q 1080" + + "$m, Z, exec, kitty --class=miniprogs -T Sound pulsemixer --no-mouse" + "$m $s, Z, exec, kitty --class=miniprogs -T Bluetooth bluetuith" + + "$m, T, exec, bottles" + "$m $s, T, exec, prismlauncher" + + "$m, XF86WakeUp, exec, playerctl play-pause" + "$m, XF86Go, exec, playerctl next" + "$m, Cancel, exec, playerctl previous" + + ", $p, exec, grimblast copysave area $(xdg-user-dir PICTURES)/$(date +'scr_%d-%m-%y|%H:%M:%S.png')" + "$s, $p, exec, grimblast copysave output $(xdg-user-dir PICTURES)/$(date +'scr_%d-%m-%y|%H:%M:%S.png')" + "$a, $p, exec, grimblast copysave active $(xdg-user-dir PICTURES)/$(date +'scr_%d-%m-%y|%H:%M:%S.png')" + "$a $s, $p, exec, hyprpicker -a" + ] + ++ ( builtins.concatLists (builtins.genList (i: let ws = i + 1; in [ + "$mod, code:1${toString i}, workspace, ${toString ws}" + "$mod SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}" + ] ) 9) ); + + # HOLDING BUTTONS + binde = [ + # HJKL + "$m, H, movefocus, l" + "$m, J, movefocus, d" + "$m, K, movefocus, u" + "$m, L, movefocus, r" + + "$m $s, H, swapwindow, l" + "$m $s, J, swapwindow, d" + "$m $s, K, swapwindow, u" + "$m $s, L, swapwindow, r" + + "$m $a, H, resizeactive, -50 0" + "$m $a, J, resizeactive, 0 50" + "$m $a, K, resizeactive, 0 -50" + "$m $a, L, resizeactive, 50 0" + + # ARROWS + "$m, left, movefocus, l" + "$m, down, movefocus, d" + "$m, up, movefocus, u" + "$m, right, movefocus, r" + + "$m $s, left, swapwindow, l" + "$m $s, down, swapwindow, d" + "$m $s, up, swapwindow, u" + "$m $s, right, swapwindow, r" + + "$m $a, left, resizeactive, -50 0" + "$m $a, down, resizeactive, 0 50" + "$m $a, up, resizeactive, 0 -50" + "$m $a, right, resizeactive, 50 0" + + # BRIGHTNESS + ", XF86MonBrightnessDown, exec, doas light -U 10" + ", XF86MonBrightnessUp, exec, doas light -A 10" + + # SOUND + ", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+" + ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" + + "$s, XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 10%+" + "$s, XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 10%-" + + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ", XF86AudioMicMute, exec, fixf4=$(cat /sys/class/leds/platform\:\:micmute/brightness); echo $((1-fixf4)) | doas tee /sys/class/leds/platform\:\:micmute/brightness; wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ]; + bindl = [ + # ", switch:on:Lid Switch, exec, hyprctl keyword input:kb_variant = us && hyprlock" + ]; + }; +} diff --git a/home/window-managers/hyprland/default.nix b/home/window-managers/hyprland/default.nix new file mode 100644 index 0000000..a0e489e --- /dev/null +++ b/home/window-managers/hyprland/default.nix @@ -0,0 +1,15 @@ +{ pkgs, inputs, ... }: +let + hpkg = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}; +in +{ + imports = [ ./binds.nix ./rules.nix ./settings.nix ./plugins.nix ]; + wayland.windowManager.hyprland = { + enable = true; + package = hpkg.hyprland; + xwayland.enable = true; + systemd.enable = true; + }; + home.packages = with pkgs; [ + ]; +} diff --git a/home/window-managers/hyprland/plugins.nix b/home/window-managers/hyprland/plugins.nix new file mode 100644 index 0000000..3b23e46 --- /dev/null +++ b/home/window-managers/hyprland/plugins.nix @@ -0,0 +1,70 @@ +{ pkgs, inputs, config, ... }: +{ + wayland.windowManager.hyprland = with config.lib.stylix.colors; { + plugins = with inputs; [ + hyprfocus.packages.${pkgs.system}.default + hyprland-plugins.packages.${pkgs.system}.hyprexpo + ]; + settings.plugin = { + # FOCUS + hyprfocus = { + enabled = "yes"; + animate_floating = "yes"; + animate_workspacechange = "yes"; + focus_animation = "focus"; + bezier = [ + "bezIn, 0.5,0.0,1.0,0.5" + "bezOut, 0.0,0.5,0.5,1.0" + "overshot, 0.05, 0.9, 0.1, 1.05" + "smoothOut, 0.36, 0, 0.66, -0.56" + "smoothIn, 0.25, 1, 0.5, 1" + "realsmooth, 0.28,0.29,.69,1.08" + ]; + flash = { + flash_opacity = 0.95; + in_bezier = "realsmooth"; + in_speed = 0.5; + out_bezier = "realsmooth"; + out_speed = 3; + }; + shrink = { + shrink_percentage = 0.95; + in_bezier = "realsmooth"; + in_speed = 1; + out_bezier = "realsmooth"; + out_speed = 2; + }; + }; + + # EXPO LIKE IDK + hyprexpo = { + columns = 3; + gap_size = 5; + bg_col = "rgb(${base00})"; + workspace_method = "center current"; + + enable_gesture = true; + gesture_fingers = 3; + gesture_distance = 300; + gesture_positive = true; + }; + + # WINDOW TITLES + # hyprbars = { + # bar_height = 20; + # bar_color = "rgb(${base00})"; + # "col.text" = "rgb(${base06})"; + # bar_text_size = 12; + # bar_text_font = "JetBrainsMono NerdFont"; + # bar_text_align = "left"; + # bar_buttons_alignment = "left"; + # bar_part_of_window = true; + # bar_precedence_over_border = true; + # hyprbars-button = [ + # "rgb(${base08}), 10, 󰖭, hyprctl dispatch killactive" + # "rgb(${base0C}), 10, , hyprctl dispatch fullscreen 1" + # ]; + # }; + }; + }; +} diff --git a/home/window-managers/hyprland/rules.nix b/home/window-managers/hyprland/rules.nix new file mode 100644 index 0000000..adec13b --- /dev/null +++ b/home/window-managers/hyprland/rules.nix @@ -0,0 +1,40 @@ +{ config, lib, ... }: +{ + wayland.windowManager.hyprland.settings = with config.lib.stylix.colors; { + windowrulev2 = [ + # "rounding 8, floating:1" + # "noshadow, floating:0" + # "noanim, floating:0" + + "workspace 2 silent, class:^(firefox)$" + "workspace 3 silent, class:^(Spotify)$" + "workspace 4 silent, class:^(com.ayugram)$" + "workspace 4 silent, class:^(vesktop)$" + "workspace 5 silent, class:^(obsidian)$" + "workspace 6 silent, class:^(anicli)$" + + "float, class:^(termfloat)$" + "size 650 430, class:^(termfloat)$" + "move center, class:^(termfloat)$" + + "float, class:^(tfm)$" + "size 800 350, class:^(tfm)$" + "move center, class:^(tfm)$" + + "float, title:^(Media viewer)$" + "fullscreen, title:^(Media viewer)$" + "size 670 540, title:^(Media viewer)$" + + "float, class:^(xdg-desktop-portal-gtk)$" + "size 807 570, class:^(xdg-desktop-portal-gtk)$" + + "nodim, class:^(mpv)$" + "float, class:^(anicliru)$" + "size 660 630, class:^(anicliru)$" + "bordercolor rgb(${base08}) rgb(${base09}) 45deg, class:^(anicliru)$" + + "bordercolor rgb(${base0E}, title:^(Картинка в картинке)$" + "noshadow, title:^(Картинка в картинке)$" + ]; + }; +} diff --git a/home/window-managers/hyprland/settings.nix b/home/window-managers/hyprland/settings.nix new file mode 100644 index 0000000..c9e8838 --- /dev/null +++ b/home/window-managers/hyprland/settings.nix @@ -0,0 +1,125 @@ +{ config, lib, ... }: +{ + wayland.windowManager.hyprland = { + settings = with config.lib.stylix.colors; { + monitor = ", 1920x1080@60, auto, 1"; + env = [ "SLURP_ARGS, -b ${base00}CC -c ${base06}FF -B ${base0F}CC" ]; + exec-once = [ + "mako" + "waybar" + ]; + + # APPERANCE + general = { + gaps_in = 4; + gaps_out = 8; + border_size = 3; + layout = "dwindle"; + allow_tearing = false; + "col.active_border" = lib.mkForce "rgb(${base01})"; + "col.inactive_border" = lib.mkForce "rgb(${base01})"; + }; + decoration = { + rounding = 12; + drop_shadow = true; + shadow_ignore_window = true; + shadow_offset = "0 0"; + shadow_range = 10; + shadow_render_power = 8; + dim_inactive = true; + dim_strength = 0.3; + blur = { + enabled = true; + size = 18; + passes = 5; + noise = 0; + new_optimizations = true; + ignore_opacity = true; + xray = false; + vibrancy = 0.9; + popups = true; + special = true; + }; + }; + group = { + "col.border_active" = lib.mkForce "rgb(${base0C}) rgb(${base0B}) 45deg"; + "col.border_inactive" = lib.mkForce "rgb(${base01})"; + groupbar = { + gradients = false; + "col.active" = lib.mkForce "rgb(${base05})"; + "col.inactive" = lib.mkForce "rgb(${base01})"; + render_titles = false; + }; + }; + + # ANIMATIONS + animations = { + enabled = true; + first_launch_animation = false; + bezier = [ + "linear, 1, 1, 1, 1" + "over, 0, 0.1, 0.1, 0.3" + "myBezier, 0.05, 0.9, 0.1, 1.0" + ]; + animation = [ + "windowsIn, 1, 3, myBezier, popin 80%" + "windowsOut, 1, 3, myBezier, popin 80%" + "windowsMove, 1, 2, over" + + "border, 1, 3, myBezier" + "workspaces, 1, 2.7, default, slide" + "specialWorkspaceIn, 1, 1, default, fade" + "specialWorkspaceOut, 1, 1, default, fade" + + "fade, 1, 2, myBezier" + "fadeShadow, 1, 4, default" + ]; + }; + + # TRACKPOINT | TOUCHPAD | MOUSE + cursor.inactive_timeout = 1; + input = { + kb_layout = "us,ru"; + kb_options = "grp:caps_toggle"; + accel_profile = "adaptive"; + touchpad = { + natural_scroll = false; + disable_while_typing = true; + }; + }; + gestures = { + workspace_swipe = true; + workspace_swipe_fingers = 3; + workspace_swipe_create_new = true; + }; + + # WINDOW LAYOUT + dwindle = { + pseudotile = true; + preserve_split = true; + smart_resizing = true; + # no_gaps_when_only = true; + force_split = 2; + }; + + misc = { + disable_hyprland_logo = true; + disable_splash_rendering = true; + mouse_move_enables_dpms = true; + vfr = true; + vrr = 1; + animate_manual_resizes = true; + animate_mouse_windowdragging = true; + enable_swallow = true ; + close_special_on_empty = true; + background_color = lib.mkForce "rgb(${base00})"; + }; + }; + extraConfig = '' + device { + name = tpps/2-elan-trackpoint + accel_profile = flat + } + ''; + }; +} diff --git a/home/window-managers/misc/default.nix b/home/window-managers/misc/default.nix new file mode 100644 index 0000000..4fef3b4 --- /dev/null +++ b/home/window-managers/misc/default.nix @@ -0,0 +1,8 @@ +{ + imports = [ + ./swaylock + ./mako + ./waybar + ./swaync + ]; +} diff --git a/home/window-managers/misc/mako/default.nix b/home/window-managers/misc/mako/default.nix new file mode 100644 index 0000000..a465252 --- /dev/null +++ b/home/window-managers/misc/mako/default.nix @@ -0,0 +1,19 @@ +{ pkgs, config, lib, ...}: +{ + services.mako = with config.lib.stylix.colors; { + enable = true; + icons = true; + anchor = "top-right"; + actions = false; + backgroundColor = lib.mkForce "#${base01}"; + borderColor = lib.mkForce "#${base0E}"; + borderRadius= 12; + borderSize = 2; + textColor = lib.mkForce "#${base05}"; + layer = "overlay"; + sort = "-time"; + margin = "20, 10, 20"; + maxVisible = 5; + defaultTimeout = 8; + }; +} diff --git a/home/window-managers/misc/swaylock/default.nix b/home/window-managers/misc/swaylock/default.nix new file mode 100644 index 0000000..9ce63cd --- /dev/null +++ b/home/window-managers/misc/swaylock/default.nix @@ -0,0 +1,10 @@ +{ pkgs, ... }: +{ + programs.swaylock = { + enable = false; + package = pkgs.swaylock-effects; + settings = { + image = "~/.walls/wp.png"; + }; + }; +} diff --git a/home/window-managers/misc/swaync/default.nix b/home/window-managers/misc/swaync/default.nix new file mode 100644 index 0000000..ab17c54 --- /dev/null +++ b/home/window-managers/misc/swaync/default.nix @@ -0,0 +1,76 @@ +{ config, ... }: +{ + services.swaync = { + enable = false; + settings = { + positionX = "right"; + positionY = "top"; + layer = "overlay"; + control-center-layer = "top"; + layer-shell = true; + cssPriority = "application"; + control-center-margin-top = 6; + control-center-margin-bottom = 0; + control-center-margin-right = 0; + control-center-margin-left = 0; + control-center-height = 600; + control-center-width = 500; + notification-2fa-action = true; + notification-inline-replies = false; + notification-icon-size = 64; + notification-body-image-height = 100; + notification-body-image-width = 200; + timeout = 10; + hide-on-clear = true; + hide-on-action = true; + transition-time = 200; + }; + style = with config.lib.stylix.colors; '' + @define-color background #${base00}; + @define-color background-alt #${base01}; + @define-color background-focus #${base02}; + @define-color border #${base03}; + @define-color red #${base08}; + @define-color orange #${base0A}; + @define-color yellow #${base09}; + @define-color green #${base0B}; + @define-color blue #${base0C}; + @define-color gray #${base05}; + @define-color black #${base00}; + @define-color white #${base06}; + + * { + font-family: "JetBrainsMono Nerd Font" !important; + } + + progress, progressbar, trough { + border: 1px solid @border; + border-radius: 16px; + } + + trough { + background: @background-alt; + } + + .notification.low, .notification.normal { + border: 1px solid @border; + } + + .notification.low progress, .notification.normal progress { + background: @blue; + } + + .notification.critical { + border: 1px solid @red; + } + + .notification.critical progress { + background: @red; + } + + .body, .time { + color: alpha(@white, 0.7); + } + ''; + }; +} diff --git a/home/window-managers/misc/waybar/default.nix b/home/window-managers/misc/waybar/default.nix new file mode 100644 index 0000000..df49abc --- /dev/null +++ b/home/window-managers/misc/waybar/default.nix @@ -0,0 +1,152 @@ +{ config, ... }: +{ + imports = [ ./style.nix ]; + programs.waybar = with config.lib.stylix.colors; { + enable = true; + settings = { + # BAR AT BOTTOM + mainBar = { + layer = "top"; + position = "bottom"; + height = 1; + modules-left = [ + "custom/launcher" + "custom/separatorL" + "pulseaudio" + "custom/separatorL" + "backlight" + "custom/separatorL" + "network" + "custom/separatorL" + "hyprland/language" + ]; + modules-center = [ + "hyprland/workspaces" + ]; + modules-right = [ + "tray" + "custom/separatorR" + "disk" + "custom/separatorR" + "clock#time" + "custom/separatorR" + "battery" + ]; + + # LEFT MODULES + "custom/launcher" = { + format = " {}"; + on-click = "nwg-drawer -ovl -nocats -nofs -d -c 7 -mb -49"; + tooltip = false; + }; + "custom/separatorL" = { + format = "|"; + interval = 1; + tooltip = false; + }; + "pulseaudio" = { + format = "{icon} {volume}%"; + format-icons = { + default = [ "" " " " " ]; + headphone = [ "" ]; + headset = [ "" ]; + }; + format-muted = " muted"; + scroll-step = 3; + on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + on-click-right = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + tooltip = false; + }; + "backlight" = { + device = "intel_backlight"; + format = "{icon}{percent}%"; + format-icons = [ "󱩎 " "󱩏 " "󱩐 " "󱩑 " "󱩒 " "󱩓 " "󱩔 " "󱩕 " "󱩖 " "󰛨 " ]; + scroll-step = 1; + tooltip = false; + }; + "network" = { + format-icons = ["󰤯" "󰤟" "󰤢" "󰤥" "󰤨"]; + format-wifi = "{icon} CON"; + format-ethernet = "󰈀 ETH"; + format-disconnected = "⚠ ERR"; + on-click = "kitty nmtui"; + interval = 5; + tooltip = false; + }; + "hyprland/language" = { + format = "󰌌 {}"; + format-en = "EN"; + format-ru = "RU"; + keyboard-name = "at-translated-set-2-keyboard"; + tooltip = false; + }; + "cava" = { + framerate = 24; + autosens = 1; + bars = 12; + source = "auto"; + format-icons = [ "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█" ]; + actions = { + on-click-right = "mode"; + }; + }; + + # CENTER MODULES + "hyprland/workspaces" = { + on-click = "activate"; + format = "{icon}"; + format-icons = { + "1" = "一"; + "2" = "二"; + "3" = "三"; + "4" = "四"; + "5" = "五"; + "6" = "六"; + "7" = "七"; + "8" = "八"; + "9" = "九"; + "10" = "十"; + }; + persistent-workspaces = { + "*" = [ 1 2 3 4 5 6 7 8 9 10 ]; + }; + }; + + # RIGHT MODULES + "custom/separatorR" = { + format = "|"; + interval = 1; + tooltip = false; + }; + "tray" = { + icon-size = 18; + show-passive-items = true; + spacing = 8; + }; + "disk" = { + format = "{used} of {total} 󰋊"; + interval = 30; + path = "/"; + unit = "GB"; + tooltip = false; + }; + "clock#time" = { + format = "{:%H:%M}  "; + interval = 1; + tooltip = false; + }; + "battery" = { + format = "{capacity}% {icon}"; + format-alt = "{time} {icon}"; + format-charging = "{capacity}% 󱐋"; + format-icons = [ "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ]; + states = { + critical = 15; + warning = 30; + }; + tooltip = false; + }; + }; + }; + }; +} diff --git a/home/window-managers/misc/waybar/error/default.nix b/home/window-managers/misc/waybar/error/default.nix new file mode 100644 index 0000000..3cbf3e1 --- /dev/null +++ b/home/window-managers/misc/waybar/error/default.nix @@ -0,0 +1,107 @@ +{ config, ... }: +{ + imports = [ ./style.nix ]; + programs.waybar = with config.lib.stylix.colors; { + enable = true; + settings = { + mainBar = { + layer = "top"; + position = "bottom"; + height = 1; + modules-left = [ + "custom/launcher" + "custom/separator" + "pulseaudio" + "backlight" + "hyprland/language" + ]; + modules-center = [ + "hyprland/workspaces" + ]; + modules-right = [ + "custom/date" + "clock#time" + "battery" + ]; + + # LEFT MODULES + "custom/launcher" = { + format = " {}"; + tooltip = false; + }; + "custom/separator" = { + format = "/"; + interval = 1; + tooltip = false; + }; + "pulseaudio" = { + format = "{icon} {volume}%"; + format-icons = { + default = [ "" " " " " ]; + headphone = [ " " ]; + }; + format-muted = [ " " ]; + scroll-step = 3; + on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; + tooltip = false; + }; + "backlight" = { + device = "intel_backlight"; + format = "{icon} {percent}%"; + format-icons = [ "󱩎 " "󱩏 " "󱩐 " "󱩑 " "󱩒 " "󱩓 " "󱩔 " "󱩕 " "󱩖 " "󰛨 " ]; + scroll-step = 1; + tooltip = false; + }; + "hyprland/language" = { + format = "󰌌 {}"; + format-en = "EN"; + format-ru = "RU"; + keyboard-name = "at-translated-set-2-keyboard"; + tooltip = false; + }; + + # CENTER MODULES + "hyprland/workspaces" = { + on-click = "activate"; + format = "{icon}"; + format-icons = { + "1" = "一"; + "2" = "二"; + "3" = "三"; + "4" = "四"; + "5" = "五"; + "6" = "六"; + "7" = "七"; + "8" = "八"; + "9" = "九"; + }; + persistent-workspaces = { + "*" = [ 1 2 3 4 5 6 7 8 9 ]; + }; + }; + + # RIGHT MODULES + "custom/date" = { + exec = ''date +\" %e %b\"''; + interval = 1; + tooltip = false; + }; + "clock#time" = { + format = "󰥔 {:%H:%M}"; + interval = 1; + tooltip = false; + }; + "battery" = { + format = "{icon} {capacity}%"; + format-alt = "{icon} {time}"; + format-charging = "#${base0D}'>󰂅 {capacity}%"; + format-icons = [ "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ]; + states = { + critical = 15; + warning = 30; + }; + }; + }; + }; + }; +} diff --git a/home/window-managers/misc/waybar/error/style.nix b/home/window-managers/misc/waybar/error/style.nix new file mode 100644 index 0000000..72d5728 --- /dev/null +++ b/home/window-managers/misc/waybar/error/style.nix @@ -0,0 +1,163 @@ +{ config, ... }: +{ + xdg.configFile = with config.lib.stylix.colors; { + "waybar/style.css".text = '' + * { + font-family: JetBrainsMono NerdFont, SourceHanSansJP; + font-weight: bold; + font-size: 16px; + } + + window#waybar { + background-color: transparent; + color: #${base06}; + } + + window#waybar > box { + margin: 5px 0px 0px 0px; + background-color: #${base00}; + border-top: 0px; + border-bottom: 0; + border-style: solid; + border-color: #3C3836; + box-shadow: 1 1 3 1px #101010; + } + + #workspaces button { + background-color: #${base03}; + border-radius: 20px; + margin: 2px; + padding: 0px; + padding-right: 6px; + padding-left: 6px; + color: #${base06}; + min-height: 25px; + transition: all 0.4s ease-in-out; + } + + #workspaces button label{ + color: #${base06}; + font-weight: bolder; + } + + #workspaces button.empty{ + background: #${base02}; + } + + #workspaces button.active { + background: radial-gradient(circle, #${base06} 0%, #${base0D} 50%, #${base0B} 100%); + background-size: 400% 400%; + animation: gradient 5s linear infinite; + transition: all 0.3s ease-in-out; + border-color: #45475a; + } + + #workspaces button.active label { + color: #${base02}; + font-weight: bolder; + } + + @keyframes gradient { + 0% { + background-position: 0px 50px; + } + 50% { + background-position: 100px 30px; + } + 100% { + background-position: 0px 50px; + } + } + + @keyframes gradient_f { + 0% { + background-position: 0px 200px; + } + 50% { + background-position: 200px 0px; + } + 100% { + background-position: 400px 200px; + } + } + + @keyframes gradient_f_nh { + 0% { + background-position: 0px 200px; + } + 100% { + background-position: 200px 200px; + } + } + + #custom-date, + #battery, + #backlight + #clock, + #pulseaudio, + #workspaces, + #window, + #language, + #text, + #custom-launcher, + #custom-separator, + + #tray { + color: #${base06}; + background: #${base00}; + padding: 0 0.4em; + padding-top: 0px; + padding-bottom: 2px; + border-style: solid; + min-height: 30px; + } + + #battery { + margin: 3 4 3 4px; + padding: 0 0.4em; + } + + #backlight { + margin: 3 4 3 4px; + padding: 0 0.4em; + } + + #custom-date { + margin: 3 4 3 4px; + padding: 0 0.4em; + } + + #clock { + margin: 3 4 3 4px; + padding: 0 0.4em; + } + + #language { + margin: 3 4 3 4px; + padding: 0 0.4em; + } + + #pulseaudio { + margin: 3 4 3 4px; + padding: 0 0.4em; + } + + #custom-separator { + padding: 0px; + margin: 0px; + } + + #custom-launcher { + margin-left: 0px; + margin-right: 0px; + padding-right: 0.6em; + border-radius: 0 20 20 0px; + } + + #workspaces { + margin: 3 0 3 0px; + border-radius: 14 14 14 14px; + } + ''; + }; +} diff --git a/home/window-managers/misc/waybar/error/style_azikx.nix b/home/window-managers/misc/waybar/error/style_azikx.nix new file mode 100644 index 0000000..a9ed314 --- /dev/null +++ b/home/window-managers/misc/waybar/error/style_azikx.nix @@ -0,0 +1,150 @@ +{ config, ... }: +{ + programs.waybar.style = with config.lib.stylix.colors; '' + /* BAR ITSELF */ + * { + font-family: "JetBrainsMono Nerd Font"; + font-weight: bold; + font-size: 16px; + } + + window#waybar { + background-color: transparent; + color: #${base06}; + } + + window#waybar > box { + margin: 5px 0px 0px 0px; + background-color: #${base00}; + border-top: 0px; + border-bottom: 0; + border-style: solid; + border-color: #3C3836; + box-shadow: 1 1 3 1px #101010; + } + + /* WORKSPACES */ + #workspaces button { + background-color: #${base03}; + border-radius: 20px; + margin: 2px; + padding: 0px; + padding-right: 6px; + padding-left: 6px; + color: #${base06}; + min-height: 25px; + transition: all 0.4s ease-in-out; + } + + #workspaces button label { + color: #${base06}; + font-weight: bolder; + } + + #workspaces button.empty { + background: #${base02}; + } + + #workspaces button.active { + background: radial-gradient(circle, #${base06} 0%, #${base0D} 50%, #${base0B} 100%); + background-size: 400% 400%; + animation: gradient 5s linear infinite; + transition: all 0.3s ease-in-out; + border-color: #${base00}; + } + + #workspaces button.active label { + color: #${base02}; + font-weight: bolder; + } + + @keyframes gradient { + 0% { background-position: 0px 50px; } + 50% { background-position: 100px 30px; } + 100% { background-position: 0px 50px; } + } + + @keyframes gradient_f { + 0% { background-position: 0px 200px; } + 50% { background-position: 200px 0px; } + 100% { background-position: 400px 200px; } + } + + @keyframes gradient_f_nh { + 0% { background-position: 0px 200px; } + 100% { background-position: 200px 200px; } + } + + /* MODULES */ + #custom-date, + #battery, + #backlight + #clock, + #pulseaudio, + #workspaces, + #window, + #language, + #text, + #custom-launcher, + #custom-separator + + #tray { + color: #${base06}; + background: #${base00}; + padding: 0 0.4em; + padding-top: 0px; + padding-bottom: 2px; + border-style: solid; + min-height: 30px; + } + + #battery { + background-color: transparent; + color: #${base06}; + } + + #backlight { + background-color: transparent; + color: #${base06}; + } + + #custom-date { + background-color: transparent; + color: #${base06}; + } + + #clock { + background-color: transparent; + color: #${base06}; + } + + #language { + background-color: transparent; + color: #${base06}; + } + + #pulseaudio { + margin: 3 4 3 4px; + padding: 0 0.4em; + background-color: transparent; + color: #${base06}; + } + + #custom-separator { + padding: 0px; + margin: 0px; + } + + #custom-launcher { + margin-left: 0px; + margin-right: 0px; + padding-right: 0.6em; + border-radius: 0 20 20 0px; + } + + #workspaces { + margin: 3 0 3 0px; + border-radius: 14 14 14 14px; + } + ''; +} diff --git a/home/window-managers/misc/waybar/style.nix b/home/window-managers/misc/waybar/style.nix new file mode 100644 index 0000000..ef12c35 --- /dev/null +++ b/home/window-managers/misc/waybar/style.nix @@ -0,0 +1,117 @@ +{ config, ... }: +{ + programs.waybar.style = with config.lib.stylix.colors; '' + /* BAR ITSELF */ + * { + font-family: "JetBrainsMono Nerd Font"; + font-weight: bold; + font-size: 16px; + } + + window#waybar { + background-color: transparent; + color: #${base06}; + } + + window#waybar > box { + margin: 5px 0px 0px 0px; + background-color: #${base00}; + border-top: 0px; + border-bottom: 0; + border-style: solid; + border-color: #3C3836; + /* box-shadow: 1 1 3 1px #101010; */ + } + + /* WORKSPACES */ + #workspaces button { + background-color: #${base03}; + border-radius: 20px; + margin: 2px; + padding: 0px; + padding-right: 6px; + padding-left: 6px; + color: #${base06}; + min-height: 25px; + transition: all 0.4s ease-in-out; + } + + #workspaces button label { + color: #${base06}; + font-weight: bolder; + } + + #workspaces button.empty { + background: #${base02}; + } + + #workspaces button.active { + background: radial-gradient(circle, #${base0E} 0%, #${base0E} 50%, #${base0D} 100%); + background-size: 400% 400%; + animation: gradient 5s linear infinite; + transition: all 0.3s ease-in-out; + border-color: #${base00}; + } + + #workspaces button.active label { + color: #${base02}; + font-weight: bolder; + } + + @keyframes gradient { + 0% { background-position: 0px 50px; } + 50% { background-position: 100px 30px; } + 100% { background-position: 0px 50px; } + } + + @keyframes gradient_f { + 0% { background-position: 0px 200px; } + 50% { background-position: 200px 0px; } + 100% { background-position: 400px 200px; } + } + + @keyframes gradient_f_nh { + 0% { background-position: 0px 200px; } + 100% { background-position: 200px 200px; } + } + + /* MODULES */ + #custom-date, + #battery, + #backlight + #clock, + #pulseaudio, + #workspaces, + #window, + #language, + #text, + #custom-launcher, + #custom-separator + + #battery, + #backlight, + #custom-date, + #cava, + #network, + #disk, + #clock, + #language, + #pulseaudio, + #custom-separator, + #custom-launcher, + #tray { + color: #${base06}; + background-color: transparent; + padding: 0 0.4em; + padding-top: 0px; + padding-bottom: 2px; + border-style: solid; + min-height: 30px; + } + + #workspaces { + margin: 3 0 3 0px; + border-radius: 14 14 14 14px; + } + ''; +} diff --git a/home/window-managers/swayfx/binds.nix b/home/window-managers/swayfx/binds.nix new file mode 100644 index 0000000..db2cf83 --- /dev/null +++ b/home/window-managers/swayfx/binds.nix @@ -0,0 +1,127 @@ +{ pkgs, config, lib, ... }: +let + # MODIFIERS + m = "Mod4"; + s = "Shift"; + c = "Ctrl"; + a = "Alt"; + + # BUTTUONS + rt = "Return"; + tb = "Tab"; + sp = "Space"; + gr = "grave"; + pr = "print"; + + # DISPATCHERS + ex = "exec"; + ws = "workspace"; + mv = "move"; + cn = "container"; + nm = "number"; + + # ARROWS + r = "right"; + d = "down"; + u = "up"; + l = "left"; +in +{ + wayland.windowManager.sway.config.keybindings = lib.mkOptionDefault { + # SWAY NATIVE CMD + "${m}+q" = "kill"; + "${m}+f" = "fullscreen"; + "${m}+${sp}" = "floating toggle"; + "${m}+c" = "${ex} swaymsg move position center"; + "${m}+w" = "${ex} killall -SIGUSR1 waybar"; + + # PROGRAMS + "${m}+${rt}" = "${ex} foot -T Terminal"; + "${m}+${s}+${rt}" = "${ex} foot -a float -T Terminal"; + "${m}+${a}+${rt}" = "${ex} foot -w $(slurp -b '#181926CC' -c '#8bd5caFF' -w '3' -f '%wx%h') -a footz -T Terminal"; + + "${m}+${tb}" = "${ex} nwg-drawer -nocats -nofs -d -c 7 -mb -49"; + + "${m}+b" = "${ex} firefox"; + "${m}+${s}+b" = "${ex} obsidian"; + + "${m}+v" = "${ex} ayugram"; + "${m}+${s}+v" = "${ex} vesktop"; + + "${m}+m" = "${ex} spotify"; + + "${m}+t" = "${ex} transmission-gtk"; + "${m}+${s}+t" = "${ex} qbittorrent"; + + "${m}+a" = "${ex} anicli-ru -q 720"; + + "${pr}" = "grimshot savecopy anything"; + "${pr}+${s}" = "grimshot savecopy output"; + + # CONTROL + "${m}+g" = "layout tabbed"; + "${m}+${s}+g" = "layout toggle split"; + + "${m}+p" = "move scratchpad"; + "${m}+${s}+p" = "scratchpad show"; + + "${m}+Home" = "exit"; + "${m}+${s}+Home" = "reload"; + + # WORKSPACES SWITCH + "${m}+1" = "${ws} ${nm} 1"; + "${m}+2" = "${ws} ${nm} 2"; + "${m}+3" = "${ws} ${nm} 3"; + "${m}+4" = "${ws} ${nm} 4"; + "${m}+5" = "${ws} ${nm} 5"; + "${m}+6" = "${ws} ${nm} 6"; + "${m}+7" = "${ws} ${nm} 7"; + "${m}+8" = "${ws} ${nm} 8"; + "${m}+9" = "${ws} ${nm} 9"; + "${m}+0" = "${ws} ${nm} 10"; + + # WORKSPACES MOVE + "${m}+${s}+1" = "${mv} ${cn} to ${ws} ${nm} 1"; + "${m}+${s}+2" = "${mv} ${cn} to ${ws} ${nm} 2"; + "${m}+${s}+3" = "${mv} ${cn} to ${ws} ${nm} 3"; + "${m}+${s}+4" = "${mv} ${cn} to ${ws} ${nm} 4"; + "${m}+${s}+5" = "${mv} ${cn} to ${ws} ${nm} 5"; + "${m}+${s}+6" = "${mv} ${cn} to ${ws} ${nm} 6"; + "${m}+${s}+7" = "${mv} ${cn} to ${ws} ${nm} 7"; + "${m}+${s}+8" = "${mv} ${cn} to ${ws} ${nm} 8"; + "${m}+${s}+9" = "${mv} ${cn} to ${ws} ${nm} 9"; + "${m}+${s}+0" = "${mv} ${cn} to ${ws} ${nm} 10"; + + # ARROWS + # "${m}+${r}" = "move workspace to output right"; + # "${m}+${d}" = "move workspace to output down"; + # "${m}+${u}" = "move workspace to output up"; + # "${m}+${l}" = "move workspace to output left"; + + # "${m}+${s}+${r}" = "move right"; + # "${m}+${s}+${d}" = "move down"; + # "${m}+${s}+${u}" = "move up"; + # "${m}+${s}+${l}" = "move left"; + + # "${m}+${a}+${r}" = "focus right"; + # "${m}+${a}+${d}" = "focus down"; + # "${m}+${a}+${u}" = "focus up"; + # "${m}+${a}+${l}" = "focus left"; + + # HJKL + "${m}+h" = "move workspace to output left"; + "${m}+j" = "move workspace to output down"; + "${m}+k" = "move workspace to output up"; + "${m}+l" = "move workspace to output right"; + + "${m}+${s}+h" = "move left"; + "${m}+${s}+j" = "move down"; + "${m}+${s}+k" = "move up"; + "${m}+${s}+l" = "move right"; + + "${m}+${a}+h" = "focus left"; + "${m}+${a}+j" = "focus down"; + "${m}+${a}+k" = "focus up"; + "${m}+${a}+l" = "focus right"; + }; +} diff --git a/home/window-managers/swayfx/default.nix b/home/window-managers/swayfx/default.nix new file mode 100644 index 0000000..78f19cc --- /dev/null +++ b/home/window-managers/swayfx/default.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + imports = [ ./binds.nix ./settings.nix ]; + wayland.windowManager.sway = { + enable = true; + xwayland = true; + systemd.enable = true; + + # package = pkgs.swayfx; + }; +} diff --git a/home/window-managers/swayfx/settings.nix b/home/window-managers/swayfx/settings.nix new file mode 100644 index 0000000..afb69c2 --- /dev/null +++ b/home/window-managers/swayfx/settings.nix @@ -0,0 +1,90 @@ +{ pkgs, config, lib, ... }: +let + m = "Mod4"; + s = "Shift"; + c = "Ctrl"; + a = "Alt"; + + pr = "Print"; +in +{ + wayland.windowManager.sway = with config.lib.stylix.colors; { + config = { + input = { "*" = { xkb_layout = "us,ru"; xkb_options = "grp:caps_toggle"; }; }; + startup = [ + # { command = "${...}"; } + ]; + + modifier = "Mod4"; + left = "h"; + down = "j"; + up = "k"; + right = "l"; + + bindkeysToCode = true; + workspaceAutoBackAndForth = true; + + gaps = { + inner = 4; + outer = 4; + + smartBorders = "on"; + smartGaps = true; + }; + window = { + border = 2; + titlebar = false; + hideEdgeBorders = "smart"; + }; + floating = { + border = 2; + titlebar = false; + modifier = "Mod4"; + }; + + colors = lib.mkForce { + background = "#${base00}"; + focused = { + background = "#${base00}"; + border = "#${base00}"; + childBorder = "#${base0B}"; + indicator = "#${base08}"; + text = "#${base06}"; + }; + focusedInactive = { + background = "#${base02}"; + border = "#${base00}"; + childBorder = "#${base0B}"; + indicator = "#${base08}"; + text = "#${base04}"; + }; + unfocused = { + background = "#${base00}"; + border = "#${base00}"; + childBorder = "#${base0B}"; + indicator = "#${base08}"; + text = "#${base06}"; + }; + urgent = { + background = "#${base00}"; + border = "#${base08}"; + childBorder = "#${base0B}"; + indicator = "#${base08}"; + text = "#${base06}"; + }; + }; + }; + extraConfig = " + # corner_radius 10 + # blur enable + # blur_xray on + + # shadows enable + # shadows_on_csd enable + # shadow_color #${base00} + # shadow_blur_radius 12 + + # default_dim_inactive 0.4 + "; + }; +} diff --git a/home/window-managers/terminals/default.nix b/home/window-managers/terminals/default.nix new file mode 100644 index 0000000..c68c261 --- /dev/null +++ b/home/window-managers/terminals/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + ./foot + ./kitty + ]; +} diff --git a/home/window-managers/terminals/foot/default.nix b/home/window-managers/terminals/foot/default.nix new file mode 100644 index 0000000..5e5e0e6 --- /dev/null +++ b/home/window-managers/terminals/foot/default.nix @@ -0,0 +1,21 @@ +{ pkgs, lib, ... }: +{ + programs.foot = { + enable = true; + server.enable = false; + settings = { + main = { + font = lib.mkForce "JetBrainsMono Nerd Font:size=12"; + pad = "10x10 center"; + resize-by-cells = "yes"; + letter-spacing = 0; + }; + cursor = { + style = "block"; + }; + mouse = { + hide-when-typing = "yes"; + }; + }; + }; +} diff --git a/home/window-managers/terminals/kitty/binds.nix b/home/window-managers/terminals/kitty/binds.nix new file mode 100644 index 0000000..fdefc49 --- /dev/null +++ b/home/window-managers/terminals/kitty/binds.nix @@ -0,0 +1,51 @@ +{ pkgs, config, ...}: +{ + programs.kitty.keybindings = with config.lib.stylix.colors; { + "ctrl+shift+c" = "copy_to_clipboard"; + "ctrl+shift+v" = "paste_from_clipboard"; + + "kitty_mod+x" = "next_tab"; + "kitty_mod+shift+x" = "move_tab_forward"; + + "kitty_mod+z" = "previous_tab"; + "kitty_mod+shift+z" = "move_tab_backward"; + + "kitty_mod+enter" = "new_window"; + "kitty_mod+a" = "new_tab"; + "kitty_mod+q" = "close_window"; + + "kitty_mod+shift+=" = "set_background_opacity +0.1"; + "kitty_mod+shift+-" = "set_background_opacity -0.1"; + "kitty_mod+shift+0" = "set_background_opacity 1"; + + "kitty_mod+." = "layout_action decrease_num_full_size_windows"; + "kitty_mod+," = "layout_action increase_num_full_size_windows"; + "kitty_mod+/" = "layout_action mirror toggle"; + "kitty_mod+m" = "layout_action mirror true"; + "kitty_mod+n" = "layout_action mirror false"; + + "kitty_mod+left" = "resize_window narrower"; + "kitty_mod+right" = "resize_window wider"; + "kitty_mod+up" = "resize_window taller"; + "kitty_mod+down" = "resize_window shorter"; + "kitty_mod+home" = "resize_window reset"; + + "kitty_mod+h" = "resize_window narrower"; + "kitty_mod+l" = "resize_window wider"; + "kitty_mod+k" = "resize_window taller"; + "kitty_mod+j" = "resize_window shorter"; + "kitty_mod+g" = "resize_window reset"; + + "kitty_mod+r" = "load_config_file"; + "kitty_mod+t" = "set_tab_title"; + "kitty_mod+i" = "next_layout"; + "kitty_mod+u" = "kitten unicode_input"; + "kitty_mod+escape" = "kitty_shell overlay"; + "kitty_mod+]" = "next_window"; + "kitty_mod+[" = "previous_window"; + "kitty_mod+p" = "set_background_opacity 1"; + "kitty_mod+o" = "set_background_opacity default"; + "kitty_mod+f" = "toggle_fullscreen"; + "f11" = "toggle_fullscreen"; + }; +} diff --git a/home/window-managers/terminals/kitty/colors.nix b/home/window-managers/terminals/kitty/colors.nix new file mode 100644 index 0000000..9a433d4 --- /dev/null +++ b/home/window-managers/terminals/kitty/colors.nix @@ -0,0 +1,37 @@ +{ pkgs, config, lib, ...}: +{ + programs.kitty.settings = with config.lib.stylix.colors; { + foreground = "#${base05}"; + background = "#${base00}"; + + selection_foreground = "#${base05}"; + selection_background = "#${base02}"; + + tab_bar_background = "#${base00}"; + active_tab_foreground = "#${base00}"; + active_tab_background = "#${base0B}"; + inactive_tab_foreground = "#${base04}"; + inactive_tab_background = "#${base00}"; + + active_border_color = "#${base0E}"; + inactive_border_color = "#${base00}"; + bell_border_color = "#${base08}"; + + color0 = "#${base00}"; + color1 = "#${base08}"; + color2 = "#${base0B}"; + color3 = "#${base0A}"; + color4 = "#${base0D}"; + color5 = "#${base0E}"; + color6 = "#${base0C}"; + color7 = "#${base05}"; + color8 = "#${base03}"; + color9 = "#${base08}"; + color10 = "#${base0B}"; + color11 = "#${base0A}"; + color12 = "#${base0D}"; + color13 = "#${base0E}"; + color14 = "#${base0C}"; + color15 = "#${base07}"; + }; +} diff --git a/home/window-managers/terminals/kitty/default.nix b/home/window-managers/terminals/kitty/default.nix new file mode 100644 index 0000000..128377c --- /dev/null +++ b/home/window-managers/terminals/kitty/default.nix @@ -0,0 +1,44 @@ +{ config, ...}: +{ + imports = [ ./binds.nix ./colors.nix ]; + programs.kitty = with config.lib.stylix.colors; { + enable = true; + environment = { + "MICRO_TRUECOLOR" = "1"; + "RANGER_LOAD_DEFAULT_RC" = "false"; + }; + settings = { + confirm_os_window_close = 0; + + tab_bar_min_tabs = 2; + tab_bar_edge = "button"; + tab_bar_style = "fade"; + tab_bar_align = "left"; + tab_powerline_style = "angled"; + tab_title_template = "{title}"; + tab_bar_margin_width = 0; + tab_fade = "0 0.5 1"; + + window_margin_width = 8; + window_padding_width = 4; + window_border_width = "0.2pt"; + single_window_padding_width = 4; + + resize_in_steps = "no"; + resize_debounce_time = 0; + + dynamic_background_opacity = true; + cursor_shape = "block"; + mouse_hide_wait = 2; + underline_hyperlinks = "always"; + enable_audio_bell = "no"; + disable_ligatures = "never"; + font_features = "+calt +liga +ss01 +ss02 +ss03 +ss04 +ss05 +ss06 +ss07 +ss08 +ss09"; + + # clipboard_control = "read-primary read-clipboard"; + + kitty_mod = "alt"; + }; + shellIntegration.enableFishIntegration = true; + }; +} diff --git a/host/default.nix b/host/default.nix new file mode 100644 index 0000000..44f8ae0 --- /dev/null +++ b/host/default.nix @@ -0,0 +1,7 @@ +{ + imports = [ + ./themes/stylix.nix + ./system + ./misc + ]; +} diff --git a/host/misc/autocpu.nix b/host/misc/autocpu.nix new file mode 100644 index 0000000..ef37ccf --- /dev/null +++ b/host/misc/autocpu.nix @@ -0,0 +1,26 @@ +{ inputs, ... }: +{ + imports = [ auto-cpufreq.nixosModules.default ]; + programs.auto-cpufreq = { # CPU PERFMORMANCE + enable = true; + settings = { + charger = { # AC MODE + governor = "performance"; + turbo = "auto"; + energy_perf_bias = "balance_performance"; + platform_profile = "balanced"; + scaling_min_freq = 1400000; + scaling_max_freq = 4000000; + }; + battery = { # BAT MODE + governor = "powersave"; + turbo = "auto"; + energy_perf_bias = "balance_power"; + platform_profile = "low-power"; + enable_thresholds = true; + # start_threshold = 20; + # stop_threshold = 80; + }; + }; + }; +} diff --git a/host/misc/battery.nix b/host/misc/battery.nix new file mode 100644 index 0000000..3c6a24d --- /dev/null +++ b/host/misc/battery.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + # SOMETHING FOR BATTERY + powerManagement = { + enable = true; + powertop.enable = true; + }; +} diff --git a/host/misc/default.nix b/host/misc/default.nix new file mode 100644 index 0000000..b653f27 --- /dev/null +++ b/host/misc/default.nix @@ -0,0 +1,13 @@ +{ + imports = [ + ./battery.nix + ./locale.nix + ./nh.nix + ./nix.nix + ./pkgs.nix + ./security.nix + ./sound.nix + ./user.nix + ./zapret.nix + ]; +} diff --git a/host/misc/locale.nix b/host/misc/locale.nix new file mode 100644 index 0000000..cd5b5b5 --- /dev/null +++ b/host/misc/locale.nix @@ -0,0 +1,19 @@ +{ pkgs, ...}: +{ + # LOCALE AND TIME SETTINGS + time.timeZone = "Asia/Chita"; + i18n = { + defaultLocale = "en_US.UTF-8"; + extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + }; +} diff --git a/host/misc/nh.nix b/host/misc/nh.nix new file mode 100644 index 0000000..84dcd3f --- /dev/null +++ b/host/misc/nh.nix @@ -0,0 +1,10 @@ +{ config, pkgs, ... }: +{ + # NIX HELPER + programs.nh = { + enable = true; + clean.enable = true; + clean.extraArgs = "--keep-since 4d --keep 3"; + flake = "/home/megamozg/.flake"; + }; +} diff --git a/host/misc/nix.nix b/host/misc/nix.nix new file mode 100644 index 0000000..1a9ac86 --- /dev/null +++ b/host/misc/nix.nix @@ -0,0 +1,32 @@ +{ pkgs, lib, ... }: +{ + nix = { # NIX SETTINGS + package = pkgs.nix; + settings = { + warn-dirty = false; + experimental-features = [ "nix-command" "flakes" ]; + substituters = [ + "https://cache.garnix.io" + "https://anyrun.cachix.org" + "https://hyprland.cachix.org" + ]; + trusted-public-keys = [ + "cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g=" + "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" + "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" + ]; + trusted-users = [ + "megamozg" + "@wheel" + ]; + }; + }; + + nixpkgs = { + hostPlatform = lib.mkDefault "x86_64-linux"; + config = { # NIXPKGS SETS + allowBroken = true; + allowUnfree = true; + }; + }; +} diff --git a/host/misc/pkgs.nix b/host/misc/pkgs.nix new file mode 100644 index 0000000..d032ca7 --- /dev/null +++ b/host/misc/pkgs.nix @@ -0,0 +1,25 @@ +{ config, pkgs, inputs, lib, ... }: +let + hpkg = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}; +in +{ + # OS PACKAGES + nixpkgs = { hostPlatform = lib.mkDefault "x86_64-linux"; }; + environment.systemPackages = with pkgs; [ + nh git fish + doas micro + zapret + hyprland light + home-manager + ]; + + # PROGRAMS ENABLE + programs = { + fish.enable = true; + hyprland = { + enable = true; + package = hpkg.hyprland; + portalPackage = hpkg.xdg-desktop-portal-hyprland; + }; + }; +} diff --git a/host/misc/security.nix b/host/misc/security.nix new file mode 100644 index 0000000..48b829e --- /dev/null +++ b/host/misc/security.nix @@ -0,0 +1,31 @@ +{ pkgs, ... }: +{ + security = { + sudo = { # FUCKING CRAP + enable = true; + }; + doas = { # VERY TOP + enable = true; + wheelNeedsPassword = true; + extraRules = [ + { + users = [ "megamozg" ]; + keepEnv = true; + persist = true; + } + ]; + extraConfig = '' + permit nopass megamozg as root cmd light + permit nopass megamozg as root cmd tee + ''; + }; + pam = { # SOMTHING WITH FPRINT + services = { + swaylock.fprintAuth = true; + }; + }; + polkit = { + enable = true; + }; + }; +} diff --git a/host/misc/sound.nix b/host/misc/sound.nix new file mode 100644 index 0000000..06f0847 --- /dev/null +++ b/host/misc/sound.nix @@ -0,0 +1,11 @@ +{ ... }: +{ + security.rtkit.enable = true; + services.pipewire = { # SOUND NEW GEN + enable = true; + wireplumber.enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; +} diff --git a/host/misc/user.nix b/host/misc/user.nix new file mode 100644 index 0000000..e4b57a4 --- /dev/null +++ b/host/misc/user.nix @@ -0,0 +1,13 @@ +{ pkgs, config, ... }: +{ + users = { + users = { # USERS + megamozg = { + shell = pkgs.fish; + isNormalUser = true; + extraGroups = [ "networkmanager" "wheel" "video" ]; + }; + }; + }; + system.stateVersion = "24.05"; +} diff --git a/host/misc/zapret.nix b/host/misc/zapret.nix new file mode 100644 index 0000000..1e70155 --- /dev/null +++ b/host/misc/zapret.nix @@ -0,0 +1,52 @@ +{ pkgs, lib, config, ... }: +{ + systemd.services.zapret = { # ZAPRET FOR YOTUBE + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + path = with pkgs; [ + iptables + nftables + zapret + ipset + curl + gawk + ]; + serviceConfig = { + Type = "forking"; + Restart = "no"; + TimeoutSec = "30sec"; + IgnoreSIGPIPE = "no"; + KillMode = "none"; + GuessMainPID = "no"; + ExecStart = "${pkgs.zapret}/bin/zapret start"; + ExecStop = "${pkgs.zapret}/bin/zapret stop"; + EnvironmentFile = pkgs.writeText "zapret-environment" '' + FWTYPE="iptables" + SET_MAXELEM=522288 + IPSET_OPT="hashsize 262144 maxelem $SET_MAXELEM" + AUTOHOSTLIST_RETRANS_THRESHOLD=3 + AUTOHOSTLIST_FAIL_THRESHOLD=3 + AUTOHOSTLIST_FAIL_TIME=60 + AUTOHOSTLIST_DEBUGLOG=0 + MDIG_THREADS=30 + GZIP_LISTS=1 + + MODE=nfqws + MODE_HTTP=1 + MODE_HTTP_KEEPALIVE=0 + MODE_HTTPS=1 + MODE_QUIC=0 + MODE_FILTER=none + + DESYNC_MARK=0x40000000 + DESYNC_MARK_POSTNAT=0x20000000 + NFQWS_OPT_DESYNC="--dpi-desync=fake,split2 --dpi-desync-ttl=3" + TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3 --oob" + FLOWOFFLOAD=donttouch + INIT_APPLY_FW=1 + DISABLE_IPV6=0 + ''; + }; + }; +} diff --git a/host/system/boot.nix b/host/system/boot.nix new file mode 100644 index 0000000..3e3b217 --- /dev/null +++ b/host/system/boot.nix @@ -0,0 +1,57 @@ +{ pkgs, ... }: +{ + # BOOT PARAMETERS + boot = { # ITSELF LOL + kernelPackages = pkgs.linuxPackages_xanmod_latest; + kernelModules = [ "kvm-amd" ]; + consoleLogLevel = 0; + kernelParams = [ + "quiet" + "loglevel=3" + "nowatchdog" + "page_alloc.shuffle=1" + "threadirqs" + "split_lock_detect=off" + "pci=pcie_bus_perf" + "psmouse.synaptics_intertouch=0" + "rd.systemd.show_status=false" + "amdgpu.gttsize=2000" + ]; + + loader = { # SYSTEMD BOOT AS DEFAULT + systemd-boot = { + enable = true; + configurationLimit = 4; + }; + efi.canTouchEfiVariables = true; + timeout = 0; + }; + + initrd = { # IDK + availableKernelModules = [ + "nvme" + "xhci_pci" + "ahci" + "ohci_pci" + "ehci_pci" + "pata_atiixp" + "ums_realtek" + "sd_mod" + "sr_mod" + "sdhci_pci" + "usb_storage" + ]; + systemd.enable = true; + compressor = "zstd"; + compressorArgs = [ "-9" ]; + verbose = false; + }; + + plymouth = { # PLYMOUTH WITH NIXOS LOGO + enable = true; + logo = "${pkgs.nixos-icons}/share/icons/hicolor/48x48/apps/nix-snowflake-white.png"; + }; + + tmp.cleanOnBoot = true; + }; +} diff --git a/host/system/default.nix b/host/system/default.nix new file mode 100644 index 0000000..d589a62 --- /dev/null +++ b/host/system/default.nix @@ -0,0 +1,9 @@ +{ + imports = [ + ./boot.nix + ./disks.nix + ./hardware.nix + ./network.nix + ./service.nix + ]; +} diff --git a/host/system/disks.nix b/host/system/disks.nix new file mode 100644 index 0000000..f56095e --- /dev/null +++ b/host/system/disks.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, modulesPath, ... }: +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + fileSystems = { + "/" = { # ROOT + device = "/dev/disk/by-uuid/9913d333-cd8d-4960-8e3c-4af764b9a9ca"; + fsType = "btrfs"; + options = [ "subvol=@" "compress=zstd" ]; + }; + + "/boot" = { # EFI + device = "/dev/disk/by-uuid/8547-1299"; + fsType = "vfat"; + options = [ "fmask=0022" "dmask=0022" ]; + }; + }; + + zramSwap = { # ZRAM + enable = true; + memoryPercent = 50; + algorithm = "zstd"; + }; +} diff --git a/host/system/hardware.nix b/host/system/hardware.nix new file mode 100644 index 0000000..d70a2db --- /dev/null +++ b/host/system/hardware.nix @@ -0,0 +1,25 @@ +{ pkgs, config, lib, inputs, ... }: +{ + imports = [ "${inputs.nixos-hardware}/lenovo/thinkpad/t14/amd/gen1" ]; + hardware = { + bluetooth = { # BT + enable = true; + powerOnBoot = true; + }; + graphics = { # GPU + enable = true; + enable32Bit = true; + extraPackages = with pkgs; [ + amdvlk + # rocmPackages.clr.icd + # vaapiVdpau + # libvdpau-va-gl + ]; + extraPackages32 = with pkgs; [ + driversi686Linux.amdvlk + ]; + }; + system76.enableAll = true; + firmware = [ pkgs.linux-firmware ]; + }; +} diff --git a/host/system/network.nix b/host/system/network.nix new file mode 100644 index 0000000..d05b27b --- /dev/null +++ b/host/system/network.nix @@ -0,0 +1,15 @@ +{ lib, ... }: +{ + # NETWORKING + networking = { + hostName = "wysvort"; + networkmanager = { # NETWORK MANAGER + enable = true; + insertNameservers = [ "1.1.1.1" "1.0.0.1" ]; + wifi.powersave = true; + }; + useDHCP = lib.mkDefault true; + nftables.enable = true; + # resolvconf.dnsSingleRequest = true; + }; +} diff --git a/host/system/service.nix b/host/system/service.nix new file mode 100644 index 0000000..a4e7f2e --- /dev/null +++ b/host/system/service.nix @@ -0,0 +1,71 @@ +{ pkgs, ... }: +{ + # SERVICES ANY PROGRAM + services = { + getty.autologinUser = "megamozg"; + xserver = { # XORG? + xkb = { + layout = "us"; + variant = "qwerty"; + options = "grp:caps_toggle"; + }; + }; + tailscale = { # OWN VPN NETWORK + enable = true; + useRoutingFeatures = "both"; + }; + system76-scheduler = { # PERFORMANCEE + enable = true; + settings = { + cfsProfiles.enable = true; + processScheduler.pipewireBoost.enable = true; + }; + }; + fprintd = { # FINGER PRINT + enable = true; + package = pkgs.fprintd-tod; + tod = { + enable = true; + driver = pkgs.libfprint-2-tod1-vfs0090; + }; + }; + tlp = { # BATTERY + enable = true; + settings = { + TLP_DEFAULT_MODE = "BAT"; + + # NETWORKING + WIFI_PWR_ON_AC = "off"; + WIFI_PWR_ON_BAT = "on"; + + # CPU + CPU_SCALING_GOVERNOR_ON_AC = "performance"; + CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; + CPU_ENERGY_PERF_POLICY_ON_BAT = "power"; + CPU_ENERGY_PERF_POLICY_ON_AC = "balance_performance"; + CPU_BOOST_ON_AC = 1; + CPU_BOOST_ON_BAT = 1; + + # GRAPHICS + RADEON_DPM_STATE_ON_AC = "performance"; + RADEON_DPM_STATE_ON_BAT = "battery"; + RADEON_POWER_PROFILE_ON_AC = "default"; + RADEON_POWER_PROFILE_ON_BAT = "default"; + + # IDK + RUNTIME_PM_ON_AC = "auto"; + RUNTIME_PM_ON_BAT = "auto"; + USB_AUTOSUSPEND = 0; + }; + }; + resolved = { + enable = true; + }; + + dbus.implementation = "broker"; + upower.enable = true; + thermald.enable = true; + # thinkfan.enable = true; + gvfs.enable = true; + }; +} diff --git a/host/system/systemd.nix b/host/system/systemd.nix new file mode 100644 index 0000000..4a9ac19 --- /dev/null +++ b/host/system/systemd.nix @@ -0,0 +1,19 @@ +{ pkgs, ... }: +{ + systemd = { + packages = with pkgs; [ # PACKAGES + lact + ]; + services = { # SERVICES SEETINGS + lactd.wantedBy = ["multi-user.target"]; + lact = { # LACT FOR OC + after = ["multi-user.target"]; + wantedBy = ["multi-user.target"]; + serviceConfig = { + ExecStart = "${pkgs.lact}/bin/lact daemon"; + }; + enable = true; + }; + }; + }; +} diff --git a/host/themes/paradise.nix b/host/themes/paradise.nix new file mode 100644 index 0000000..bd49422 --- /dev/null +++ b/host/themes/paradise.nix @@ -0,0 +1,22 @@ +{ + stylix = { + base16Scheme = { + base00 = "#151515"; + base01 = "#1F1F1F"; + base02 = "#2E2E2E"; + base03 = "#424242"; + base04 = "#BBB6B6"; + base05 = "#E8E3E3"; + base06 = "#E8E3E3"; + base07 = "#E8E3E3"; + base08 = "#B66467"; + base09 = "#D9BC8C"; + base0A = "#D9BC8C"; + base0B = "#8C977D"; + base0C = "#8AA6A2"; + base0D = "#8DA3B9"; + base0E = "#A988B0"; + base0F = "#BBB6B6"; + }; + }; +} diff --git a/host/themes/qt.nix b/host/themes/qt.nix new file mode 100644 index 0000000..d7d071f --- /dev/null +++ b/host/themes/qt.nix @@ -0,0 +1,7 @@ +{ pkgs, config, ...}: +{ + qt = { + enable = true; + style = kvantum; + }; +} diff --git a/host/themes/stylix.nix b/host/themes/stylix.nix new file mode 100644 index 0000000..9d8c92e --- /dev/null +++ b/host/themes/stylix.nix @@ -0,0 +1,22 @@ +{ pkgs, inputs, ... }: +{ + # SYSTEM COLORSCHEME (see targets) + imports = [ + inputs.stylix.nixosModules.stylix + ./paradise.nix + ]; + stylix = { # COLORIZE !!! + enable = true; + autoEnable = false; + targets = { + console.enable = true; # TTY + nixos-icons.enable = true; # ICONS + chromium.enable = true; # CHROMIUM LOL + fish.enable = true; # SHELL + plymouth = { # STARTING SCREEN + enable = true; + logoAnimated = true; + }; + }; + }; +}