├── .gitignore ├── README.md ├── flake.lock ├── flake.nix ├── hosts ├── README.md └── TheTrap │ ├── README.md │ ├── configuration.nix │ ├── hardware-configuration.nix │ └── home.nix ├── scripts ├── lessfilter.sh ├── theme-switch.sh ├── vadeer.sh └── vi-modes │ ├── insert.sh │ ├── normal.sh │ ├── replace.sh │ ├── visual.sh │ └── vline.sh ├── single-line.toml ├── system ├── README.md ├── boot │ ├── grub │ │ └── uefi.nix │ └── international.nix ├── hardware │ ├── README.md │ ├── bluetooth.nix │ ├── drivers │ │ ├── README.md │ │ ├── cuda-cache.nix │ │ ├── hybrid.nix │ │ └── xserver-video.nix │ ├── pipewire.nix │ └── power-profile.nix ├── pkgs │ ├── README.md │ ├── aider.nix │ ├── docker.nix │ ├── nvim │ │ ├── README.md │ │ ├── colors.nix │ │ ├── compiled-themes │ │ │ ├── README.md │ │ │ ├── burst │ │ │ ├── shards │ │ │ ├── yang │ │ │ └── yin │ │ ├── main_nvim │ │ │ ├── .luarc.json │ │ │ ├── README.md │ │ │ ├── init.lua │ │ │ ├── lazy-lock.json │ │ │ ├── lua │ │ │ │ ├── lazy_setup.lua │ │ │ │ ├── plugins │ │ │ │ │ ├── aider.lua │ │ │ │ │ ├── autopairs.lua │ │ │ │ │ ├── cmp.lua │ │ │ │ │ ├── codeium.lua │ │ │ │ │ ├── colorizer.lua │ │ │ │ │ ├── dadbod.lua │ │ │ │ │ ├── diffview.lua │ │ │ │ │ ├── dressing.lua │ │ │ │ │ ├── flash.lua │ │ │ │ │ ├── flog.lua │ │ │ │ │ ├── gitsigns.lua │ │ │ │ │ ├── goto-preview.lua │ │ │ │ │ ├── harpoon.lua │ │ │ │ │ ├── heirline.lua │ │ │ │ │ ├── kulala.lua │ │ │ │ │ ├── leetcode.lua │ │ │ │ │ ├── markview.lua │ │ │ │ │ ├── mason.lua │ │ │ │ │ ├── menus.lua │ │ │ │ │ ├── minty.lua │ │ │ │ │ ├── multi-cursor.lua │ │ │ │ │ ├── namu.lua │ │ │ │ │ ├── navic.lua │ │ │ │ │ ├── neollama.lua │ │ │ │ │ ├── neotest.lua │ │ │ │ │ ├── pyrola.lua │ │ │ │ │ ├── snacks.lua │ │ │ │ │ ├── snipe.lua │ │ │ │ │ ├── symbol-outline.lua │ │ │ │ │ ├── theme.lua │ │ │ │ │ ├── todo.lua │ │ │ │ │ ├── toggleterm.lua │ │ │ │ │ ├── treesitter.lua │ │ │ │ │ ├── typr.lua │ │ │ │ │ ├── ufo.lua │ │ │ │ │ └── whichkey.lua │ │ │ │ └── rocks │ │ │ │ │ ├── lib │ │ │ │ │ ├── lua │ │ │ │ │ │ └── 5.1 │ │ │ │ │ │ │ └── gumbo │ │ │ │ │ │ │ └── parse.so │ │ │ │ │ └── luarocks │ │ │ │ │ │ └── rocks-5.1 │ │ │ │ │ │ ├── gumbo │ │ │ │ │ │ └── 0.5-1 │ │ │ │ │ │ │ ├── doc │ │ │ │ │ │ │ ├── LICENSE │ │ │ │ │ │ │ └── README.md │ │ │ │ │ │ │ ├── gumbo-0.5-1.rockspec │ │ │ │ │ │ │ └── rock_manifest │ │ │ │ │ │ └── manifest │ │ │ │ │ └── share │ │ │ │ │ └── lua │ │ │ │ │ └── 5.1 │ │ │ │ │ ├── gumbo.lua │ │ │ │ │ └── gumbo │ │ │ │ │ ├── Buffer.lua │ │ │ │ │ ├── Set.lua │ │ │ │ │ ├── constants.lua │ │ │ │ │ ├── dom │ │ │ │ │ ├── Attribute.lua │ │ │ │ │ ├── AttributeList.lua │ │ │ │ │ ├── ChildNode.lua │ │ │ │ │ ├── Comment.lua │ │ │ │ │ ├── DOMTokenList.lua │ │ │ │ │ ├── Document.lua │ │ │ │ │ ├── DocumentFragment.lua │ │ │ │ │ ├── DocumentType.lua │ │ │ │ │ ├── Element.lua │ │ │ │ │ ├── ElementList.lua │ │ │ │ │ ├── Node.lua │ │ │ │ │ ├── NodeList.lua │ │ │ │ │ ├── ParentNode.lua │ │ │ │ │ ├── Text.lua │ │ │ │ │ └── util.lua │ │ │ │ │ ├── sanitize.lua │ │ │ │ │ └── serialize │ │ │ │ │ ├── Indent.lua │ │ │ │ │ └── html.lua │ │ │ └── typrstats │ │ └── themes │ │ │ ├── README.md │ │ │ ├── burst.nix │ │ │ ├── shards.nix │ │ │ ├── yang.nix │ │ │ └── yin.nix │ ├── sddm.nix │ └── vm.nix ├── security │ ├── fail2ban.nix │ ├── firewall.nix │ ├── sudo.nix │ ├── sysctl.nix │ └── unbound.nix └── wm │ ├── README.md │ └── hypr │ ├── conf │ ├── scripts │ │ ├── alpaca-sidebar.sh │ │ └── home_layout.sh │ ├── settings │ │ ├── apps.conf │ │ ├── env.conf │ │ ├── inputs.conf │ │ ├── keybindings.conf │ │ └── windowrule.conf │ └── themes │ │ ├── burst.conf │ │ ├── shards.conf │ │ ├── yang.conf │ │ └── yin.conf │ ├── hyprland.nix │ ├── hyprpaper │ └── default.nix │ └── packages.nix ├── user ├── README.md ├── de │ ├── README.md │ └── hypr │ │ ├── gtk │ │ └── default.nix │ │ ├── hypridle.nix │ │ ├── hyprlock.nix │ │ ├── hyprpanel │ │ ├── burst.json │ │ ├── hyprpanel_config.json │ │ ├── shards.json │ │ ├── shards_config.json │ │ ├── yang.json │ │ └── yin.json │ │ ├── packages.nix │ │ ├── wofi │ │ ├── default.nix │ │ └── themes │ │ │ ├── burst.css │ │ │ ├── shards.css │ │ │ ├── yang.css │ │ │ └── yin.css │ │ └── yazi.nix ├── lang │ ├── c.nix │ ├── dart.nix │ ├── databases.nix │ ├── lua.nix │ ├── nodejs.nix │ ├── python │ │ ├── py.nix │ │ └── pyenv.nix │ └── rust.nix ├── pkgs │ ├── README.md │ ├── ags.nix │ ├── alpaca.nix │ ├── kitty │ │ ├── default.nix │ │ └── themes │ │ │ ├── burst.conf │ │ │ ├── leaf_dark.conf │ │ │ ├── oldworld.conf │ │ │ ├── shards.conf │ │ │ ├── yang.conf │ │ │ └── yin.conf │ ├── lazygit.nix │ ├── music │ │ ├── cava.nix │ │ ├── custom_player │ │ │ ├── README.md │ │ │ ├── config.js │ │ │ ├── shared │ │ │ │ └── music.js │ │ │ ├── themes │ │ │ │ ├── burst.css │ │ │ │ ├── shards.css │ │ │ │ ├── yang.css │ │ │ │ └── yin.css │ │ │ ├── tsconfig.json │ │ │ └── windows │ │ │ │ └── music │ │ │ │ └── Music.js │ │ └── mpd │ │ │ ├── mpd.nix │ │ │ └── mpdris.nix │ ├── obsidian │ │ ├── default.nix │ │ └── themes │ │ │ ├── burst.json │ │ │ └── yang.json │ ├── packet-tracer.nix │ ├── tmux │ │ └── default.nix │ └── zathura.nix └── shell │ ├── README.md │ ├── cli │ ├── fastfetch │ │ ├── default.nix │ │ ├── goku.nix │ │ ├── logos │ │ │ ├── goku.png │ │ │ ├── goku_ascii.txt │ │ │ └── naruto_ascii.txt │ │ └── scripts │ │ │ ├── disk.sh │ │ │ ├── docker.sh │ │ │ ├── fail2ban.sh │ │ │ ├── ram.sh │ │ │ ├── services.sh │ │ │ └── temps.sh │ └── packages.nix │ ├── starship │ ├── pill.toml │ └── starship.nix │ └── zsh.nix └── wallpapers ├── Tokyo_Pink.png ├── astroneer.png ├── cat-ninja.jpg ├── cat-sword.jpg ├── deer_and_sunset.jpg ├── default.jpg ├── driver.png ├── flow.jpg ├── fractal.png ├── jack.png ├── mountain-lake.jpg ├── paper.png ├── pixel-bamboo.png ├── pixel-street.jpg ├── prisim.png ├── priyanuch_konkaew_unsplash.jpg ├── rain-man.jpg ├── ruins.jpg ├── shard.png ├── shifter.jpg ├── statue.jpg ├── street-view.png ├── streetlight.jpg ├── sundown-over-water.jpg ├── village.png ├── wallhaven3.jpg ├── yang.png └── yin.png /.gitignore: -------------------------------------------------------------------------------- 1 | user/pkgs/music/custom_player/types 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dots 2 | 3 | # Overview 4 | 5 | My collection of configurations to create a modular, cross-platform system capable of supporting a wide range of use-cases. 6 | 7 | This configuration comes with support for popular video drivers, common development tools, easy switching between system themes, preconfigured neovim editor with integrated theme support, system security packages and much more. My use case is primarily focused on development and study work, however the config aims to be easily customizeable to fit any need. 8 | 9 | > [!IMPORTANT] 10 | > I'm thinking of a change to Gentoo linux. I'm getting a little tired of finicking with multiple package versions, language versions, etc. and how isolated you become from the machien 11 | > That being said I'll continue to update this repo as I read up and experiment with Gentoo on my older machine. 12 | > Gentoo seems enticing with complete control over the system and package managment, and could be a great learning experience as I look to automate some of my most valued nix features into a traditionallinux distro. 13 | 14 | ## Configurations 15 | 16 |
17 | Primary DE 18 | 19 | - Wayland 20 | 21 | - **WM**: Hyprland 22 | 23 | - **Bar**: Hyprpanel 24 | 25 | - **Session Manager**: SDDM w/ Sugar Candy Theme 26 | 27 | - **Terminal**: Kitty 28 | 29 | - **Shell**: Zsh 30 | 31 | - **Editor**: Neovim 32 |
33 | 34 |
35 | Prepackaged Tools 36 | 37 | - Obsidian 38 | 39 | - Zathura 40 | 41 | - MPD 42 | 43 | - Cava 44 | 45 | - HyprIdle/HyprLock 46 | 47 | - Wofi 48 | 49 | - Docker 50 | 51 | - Alpaca 52 | 53 | - Yazi 54 |
55 | 56 |
57 | Inluded Security Packages 58 | 59 | - Fail2Ban 60 | 61 | - Unbound 62 | 63 | - Firewall Daemon 64 | 65 | - Sysctl 66 |
67 | 68 | # Builtin Themes 69 | 70 | This configuration comes with different pre packaged themes. Each theme has corresponding config files for customizeable applications, such as Kitty, Hyprpanel, etc. 71 | 72 | This makes it so that updating home-manager with a different set theme, will update the config files to match the new theme. 73 | 74 | ## Themes 75 | 76 |
77 | Yin 78 | 79 | ![Home](https://i.imgur.com/PUmXPjc.png) 80 | 81 | ![Neovim](https://i.imgur.com/qKOq2yO.png) 82 | 83 | ![Obsidian/zathura](https://i.imgur.com/peLx7e2.png) 84 | 85 |
86 | 87 |
88 | Yang 89 | 90 | ![Home](https://i.imgur.com/UennvDJ.png) 91 | 92 | ![Neovim](https://i.imgur.com/H7TOMbB.png) 93 | 94 | ![Obsidian/zathura](https://i.imgur.com/51cfRHV.png) 95 | 96 |
97 | 98 |
99 | Burst 100 | 101 | ![Home](https://i.imgur.com/BwRwpYV.png) 102 | 103 | ![Neovim](https://i.imgur.com/TNgCoEj.png) 104 | 105 | ![Obsidian/zathura](https://i.imgur.com/tG6IhZx.png) 106 | 107 |
108 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "I'm all jacked up on Mt. Dew"; 3 | 4 | inputs = { 5 | nixpkgs.url = "nixpkgs/nixos-unstable"; 6 | home-manager.url = "github:nix-community/home-manager"; 7 | home-manager.inputs.nixpkgs.follows = "nixpkgs"; 8 | 9 | grub2-themes.url = "github:vinceliuice/grub2-themes"; 10 | 11 | sddm-sugar-candy-nix = { 12 | url = "gitlab:Zhaith-Izaliel/sddm-sugar-candy-nix"; 13 | inputs.nixpkgs.follows = "nixpkgs"; 14 | }; 15 | 16 | hyprpanel.url = "github:Jas-SinghFSU/HyprPanel"; 17 | }; 18 | 19 | outputs = { self, nixpkgs, home-manager, hyprpanel, sddm-sugar-candy-nix, grub2-themes, ... }: 20 | let 21 | systemSettings = { 22 | system = "x86_64-linux"; 23 | hostname = "TheTrap"; 24 | timezone = "America/Chicago"; 25 | locale = "en_US.UTF-8"; 26 | keyLayout = "us"; 27 | bootmode = "uefi"; 28 | bootMountPath = "/boot"; 29 | grubDevice = ""; 30 | gpu = { 31 | type = "hybrid"; 32 | hybrid = { 33 | iGpuType = "amd"; 34 | # BusIDs can be found with `lspci -nn | grep -i vga | grep -i ` 35 | # The ID will be returned as "06:00.0" but must be formatted to remove trailing 0s and prefixed with "PCI:" 36 | iGpuBusId = "PCI:0:6:0"; 37 | dGpuBusID = "PCI:0:1:0"; 38 | # The primaryCard will be the linked card to the preferred GPU (typically the intrgrated GPU) 39 | # The card can be found by using `ls -l /dev/dri/by-path/` and finding the corresponding card number 40 | primaryCard = "card2"; 41 | }; 42 | }; 43 | }; 44 | userSettings = { 45 | username = "gitmoney"; 46 | name = "gitmoney"; 47 | email = "jaredonnell21@gmail.com"; 48 | theme = "shards"; # yin | yang | burst | shards 49 | wm = "hyprland"; 50 | hypr = { 51 | # hyprland specific settings 52 | monitors = [ "eDP-2" ]; # can be found with `hyprctl monitors` 53 | }; 54 | wmType = "wayland"; 55 | browser = "firefox"; 56 | terminal = "kitty"; 57 | shell = "zsh"; 58 | nvim = { 59 | nvim_compile = true; # To use compiled colorschemes using color-compiler.nvim 60 | match_theme = true; # whether to use colors.nix located in system/pkgs/nvim 61 | }; 62 | fonts = [ pkgs.victor-mono ]; 63 | nerdFonts = [ pkgs.nerd-fonts.jetbrains-mono ]; 64 | fontSize = "11.5"; 65 | }; 66 | lib = nixpkgs.lib; 67 | pkgs = nixpkgs.legacyPackages.${systemSettings.system}; 68 | in 69 | { 70 | nixosConfigurations = { 71 | main = lib.nixosSystem { 72 | system = systemSettings.system; 73 | modules = [ 74 | ./hosts/${systemSettings.hostname}/configuration.nix 75 | ]; 76 | specialArgs = { 77 | inherit systemSettings; 78 | inherit userSettings; 79 | inherit grub2-themes; 80 | inherit sddm-sugar-candy-nix; 81 | }; 82 | }; 83 | }; 84 | homeConfigurations = { 85 | ${userSettings.username} = home-manager.lib.homeManagerConfiguration { 86 | inherit pkgs; 87 | modules = [ 88 | ./hosts/${systemSettings.hostname}/home.nix 89 | ]; 90 | extraSpecialArgs = { 91 | inherit systemSettings; 92 | inherit userSettings; 93 | inherit hyprpanel; 94 | }; 95 | }; 96 | }; 97 | }; 98 | } 99 | -------------------------------------------------------------------------------- /hosts/README.md: -------------------------------------------------------------------------------- 1 | # Hosts 2 | 3 | Configured systems will be found here. 4 | 5 | Each subdirectory should be named after the hostname of the respective machine. It will include: 6 | 7 | - The systems pre-generated `hardware-configuration` 8 | - A `configuration.nix` for system configuration 9 | - A `home.nix` for home-manager configuration 10 | -------------------------------------------------------------------------------- /hosts/TheTrap/README.md: -------------------------------------------------------------------------------- 1 | # TheTrap 2 | 3 | This is my main machine that I use to run all my development work. It is an Eluktronics RP-15 G2 hybrid laptop 4 | 5 | ## Specs 6 | 7 | - **CPU**: AMD Ryzen 7840HS 8 | - **iGPU**: AMD Radeon 780m 9 | - **dGPU**: NVIDIA RTX 4060 10 | - **RAM**: 32GB 11 | - **SSD**: 1TB 12 | - **Display**: 15.6" 165Hz QHD 2560x1440 13 | -------------------------------------------------------------------------------- /hosts/TheTrap/configuration.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, lib, systemSettings, userSettings, grub2-themes, sddm-sugar-candy-nix, ... }: 2 | { 3 | imports = 4 | [ 5 | ./hardware-configuration.nix 6 | ../../system/hardware/drivers/${systemSettings.gpu.type}.nix 7 | ../../system/hardware/drivers/cuda-cache.nix 8 | ../../system/hardware/drivers/xserver-video.nix 9 | ../../system/hardware/bluetooth.nix 10 | ../../system/hardware/pipewire.nix 11 | ../../system/hardware/power-profile.nix 12 | 13 | ../../system/security/firewall.nix 14 | ../../system/security/unbound.nix 15 | ../../system/security/sysctl.nix 16 | ../../system/security/fail2ban.nix 17 | ../../system/security/sudo.nix 18 | 19 | ../../system/boot/grub/${systemSettings.bootmode}.nix 20 | grub2-themes.nixosModules.default 21 | ../../system/boot/international.nix 22 | 23 | ../../system/pkgs/sddm.nix 24 | sddm-sugar-candy-nix.nixosModules.default 25 | 26 | ../../user/shell/cli/packages.nix 27 | ../../user/shell/starship/starship.nix 28 | 29 | ../../system/pkgs/docker.nix 30 | ../../system/pkgs/vm.nix 31 | ../../system/pkgs/aider.nix 32 | ../../system/wm/hypr/packages.nix 33 | ]; 34 | 35 | nixpkgs.overlays = [ 36 | sddm-sugar-candy-nix.overlays.default 37 | ]; 38 | 39 | networking.hostName = systemSettings.hostname; # Define your hostname. 40 | 41 | # Enable networking 42 | networking.networkmanager.enable = true; 43 | 44 | # Set your time zone. 45 | time.timeZone = systemSettings.timezone; 46 | 47 | # Define a user account. Don't forget to set a password with ‘passwd’. 48 | users.users.${userSettings.username} = { 49 | isNormalUser = true; 50 | description = userSettings.name; 51 | extraGroups = [ "networkmanager" "wheel" ]; 52 | shell = pkgs.${userSettings.shell}; 53 | packages = with pkgs; [ ]; 54 | }; 55 | 56 | # Enable automatic login for the user. 57 | services.getty.autologinUser = userSettings.username; 58 | 59 | # Allow unfree packages 60 | nixpkgs.config.allowUnfree = true; 61 | 62 | # ZSH 63 | users.defaultUserShell = pkgs.${userSettings.shell}; 64 | programs.${userSettings.shell}.enable = true; 65 | 66 | # Documentation 67 | documentation.enable = true; 68 | documentation.man.enable = true; 69 | documentation.man.generateCaches = true; 70 | documentation.dev.enable = true; 71 | documentation.nixos.enable = true; 72 | 73 | environment.systemPackages = with pkgs; [ 74 | pkg-config 75 | os-prober 76 | cron 77 | upower 78 | brightnessctl 79 | libnotify 80 | wget 81 | curl 82 | unzip 83 | ripgrep 84 | man-pages 85 | man-pages-posix 86 | 87 | tmux 88 | neovim 89 | git 90 | ]; 91 | 92 | # UPOWER 93 | services.upower.enable = true; 94 | 95 | # DCONF 96 | programs.dconf.enable = true; 97 | 98 | # FONTS 99 | fonts.packages = userSettings.nerdFonts ++ userSettings.fonts; 100 | 101 | # CODEIUM FIX 102 | programs.nix-ld.enable = true; 103 | programs.nix-ld.libraries = [ ]; 104 | 105 | # KERNEL PKG 106 | boot.kernelPackages = pkgs.linuxPackages; 107 | 108 | # ELECTRON APPS WAYLAND 109 | environment.sessionVariables.NIXOS_OZONE_WL = "1"; 110 | 111 | # FLAKES 112 | nix.settings.experimental-features = [ "nix-command" "flakes" ]; 113 | 114 | # Enable the OpenSSH daemon. 115 | services.openssh.enable = true; 116 | 117 | system.stateVersion = "24.05"; # Did you read the comment? 118 | } 119 | -------------------------------------------------------------------------------- /hosts/TheTrap/hardware-configuration.nix: -------------------------------------------------------------------------------- 1 | # Do not modify this file! It was generated by ‘nixos-generate-config’ 2 | # and may be overwritten by future invocations. Please make changes 3 | # to /etc/nixos/configuration.nix instead. 4 | { config, lib, pkgs, modulesPath, ... }: 5 | 6 | { 7 | imports = 8 | [ (modulesPath + "/installer/scan/not-detected.nix") 9 | ]; 10 | 11 | boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usbhid" "usb_storage" "sd_mod" ]; 12 | boot.initrd.kernelModules = [ ]; 13 | boot.kernelModules = [ "kvm-amd" ]; 14 | boot.extraModulePackages = [ ]; 15 | 16 | fileSystems."/" = 17 | { device = "/dev/disk/by-uuid/30363b29-8a13-4d56-bd54-e493821d04bc"; 18 | fsType = "ext4"; 19 | }; 20 | 21 | fileSystems."/boot" = 22 | { device = "/dev/disk/by-uuid/4C82-2FEE"; 23 | fsType = "vfat"; 24 | options = [ "fmask=0077" "dmask=0077" ]; 25 | }; 26 | 27 | fileSystems."/home" = 28 | { device = "/dev/disk/by-uuid/92bc56ac-4b4c-4323-b4a1-bdfbcab2d853"; 29 | fsType = "ext4"; 30 | }; 31 | 32 | swapDevices = 33 | [ { device = "/dev/disk/by-uuid/44fd6624-0bd4-4741-b630-a5ea963b6240"; } 34 | ]; 35 | 36 | # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 37 | # (the default) this is the recommended approach. When using systemd-networkd it's 38 | # still possible to use this option, but it's recommended to use it in conjunction 39 | # with explicit per-interface declarations with `networking.interfaces..useDHCP`. 40 | networking.useDHCP = lib.mkDefault true; 41 | # networking.interfaces.enp2s0.useDHCP = lib.mkDefault true; 42 | # networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true; 43 | 44 | nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; 45 | hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 46 | } 47 | -------------------------------------------------------------------------------- /hosts/TheTrap/home.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, userSettings, hyprpanel, ... }: 2 | { 3 | home.stateVersion = "24.05"; 4 | home.username = userSettings.username; 5 | home.homeDirectory = "/home/" + userSettings.username + "/"; 6 | 7 | home.file.".system-theme".text = userSettings.theme; # writes current theme to file to be used by scripts 8 | 9 | nixpkgs.config.allowUnfree = true; 10 | nixpkgs.overlays = [ hyprpanel.overlay ]; 11 | 12 | imports = [ 13 | ../../user/shell/${userSettings.shell}.nix 14 | ../../user/shell/cli/fastfetch/default.nix 15 | ../../user/pkgs/tmux/default.nix 16 | 17 | ../../user/pkgs/zathura.nix 18 | ../../user/pkgs/kitty/default.nix 19 | ../../user/pkgs/obsidian/default.nix 20 | ../../user/pkgs/lazygit.nix 21 | ../../user/pkgs/ags.nix 22 | ../../user/pkgs/alpaca.nix 23 | ../../user/pkgs/packet-tracer.nix 24 | 25 | ../../user/pkgs/music/mpd/mpd.nix 26 | ../../user/pkgs/music/mpd/mpdris.nix 27 | ../../user/pkgs/music/cava.nix 28 | 29 | ../../system/wm/hypr/hyprland.nix 30 | ../../system/wm/hypr/hyprpaper/default.nix 31 | 32 | ../../user/de/hypr/packages.nix 33 | ../../user/de/hypr/gtk/default.nix 34 | ../../user/de/hypr/wofi/default.nix 35 | ../../user/de/hypr/yazi.nix 36 | ../../user/de/hypr/hyprlock.nix 37 | ../../user/de/hypr/hypridle.nix 38 | 39 | ../../user/lang/databases.nix 40 | ../../user/lang/lua.nix 41 | ../../user/lang/c.nix 42 | ../../user/lang/rust.nix 43 | ../../user/lang/python/py.nix 44 | ../../user/lang/python/pyenv.nix 45 | ../../user/lang/nodejs.nix 46 | ../../user/lang/dart.nix 47 | ] ++ (if userSettings.nvim.match_theme then 48 | [ ../../system/pkgs/nvim/colors.nix ] 49 | else [ ] 50 | ); 51 | 52 | programs = { 53 | git = { 54 | enable = true; 55 | userName = "paradoxical-dev"; 56 | userEmail = userSettings.email; 57 | }; 58 | neovim = { 59 | enable = true; 60 | defaultEditor = true; 61 | }; 62 | }; 63 | } 64 | -------------------------------------------------------------------------------- /scripts/lessfilter.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # INFO: filter for fzf file content previews 4 | 5 | mime=$(file -bL --mime-type "$1") 6 | category=${mime%%/*} 7 | kind=${mime##*/} 8 | if [ -d "$1" ]; then 9 | eza --git -hl --color=always --icons "$1" 10 | elif [ "$category" = image ]; then 11 | # chafa "$1" 12 | exiftool "$1" 13 | # kitten icat "$1" 14 | elif [ "$kind" = vnd.openxmlformats-officedocument.spreadsheetml.sheet ] || \ 15 | [ "$kind" = vnd.ms-excel ]; then 16 | in2csv "$1" | xsv table | bat -ltsv --color=always 17 | elif [ "$category" = text ]; then 18 | bat --color=always "$1" 19 | else 20 | lesspipe.sh "$1" | bat --color=always 21 | fi 22 | -------------------------------------------------------------------------------- /scripts/theme-switch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Define the theme using the generated theme file from home-manager 4 | theme=$(cat "$HOME/.system-theme" 2>/dev/null) 5 | if [ -z "$theme" ]; then 6 | echo "Error: ~/.system-theme file is not set. Please ensure it is configured correctly in your environment." 7 | exit 1 8 | fi 9 | 10 | echo "Theme: $theme" 11 | echo "System theme: $SYSTEM_THEME" 12 | 13 | # Check if the SYSTEM_THEME environment variable is set 14 | if [ -z "$SYSTEM_THEME" ]; then 15 | echo "Warning: SYSTEM_THEME is not set in the environment. Assuming new theme." 16 | else 17 | # Do not run if the theme matches the current theme 18 | if [ "$theme" = "$SYSTEM_THEME" ]; then 19 | echo "System theme is already set to $SYSTEM_THEME. Skipping theme switch." 20 | exit 0 21 | fi 22 | fi 23 | 24 | # Set the SYSTEM_THEME environment variable to match new theme 25 | export SYSTEM_THEME="$theme" 26 | 27 | # Check if the hyprpanel theme file exists 28 | hyprpanel_theme_file="$HOME/dots/user/de/hypr/hyprpanel/$SYSTEM_THEME.json" 29 | if [ ! -f "$hyprpanel_theme_file" ]; then 30 | echo "Error: Theme file $hyprpanel_theme_file does not exist." 31 | exit 1 32 | fi 33 | 34 | echo "Changing system theme to $SYSTEM_THEME ..." 35 | 36 | echo "Changing Hyprpanel theme to $hyprpanel_theme_file" 37 | if ! hyprpanel -r "useTheme('$hyprpanel_theme_file')"; then 38 | echo "Error: Failed to apply Hyprpanel theme." 39 | exit 1 40 | fi 41 | 42 | echo "Updating wallpaper ..." 43 | if ! systemctl --user restart hyprpaper.service; then 44 | echo "Error: Failed to restart hyprpaper.service. Check the status for more details." 45 | exit 1 46 | fi 47 | -------------------------------------------------------------------------------- /scripts/vadeer.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # INFO: This script is a workaround for using vadeer macro pad on linux 4 | # It identifies the vadeer device and starts reading from it which somehow works 5 | 6 | FILES=/dev/hidraw* 7 | for f in $FILES 8 | do 9 | FILE=${f##*/} 10 | DEVICE="$(cat /sys/class/hidraw/${FILE}/device/uevent | grep HID_NAME | cut -d '=' -f2)" 11 | if [ "$DEVICE" = "Vaydeer 9-key Smart Keypad" ] 12 | then 13 | printf "%s \t %s \n" $FILE "$DEVICE" 14 | cat /dev/${FILE} > /dev/null & 15 | fi 16 | done 17 | -------------------------------------------------------------------------------- /scripts/vi-modes/insert.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mode=$(cat ~/.current_vi_mode) 4 | if [ "$mode" = "i" ] 5 | then 6 | exit 0 7 | else 8 | exit 1 9 | fi 10 | -------------------------------------------------------------------------------- /scripts/vi-modes/normal.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mode=$(cat ~/.current_vi_mode) 4 | if [ "$mode" = "n" ] 5 | then 6 | exit 0 7 | else 8 | exit 1 9 | fi 10 | -------------------------------------------------------------------------------- /scripts/vi-modes/replace.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mode=$(cat ~/.current_vi_mode) 4 | if [ "$mode" = "r" ] 5 | then 6 | exit 0 7 | else 8 | exit 1 9 | fi 10 | 11 | -------------------------------------------------------------------------------- /scripts/vi-modes/visual.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | mode=$(cat ~/.current_vi_mode) 4 | if [ "$mode" = "v" ] 5 | then 6 | exit 0 7 | else 8 | exit 1 9 | fi 10 | 11 | -------------------------------------------------------------------------------- /scripts/vi-modes/vline.sh: -------------------------------------------------------------------------------- 1 | 2 | #!/bin/sh 3 | 4 | mode=$(cat ~/.current_vi_mode) 5 | if [ "$mode" = "vl" ] 6 | then 7 | exit 0 8 | else 9 | exit 1 10 | fi 11 | 12 | -------------------------------------------------------------------------------- /system/README.md: -------------------------------------------------------------------------------- 1 | # System Configs 2 | 3 | The system wide configurations will be stored here. This can include: 4 | 5 | - System services 6 | - Hardware specific config, 7 | - Security packages 8 | - Window managers 9 | - etc. 10 | 11 | This can also include any package defined within the `environment.systemPackages` however, as with the user directory, there will be crossovers. 12 | -------------------------------------------------------------------------------- /system/boot/grub/uefi.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, grub2-themes, ... }: 2 | { 3 | boot.loader.grub = { 4 | enable = true; 5 | device = "nodev"; 6 | efiSupport = true; 7 | useOSProber = true; 8 | efiInstallAsRemovable = true; 9 | }; 10 | boot.loader.grub2-theme = { 11 | enable = true; 12 | theme = "vimix"; 13 | footer = true; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /system/boot/international.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, systemSettings, ... }: 2 | { 3 | i18n.defaultLocale = systemSettings.locale; 4 | 5 | i18n.extraLocaleSettings = { 6 | LC_ADDRESS = systemSettings.locale; 7 | LC_IDENTIFICATION = systemSettings.locale; 8 | LC_MEASUREMENT = systemSettings.locale; 9 | LC_MONETARY = systemSettings.locale; 10 | LC_NAME = systemSettings.locale; 11 | LC_NUMERIC = systemSettings.locale; 12 | LC_PAPER = systemSettings.locale; 13 | LC_TELEPHONE = systemSettings.locale; 14 | LC_TIME = systemSettings.locale; 15 | }; 16 | 17 | services.xserver.xkb = { 18 | layout = systemSettings.keyLayout; 19 | variant = ""; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /system/hardware/README.md: -------------------------------------------------------------------------------- 1 | # Hardware 2 | 3 | This contains configurable hardware services. 4 | 5 | This can include: 6 | 7 | - Bluetooth 8 | - Audio servers 9 | - Power managment services 10 | - etc. 11 | -------------------------------------------------------------------------------- /system/hardware/bluetooth.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | 3 | { 4 | hardware.bluetooth.enable = true; 5 | hardware.bluetooth.powerOnBoot = true; 6 | services.blueman.enable = true; 7 | } 8 | -------------------------------------------------------------------------------- /system/hardware/drivers/README.md: -------------------------------------------------------------------------------- 1 | # Drivers 2 | 3 | Graphic drivers will be stored in this directory. 4 | 5 | This is meant to be dynamically loaded into the `configuration.nix` by using the value of the `gpu_type` attribute from the `flake.nix`. 6 | 7 | ## Card Support 8 | 9 | As of right now only hybrid graphics are supported. This file supports both Intel and AMD iGPUs with NVIDIA dGPUs (the most common hybrid setup) and is dynamic based on the `hybrid.iGpuType` attribute value. 10 | -------------------------------------------------------------------------------- /system/hardware/drivers/cuda-cache.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | nix.settings = { 4 | substituters = [ 5 | "https://cuda-maintainers.cachix.org" 6 | ]; 7 | trusted-public-keys = [ 8 | "cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E=" 9 | ]; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /system/hardware/drivers/hybrid.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, systemSettings, ... }: 2 | { 3 | 4 | # Adds support for nvidia-container-toolkit 5 | environment.systemPackages = with pkgs; [ nvidia-container-toolkit ]; 6 | hardware.nvidia-container-toolkit.enable = true; 7 | 8 | # Disable nvidia card for hyprland 9 | environment.variables.AQ_DRM_DEVICES = "/dev/dri/${systemSettings.gpu.hybrid.primaryCard}"; 10 | 11 | hardware.graphics = { 12 | enable = true; 13 | }; 14 | 15 | hardware.nvidia = { 16 | 17 | modesetting.enable = true; 18 | 19 | powerManagement.enable = true; 20 | 21 | powerManagement.finegrained = true; 22 | 23 | open = false; 24 | 25 | nvidiaSettings = true; 26 | 27 | package = config.boot.kernelPackages.nvidiaPackages.stable; 28 | 29 | prime = { 30 | offload = { 31 | enable = true; 32 | enableOffloadCmd = true; 33 | }; 34 | ${if systemSettings.gpu.hybrid.iGpuType == "amd" then 35 | "amdgpuBusId" 36 | else "intelBusId"} = "${systemSettings.gpu.hybrid.iGpuBusId}"; 37 | nvidiaBusId = "${systemSettings.gpu.hybrid.dGpuBusID}"; 38 | }; 39 | 40 | }; 41 | } 42 | -------------------------------------------------------------------------------- /system/hardware/drivers/xserver-video.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, systemSettings, ... }: 2 | { 3 | services.xserver = { 4 | enable = true; 5 | videoDrivers = 6 | if systemSettings.gpu.type == "hybrid" then 7 | [ 8 | (if systemSettings.gpu.hybrid.iGpuType == "amd" 9 | then "amdgpu" 10 | else "intel") 11 | "nvidia" 12 | ] 13 | else if systemSettings.gpu.type == "nvidia" then 14 | [ "nvidia" ] 15 | else if systemSettings.gpu.type == "amd" then 16 | [ "amdgpu" ] 17 | else if systemSettings.gpu.type == "intel" then 18 | [ "intel" ] 19 | else 20 | throw "Unknown GPU type: ${systemSettings.gpu.type}"; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /system/hardware/pipewire.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | pipewire 5 | rtkit 6 | ]; 7 | services.pipewire = { 8 | enable = true; 9 | audio.enable = true; 10 | # systemWide = true; 11 | }; 12 | security.rtkit.enable = true; 13 | } 14 | -------------------------------------------------------------------------------- /system/hardware/power-profile.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | power-profiles-daemon 5 | ]; 6 | services.power-profiles-daemon.enable = true; 7 | } 8 | -------------------------------------------------------------------------------- /system/pkgs/README.md: -------------------------------------------------------------------------------- 1 | # System Packages 2 | 3 | This directory contains the system packages defined outside of home-manager. 4 | 5 | This can include display managers, system services (not related to hardware), etc. 6 | -------------------------------------------------------------------------------- /system/pkgs/aider.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ aider-chat ]; 4 | } 5 | -------------------------------------------------------------------------------- /system/pkgs/docker.nix: -------------------------------------------------------------------------------- 1 | { pkgs, userSettings, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | docker 5 | docker-compose 6 | lazydocker 7 | ]; 8 | 9 | virtualisation.docker = { 10 | enable = true; 11 | enableOnBoot = true; 12 | # moves container data to home partition to preserve storage on root 13 | extraOptions = "--data-root=/home/${userSettings.username}/docker"; # The corresponding directory will need to chowned with `chown -R root:docker $HOME/doker` 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /system/pkgs/nvim/README.md: -------------------------------------------------------------------------------- 1 | # Neovim 2 | 3 | I don't think I'll ever convert my Neovim configs to Nix. This seems like a huge undertaking for something as simple as copying the preferred config over to `~.config/nvim`. 4 | 5 | I have two different configuration for Neovim: 6 | 7 | - **custom_nvim** 8 | 9 | This is my configuration I built from scratch, based on ThePrimeagen's config. I never use it anymore but I couldn't brign myself to remove it, so here it stays. 10 | 11 | - ~~astro_nvim~~ (will be removed soon) 12 | 13 | This is my custom config based on astro nvim. It is my daily driver for development work and includes some great plugins to create a cohesive IDE environment. 14 | 15 | - **main_nvim** 16 | 17 | I created this setup to ditch Astro. After a while astro began to feel like *the Windows of Neovim*. It was bloated and hard to deeply configure the internals without viewing source code. 18 | 19 | That being said I decided to try and create a new setup from scratch as an omage to my original setup. 20 | 21 | This setup is a full featured IDE with a focus on speed and performance. Both the editor itself and the movement/navigation plugins added are optimized for speed as much as possible. 22 | 23 | So much so that the faster startup times are around **13-14 ms**. I ditched a ton of non essential plugins while still retaining a beutiful UI and added some that I thought would enhance my efficency even more. 24 | 25 | I think this will be my endgame config, given some more tweaks here and there. 26 | -------------------------------------------------------------------------------- /system/pkgs/nvim/colors.nix: -------------------------------------------------------------------------------- 1 | { userSettings, ... }: 2 | # A simple update for neovims colorscheme 3 | let 4 | currentTheme = 5 | if userSettings.nvim.nvim_compile then 6 | { 7 | config = 8 | '' 9 | -- WARN: This file has been generated by home manager and pulled from the dotfiles repo 10 | return { 11 | { 12 | "paradoxical-dev/color-compiler.nvim", 13 | lazy = false, 14 | priority = 1000, 15 | opts = { 16 | extensions = { 17 | "dap", 18 | "diffview", 19 | "flash", 20 | "flog", 21 | "gitsigns", 22 | "harpoon", 23 | "heirline", 24 | "lazy", 25 | "markview", 26 | "mason", 27 | "neotest", 28 | "semantics", 29 | "snacks", 30 | "telescope", 31 | "ufo", 32 | "which-key", 33 | }, 34 | theme = "${userSettings.theme}" 35 | } 36 | } 37 | } 38 | ''; 39 | } 40 | else import ./themes/${userSettings.theme}.nix; 41 | in 42 | { 43 | home.file.".config/nvim/lua/plugins/theme.lua".text = currentTheme.config; 44 | } 45 | -------------------------------------------------------------------------------- /system/pkgs/nvim/compiled-themes/README.md: -------------------------------------------------------------------------------- 1 | # Compiled Themes 2 | 3 | This directory contains compiled themes for neovim generated using my plugin [color-compiler.nvim](https://github.com/paradoxical-dev/color-compiler.nvim) 4 | 5 | The files here are for storage purposes and will be copied over to `~/.local/share/nvim/color-compiler/` 6 | 7 | Since they are compiled, the files will not be human readable and are not intended to be edited. 8 | 9 | To use compiled themes simply set the userSettings argument`nvim.nvim_compile` to true in the flake.nix 10 | -------------------------------------------------------------------------------- /system/pkgs/nvim/compiled-themes/burst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/system/pkgs/nvim/compiled-themes/burst -------------------------------------------------------------------------------- /system/pkgs/nvim/compiled-themes/shards: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/system/pkgs/nvim/compiled-themes/shards -------------------------------------------------------------------------------- /system/pkgs/nvim/compiled-themes/yang: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/system/pkgs/nvim/compiled-themes/yang -------------------------------------------------------------------------------- /system/pkgs/nvim/compiled-themes/yin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/system/pkgs/nvim/compiled-themes/yin -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/.luarc.json: -------------------------------------------------------------------------------- 1 | { 2 | "diagnostics.globals": [ 3 | "vim", 4 | "Snacks" 5 | ] 6 | } -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/README.md: -------------------------------------------------------------------------------- 1 | # 🚀 Blazing Fast; No Compromises 2 | 3 | This config creates a blazing fast neovim experience, with no compromises in features. From the plugin selection to the keybindings, everything is optimized for maximum performance. 4 | 5 | Built on [Lazy](https://github.com/folke/lazy.nvim) I aimed to lazy load 99% of the plugins I use. Only including 2 plugins at startup (colorscheme, and snacks for dashboard) for a total of **3 plugins** loaded at start, including Lazy. 6 | 7 | # 📷 Screenshots 8 | 9 | | ![Dashboard](https://i.imgur.com/A8iky5R.png) | ![Tests](https://i.imgur.com/RPXN2fZ.png) | 10 | | --------------------------------------------- | -------------------------------------------------------------- | 11 | | ![Leetcode](https://i.imgur.com/PMwWYtp.png) | ![Split View w/ Multi Cursor](https://i.imgur.com/FivDcDo.png) | 12 | 13 | # ✨ Features 14 | 15 | Among other thigs, this config includes: 16 | 17 | - 📑 Multi cursor support 18 | - 🔎 Full featured Lsp w/ Dap support 19 | - 📋 Linting and formatting support 20 | - 🧪 Testing support 21 | - 🧬 Leetcode integration 22 | - 🤖 Local AI integration including chats, code completion and file editing/creation 23 | - 💻 Terminal integrations with language specific REPLs 24 | - ⚡️ Advanced navigation with multiple plugins 25 | - 👀 And more 26 | 27 | All of this packaged in an _instant_, with startuptimes averaging **13-14** ms at their fastest! (on my hardware) 28 | 29 | ## 🔌 Plugins 30 | 31 | Below is a list of all the plugins installed with this config: 32 | 33 | - [autopairs](https://github.com/windwp/nvim-autopairs) 34 | - [codeium](https://github.com/Exafunction/codeium.nvim) (AI code completion) 35 | - [color-compiler.nvim](https://github.com/paradoxical-dev/color-compiler.nvim) (Theme compiler for faster loading times) 36 | - [dressing.nvim](https://github.com/stevearc/dressing.nvim) (Enhanced UI) 37 | - [fzf-lua](https://github.com/ibhagwan/fzf-lua) 38 | - [gitsigns](https://github.com/lewis6991/gitsigns.nvim) 39 | - [goto-preview](https://github.com/rmagatti/goto-preview) 40 | - [harpoon](https://github.com/theprimeagen/harpoon) 41 | - [heirline](https://github.com/rebelot/heirline.nvim) (Custom statusline/wibar) 42 | - [leetcode.nvim](https://github.com/kawre/leetcode.nvim) 43 | - [mason-lspconfig](https://github.com/williamboman/mason-lspconfig.nvim) 44 | - [mason-null-ls.nvim](https://github.com/jay-babu/mason-null-ls.nvim) 45 | - [mason-nvim-dap.nvim](https://github.com/jay-babu/mason-nvim-dap.nvim) 46 | - [mason](https://github.com/williamboman/mason.nvim) 47 | - [menu](https://github.com/nvzone/menu) (Asthetic quick menus) 48 | - [minty](https://github.com/nvzone/minty) (Color picker) 49 | - [neotest](https://github.com/nvim-neotest/neotest) 50 | - [neo-tree](https://github.com/nvim-neo-tree/neo-tree.nvim) 51 | - [neollama](https://github.com/paradoxical-dev/neollama) (Ollama chat support) 52 | - [nvim-aider](https://github.com/GeorgesAlkhouri/nvim-aider) (Cursor like AI support) 53 | - [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) 54 | - [nvim-colorizer](https://github.com/norcalli/nvim-colorizer.lua) 55 | - [nvim-dap-ui](https://github.com/rcarriga/nvim-dap-ui) 56 | - [nvim-dap](https://github.com/mfussenegger/nvim-dap) 57 | - [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) 58 | - [nvim-navic](https://github.com/SmiteshP/nvim-navic) (Symbol trackig winbar) 59 | - [nvim-ufo](https://github.com/kevinhwang91/nvim-ufo) (Folds) 60 | - [render-markdown.nvim](https://github.com/MeanderingProgrammer/render-markdown.nvim) (Fancy markdown) 61 | - [snacks.nvim](https://github.com/folke/snacks.nvim) (Our lord and savior [_folke_](https://github.com/folke)) 62 | - [snipe.nvim](https://github.com/leath-dub/snipe.nvim) (Alternate buffer navigation) 63 | - [symbols-outline.nvim](https://github.com/simrat39/symbols-outline.nvim) 64 | - [todo-comments.nvim](https://github.com/folke/todo-comments.nvim) 65 | - [toggleterm.nvim](https://github.com/akinsho/toggleterm.nvim) 66 | - [treesitter](https://github.com/nvim-treesitter/nvim-treesitter) 67 | - [typr](https://github.com/nvzone/typr) (Typing practice in neovim!) 68 | - [vim-dadbod-ui](https://github.com/kristijanhusak/vim-dadbod-ui) (Database UI) 69 | - [vim-dadbod](https://github.com/tpope/vim-dadbod) (Database support) 70 | - [vim-visual-multi](https://github.com/mg979/vim-visual-multi) (Multiple cursors) 71 | - [which-key.nvim](https://github.com/folke/which-key.nvim) (Keybindings cheat sheet) 72 | 73 | > [!TIP] 74 | > I won't include the keybind list here. Thats what which-key is for! 75 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/init.lua: -------------------------------------------------------------------------------- 1 | -- INFO: optional profiling; start nvim with `PROF=1 nvim` 2 | if vim.env.PROF then 3 | local snacks = vim.fn.stdpath("data") .. "/lazy/snacks.nvim" 4 | vim.opt.rtp:append(snacks) 5 | require("snacks.profiler").startup({ 6 | startup = { 7 | event = "UIEnter", 8 | }, 9 | presets = { 10 | startup = { 11 | min_time = 0, 12 | sort = true, 13 | }, 14 | }, 15 | }) 16 | end 17 | -- 18 | 19 | -- BUG: temporary fix for :Inspect command bug. See: https://github.com/neovim/neovim/issues/31675 20 | vim.hl = vim.highlight 21 | -- 22 | 23 | -- INFO: fix python path 24 | -- 25 | vim.g.python3_host_prog = "~/.nix-profile/bin/python3" 26 | -- 27 | 28 | -- INFO: bootstrap lazy.nvim 29 | local lazypath = vim.env.LAZY or vim.fn.stdpath("data") .. "/lazy/lazy.nvim" 30 | if not (vim.env.LAZY or (vim.uv or vim.loop).fs_stat(lazypath)) then 31 | -- stylua: ignore 32 | vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", 33 | lazypath }) 34 | end 35 | vim.opt.rtp:prepend(lazypath) 36 | 37 | if not pcall(require, "lazy") then 38 | -- stylua: ignore 39 | vim.api.nvim_echo( 40 | { { ("Unable to load lazy from: %s\n"):format(lazypath), "ErrorMsg" }, { "Press any key to exit...", "MoreMsg" } }, 41 | true, {}) 42 | vim.fn.getchar() 43 | vim.cmd.quit() 44 | end 45 | -- 46 | 47 | -- INFO: Snacks debugging 48 | _G.dd = function(...) 49 | Snacks.debug.inspect(...) 50 | end 51 | _G.bt = function() 52 | Snacks.debug.backtrace() 53 | end 54 | vim.print = _G.dd 55 | -- 56 | 57 | -- INFO: add local rocks path 58 | -- this is only needed for non NixOS unsupported luarocks such as gumbo 59 | local lua_path = vim.fn.stdpath("config") 60 | .. "/lua/rocks/share/lua/5.1/?.lua;" 61 | .. vim.fn.stdpath("config") 62 | .. "/lua/rocks/share/lua/5.1/?/init.lua" 63 | local lua_cpath = vim.fn.stdpath("config") .. "/lua/rocks/lib/lua/5.1/?.so" 64 | 65 | package.path = package.path .. ";" .. lua_path 66 | package.cpath = package.cpath .. ";" .. lua_cpath 67 | -- 68 | 69 | require("lazy_setup") 70 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/lazy_setup.lua: -------------------------------------------------------------------------------- 1 | -- VIM OPTIONS -- 2 | 3 | -- line #s 4 | vim.opt.nu = true 5 | vim.opt.relativenumber = true 6 | 7 | -- indentation 8 | vim.opt.tabstop = 2 9 | vim.opt.softtabstop = 2 10 | vim.opt.shiftwidth = 2 11 | vim.opt.expandtab = true 12 | vim.opt.smartindent = true 13 | vim.opt.wrap = false 14 | 15 | -- no swaps 16 | vim.opt.swapfile = false 17 | vim.opt.backup = false 18 | vim.opt.undodir = os.getenv("HOME") .. "/.vim/undodir" 19 | vim.opt.undofile = true 20 | 21 | -- UI 22 | vim.opt.hlsearch = true 23 | vim.opt.incsearch = true 24 | vim.opt.termguicolors = true 25 | vim.opt.scrolloff = 8 26 | vim.opt.signcolumn = "yes" 27 | vim.opt.isfname:append("@-@") 28 | vim.opt.updatetime = 50 29 | vim.opt.colorcolumn = nil 30 | 31 | -- global status 32 | vim.opt.laststatus = 3 33 | vim.opt.cmdheight = 0 34 | vim.opt.showcmdloc = "statusline" 35 | 36 | -- folds 37 | vim.o.foldlevel = 99 38 | vim.o.foldlevelstart = 99 39 | vim.o.foldenable = true 40 | 41 | vim.g.mapleader = " " 42 | vim.g.maplocalleader = "," 43 | 44 | -- autoread edited files 45 | vim.o.autoread = true 46 | 47 | -- AUTOCMDS -- 48 | vim.api.nvim_create_autocmd("TextYankPost", { 49 | callback = function() 50 | vim.highlight.on_yank({ 51 | higroup = "IncSearch", 52 | timeout = 80, 53 | }) 54 | end, 55 | desc = "Highlight on yank", 56 | }) 57 | 58 | -- vim.api.nvim_create_autocmd("FileType", { 59 | -- desc = "Split help buffers to the right", 60 | -- pattern = "help", 61 | -- command = "wincmd L", 62 | -- }) 63 | 64 | -- persistent folds 65 | -- WARN: stole this from AstroNvim and have no real idea how it works 66 | local view_group = vim.api.nvim_create_augroup("auto_view", { clear = true }) 67 | vim.api.nvim_create_autocmd({ "BufWinLeave", "BufWritePost", "WinLeave" }, { 68 | desc = "Save view with mkview for real files", 69 | group = view_group, 70 | callback = function(args) 71 | if vim.b[args.buf].view_activated then 72 | vim.cmd.mkview({ mods = { emsg_silent = true } }) 73 | end 74 | end, 75 | }) 76 | vim.api.nvim_create_autocmd("BufWinEnter", { 77 | desc = "Try to load file view if available and enable view saving for real files", 78 | group = view_group, 79 | callback = function(args) 80 | if not vim.b[args.buf].view_activated then 81 | local filetype = vim.api.nvim_get_option_value("filetype", { buf = args.buf }) 82 | local buftype = vim.api.nvim_get_option_value("buftype", { buf = args.buf }) 83 | local ignore_filetypes = { "gitcommit", "gitrebase", "svg", "hgcommit" } 84 | if buftype == "" and filetype and filetype ~= "" and not vim.tbl_contains(ignore_filetypes, filetype) then 85 | vim.b[args.buf].view_activated = true 86 | vim.cmd.loadview({ mods = { emsg_silent = true } }) 87 | end 88 | end 89 | end, 90 | }) 91 | 92 | -- LAZY SETUP -- 93 | 94 | require("lazy").setup({ 95 | spec = { { import = "plugins" } }, 96 | performance = { 97 | rtp = { 98 | disabled_plugins = { 99 | "gzip", 100 | "netrwPlugin", 101 | "tarPlugin", 102 | "tohtml", 103 | "zipPlugin", 104 | "tutor", 105 | }, 106 | }, 107 | }, 108 | }) 109 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/aider.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | { 4 | "GeorgesAlkhouri/nvim-aider", 5 | cmd = { 6 | "AiderTerminalToggle", 7 | }, 8 | keys = { 9 | { "ct", "AiderTerminalToggle", desc = "Open Aider" }, 10 | { 11 | "cs", 12 | "AiderTerminalSend", 13 | desc = "Send to Aider", 14 | mode = { "n", "v" }, 15 | }, 16 | { "ci", "AiderQuickSendCommand", desc = "Send Command To Aider" }, 17 | { "cb", "AiderQuickSendBuffer", desc = "Send Buffer To Aider" }, 18 | { "c+", "AiderQuickAddFile", desc = "Add File to Aider" }, 19 | { "c-", "AiderQuickDropFile", desc = "Drop File from Aider" }, 20 | }, 21 | dependencies = { 22 | "folke/snacks.nvim", 23 | { "nvim-telescope/telescope.nvim", lazy = true }, 24 | }, 25 | config = function() 26 | -- APPLIES COLORS -- 27 | local terminal_color = "#17171f" 28 | local colors = { 29 | user_input_color = "Title", 30 | tool_output_color = "Function", 31 | tool_error_color = "DiagnosticSignError", 32 | tool_warning_color = "DiagnosticSignWarn", 33 | assistant_output_color = "Title", 34 | completion_menu_color = "Title", 35 | completion_menu_bg_color = terminal_color, 36 | completion_menu_current_color = "Keyword", 37 | completion_menu_current_bg_color = terminal_color, 38 | } 39 | 40 | local function int_to_hex(color) 41 | if type(color) == "string" then 42 | return false 43 | end 44 | return string.format("#%06x", color) 45 | end 46 | 47 | for k, v in pairs(colors) do 48 | if v == terminal_color then 49 | goto continue 50 | end 51 | local color = vim.api.nvim_get_hl(0, { name = v }) 52 | colors[k] = int_to_hex(color.fg) or color.fg 53 | ::continue:: 54 | end 55 | 56 | -- AUTOCMD FOR AUTO FILE UPDATING -- 57 | vim.api.nvim_create_autocmd({ "FocusGained", "BufEnter" }, { 58 | callback = function() 59 | vim.cmd("checktime") 60 | end, 61 | }) 62 | 63 | require("nvim_aider").setup({ 64 | args = { 65 | "--model", 66 | "ollama_chat/qwen2.5-coder:14b", 67 | "--weak-model", 68 | "ollama_chat/llama3.2:latest", 69 | "--code-theme", 70 | "solarized-dark", 71 | "--no-auto-commits", 72 | "--pretty", 73 | "--stream", 74 | }, 75 | theme = colors, 76 | config = { 77 | keys = { 78 | term_normal = { 79 | "", 80 | function(self) 81 | self.esc_timer = self.esc_timer or (vim.uv or vim.loop).new_timer() 82 | if self.esc_timer:is_active() then 83 | self.esc_timer:stop() 84 | vim.cmd("stopinsert") 85 | else 86 | self.esc_timer:start(100, 0, function() end) 87 | return "" 88 | end 89 | end, 90 | mode = "t", 91 | expr = true, 92 | desc = "Double escape to normal mode", 93 | }, 94 | }, 95 | }, 96 | win = { 97 | position = "right", 98 | wo = { 99 | winhighlight = "Normal:Normal", 100 | }, 101 | w = { 102 | aider = true 103 | }, 104 | width = 0.25, 105 | }, 106 | }) 107 | end, 108 | }, 109 | }, 110 | } 111 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/autopairs.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "windwp/nvim-autopairs", 4 | event = "InsertEnter", 5 | opts = {}, 6 | }, 7 | } 8 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/cmp.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "hrsh7th/nvim-cmp", 4 | event = "InsertEnter", 5 | dependencies = { 6 | "hrsh7th/cmp-path", 7 | "hrsh7th/cmp-buffer", 8 | "hrsh7th/cmp-path", 9 | "hrsh7th/cmp-cmdline", 10 | "hrsh7th/cmp-nvim-lsp", 11 | 12 | "neovim/nvim-lspconfig", 13 | "williamboman/mason.nvim", 14 | "williamboman/mason-lspconfig.nvim", 15 | 16 | { "L3MON4D3/LuaSnip", dependencies = { "rafamadriz/friendly-snippets" } }, 17 | "saadparwaiz1/cmp_luasnip", 18 | 19 | "onsails/lspkind.nvim", -- for symbols 20 | }, 21 | config = function() 22 | local luasnip = require("luasnip") 23 | local cmp = require("cmp") 24 | local cmp_autopairs = require("nvim-autopairs.completion.cmp") 25 | local lspkind = require("lspkind") 26 | require("luasnip.loaders.from_vscode").lazy_load() 27 | cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done()) 28 | cmp.setup({ 29 | sources = { 30 | { name = "path" }, 31 | { name = "nvim_lsp" }, 32 | { name = "luasnip", keyword_length = 1 }, 33 | { name = "buffer", keyword_length = 1 }, 34 | { name = "command" }, 35 | { name = "codeium" }, 36 | }, 37 | mapping = cmp.mapping.preset.insert({ 38 | [""] = cmp.mapping.scroll_docs(-4), 39 | [""] = cmp.mapping.scroll_docs(4), 40 | 41 | -- INFO: Super tab movement for faster cmp nav 42 | [""] = cmp.mapping(function(fallback) 43 | if cmp.visible() then 44 | if luasnip.expandable() then 45 | luasnip.expand() 46 | else 47 | cmp.confirm({ 48 | select = true, 49 | }) 50 | end 51 | else 52 | fallback() 53 | end 54 | end), 55 | 56 | [""] = cmp.mapping(function(fallback) 57 | if cmp.visible() then 58 | cmp.select_next_item() 59 | elseif luasnip.locally_jumpable(1) then 60 | luasnip.jump(1) 61 | else 62 | fallback() 63 | end 64 | end, { "i", "s" }), 65 | 66 | [""] = cmp.mapping(function(fallback) 67 | if cmp.visible() then 68 | cmp.select_prev_item() 69 | elseif luasnip.locally_jumpable(-1) then 70 | luasnip.jump(-1) 71 | else 72 | fallback() 73 | end 74 | end, { "i", "s" }), 75 | }), 76 | snippet = { 77 | expand = function(args) 78 | require("luasnip").lsp_expand(args.body) 79 | end, 80 | }, 81 | -- for symbols 82 | formatting = { 83 | format = lspkind.cmp_format({ 84 | mode = "symbol", 85 | maxwidth = 50, 86 | ellipsis_char = "...", 87 | smybol_map = { Codeium = "" }, 88 | }), 89 | }, 90 | }) 91 | end, 92 | }, 93 | } 94 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/codeium.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "Exafunction/codeium.nvim", 4 | event = "InsertEnter", 5 | dependencies = { 6 | "nvim-lua/plenary.nvim", 7 | "hrsh7th/nvim-cmp", 8 | }, 9 | config = function() 10 | require("codeium").setup({ 11 | virtual_text = { 12 | enabled = true, 13 | manual = false, 14 | filetypes = { dashboard = false, typr = false, snacks_picker_input = false }, 15 | idle_delay = 25, 16 | key_bindings = { 17 | accept = "", 18 | next = "", 19 | prev = "gD", 8 | function() 9 | vim.ui.input({ prompt = "Commit rev or path: (leave blank for current)" }, function(target) 10 | if not target then 11 | return 12 | end 13 | if target == "" then 14 | vim.cmd("DiffviewOpen") 15 | else 16 | vim.cmd("DiffviewOpen " .. target) 17 | end 18 | end) 19 | end, 20 | desc = "Diff View", 21 | }, 22 | { 23 | "gF", 24 | function() 25 | vim.ui.input( 26 | { prompt = "Commit rev or path: (leave blank for current branch)", completion = "file" }, 27 | function(target) 28 | if not target then 29 | return 30 | end 31 | if target == "" then 32 | vim.cmd("DiffviewFileHistory") 33 | else 34 | vim.cmd("DiffviewFileHistory " .. target) 35 | end 36 | end 37 | ) 38 | end, 39 | desc = "Diff View File Hist", 40 | }, 41 | }, 42 | }, 43 | } 44 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/dressing.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "stevearc/dressing.nvim", 4 | event = "VeryLazy", 5 | opts = { 6 | input = { 7 | max_width = { 100, 0.7 }, 8 | min_width = { 20, 0.2 }, 9 | }, 10 | select = { 11 | fzf_lua = { 12 | winopts = { 13 | height = 0.4, 14 | width = 0.3, 15 | }, 16 | }, 17 | }, 18 | }, 19 | }, 20 | } 21 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/flash.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "folke/flash.nvim", 4 | event = "VeryLazy", 5 | opts = {}, 6 | keys = { 7 | { 8 | "s", 9 | mode = { "n", "x", "o" }, 10 | function() 11 | require("flash").jump() 12 | end, 13 | desc = "Flash", 14 | }, 15 | { 16 | "S", 17 | mode = { "n", "o" }, 18 | function() 19 | require("flash").treesitter() 20 | end, 21 | desc = "Flash Treesitter", 22 | }, 23 | { 24 | "r", 25 | mode = "o", 26 | function() 27 | require("flash").remote() 28 | end, 29 | desc = "Remote Flash", 30 | }, 31 | { 32 | "R", 33 | mode = { "o", "x" }, 34 | function() 35 | require("flash").treesitter_search() 36 | end, 37 | desc = "Treesitter Search", 38 | }, 39 | }, 40 | }, 41 | } 42 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/flog.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "rbong/vim-flog", 4 | lazy = true, 5 | cmd = { "Flog", "Flogsplit", "Floggit" }, 6 | dependencies = { 7 | { "tpope/vim-fugitive", lazy = true }, 8 | }, 9 | }, 10 | } 11 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/gitsigns.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "lewis6991/gitsigns.nvim", 4 | event = "BufReadPre", 5 | opts = {}, 6 | }, 7 | } 8 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/goto-preview.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "rmagatti/goto-preview", 4 | event = { "BufReadPre", "LspAttach" }, 5 | keys = { 6 | { 7 | "lg", 8 | function() 9 | require("goto-preview").goto_preview_definition() 10 | end, 11 | desc = "Goto Preview Definition", 12 | }, 13 | }, 14 | config = function() 15 | require("goto-preview").setup({}) 16 | end, 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/harpoon.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "ThePrimeagen/harpoon", 4 | dependencies = { 5 | "nvim-lua/plenary.nvim", 6 | }, 7 | keys = { 8 | { 9 | "ha", 10 | function() 11 | require("harpoon.mark").add_file() 12 | end, 13 | desc = "Mark File", 14 | }, 15 | { 16 | "hu", 17 | function() 18 | require("harpoon.ui").toggle_quick_menu() 19 | end, 20 | desc = "Toggle Menu", 21 | }, 22 | { 23 | "hh", 24 | function() 25 | require("harpoon.ui").nav_file(1) 26 | end, 27 | desc = "Harpoon 1", 28 | }, 29 | { 30 | "hj", 31 | function() 32 | require("harpoon.ui").nav_file(2) 33 | end, 34 | desc = "Harpoon 2", 35 | }, 36 | { 37 | "hk", 38 | function() 39 | require("harpoon.ui").nav_file(3) 40 | end, 41 | desc = "Harpoon 3", 42 | }, 43 | { 44 | "hl", 45 | function() 46 | require("harpoon.ui").nav_file(4) 47 | end, 48 | desc = "Harpoon 4", 49 | }, 50 | }, 51 | }, 52 | } 53 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/kulala.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | { 4 | "mistweaverco/kulala.nvim", 5 | event = { "BufReadPre" }, 6 | ft = { "http" }, 7 | keys = { 8 | { 9 | "rr", 10 | function() 11 | require("kulala").run() 12 | end, 13 | desc = "Run Current Request", 14 | }, 15 | { 16 | "rR", 17 | function() 18 | require("kulala").run_all() 19 | end, 20 | desc = "Run Current Buffer", 21 | }, 22 | { 23 | "rl", 24 | function() 25 | require("kulala").replay() 26 | end, 27 | desc = "Replay Last Request", 28 | }, 29 | { 30 | "ri", 31 | function() 32 | require("kulala").inspect() 33 | end, 34 | desc = "Inspect Request", 35 | }, 36 | { 37 | "rS", 38 | function() 39 | require("kulala").show_stats() 40 | end, 41 | desc = "Last Run Stats", 42 | }, 43 | { 44 | "rs", 45 | function() 46 | require("kulala").scratchpad() 47 | end, 48 | desc = "Scratchpad", 49 | }, 50 | { 51 | "rc", 52 | function() 53 | require("kulala").copy() 54 | end, 55 | desc = "Request To Curl", 56 | }, 57 | { 58 | "rC", 59 | function() 60 | require("kulala").from_curl() 61 | end, 62 | desc = "Curl To Request", 63 | }, 64 | { 65 | "rt", 66 | function() 67 | require("kulala").toggle_view() 68 | end, 69 | desc = "Toggle Res Panel", 70 | }, 71 | { 72 | "r/", 73 | function() 74 | require("kulala").search() 75 | end, 76 | desc = "Search Requests", 77 | }, 78 | { 79 | "r]", 80 | function() 81 | require("kulala").jump_next() 82 | end, 83 | desc = "Next Request", 84 | }, 85 | { 86 | "r[", 87 | function() 88 | require("kulala").jump_prev() 89 | end, 90 | desc = "Previous Request", 91 | }, 92 | { 93 | "rx", 94 | function() 95 | require("kulala").clear_cached_files() 96 | end, 97 | desc = "Clear Cache", 98 | }, 99 | }, 100 | opts = function(_, opts) 101 | vim.filetype.add({ 102 | extension = { 103 | ["http"] = "http", 104 | }, 105 | }) 106 | return { 107 | display_mode = "split", 108 | default_view = "verbose", 109 | } 110 | end, 111 | }, 112 | }, 113 | } 114 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/leetcode.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "kawre/leetcode.nvim", 4 | dependencies = { 5 | -- "ibhagwan/fzf-lua", 6 | "nvim-lua/plenary.nvim", 7 | "MunifTanjim/nui.nvim", 8 | }, 9 | cmd = "Leet", 10 | opts = { 11 | lang = "javascript", 12 | }, 13 | }, 14 | } 15 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/markview.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "OXY2DEV/markview.nvim", 4 | event = "VeryLazy", 5 | -- lazy = false, 6 | -- ft = { "markdown", "yaml" }, 7 | opts = {}, 8 | }, 9 | } 10 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/menus.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "nvzone/menu", 4 | lazy = true, 5 | dependencies = { "nvzone/volt" }, 6 | keys = { 7 | { 8 | "", 9 | function() 10 | require("menu").open("default") 11 | vim.api.nvim_set_hl(0, "ExBlack2Bg", { link = "NormalFloat" }) 12 | vim.api.nvim_set_hl(0, "ExBlack2Border", { link = "FloatBorder" }) 13 | end, 14 | desc = "Open Menu", 15 | }, 16 | }, 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/minty.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvzone/minty", 3 | dependencies = "nvzone/volt", 4 | cmd = { "Shades", "Huefy" }, 5 | } 6 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/multi-cursor.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "mg979/vim-visual-multi", 4 | event = "BufReadPre", 5 | config = function() 6 | vim.g.VM_silent_exit = 1 7 | end, 8 | }, 9 | 10 | -- { 11 | -- "smoka7/multicursors.nvim", 12 | -- lazy = true, 13 | -- -- event = { "InsertEnter", "ModeChanged" }, 14 | -- dependencies = { 15 | -- "nvimtools/hydra.nvim", 16 | -- }, 17 | -- cmd = { "MCstart", "MCvisual", "MCclear", "MCpattern", "MCvisualPattern", "MCunderCursor" }, 18 | -- keys = { 19 | -- { 20 | -- mode = { "v", "n" }, 21 | -- "m", 22 | -- "MCstart", 23 | -- desc = "Selection For Selected Text or Word Under Cursor", 24 | -- }, 25 | -- }, 26 | -- opts = {}, 27 | -- }, 28 | } 29 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/namu.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "bassamsdata/namu.nvim", 4 | event = "LSPAttach", 5 | keys = { 6 | { 7 | "ln", 8 | "Namu symbols", 9 | desc = "Document Symbols", 10 | { silent = true }, 11 | }, 12 | }, 13 | opts = { 14 | namu_symbols = { 15 | enabled = true, 16 | options = {}, 17 | }, 18 | colorscheme = { enabled = false }, 19 | ui_select = { enabled = false }, 20 | }, 21 | }, 22 | } 23 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/navic.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "SmiteshP/nvim-navic", 4 | event = "LspAttach", 5 | -- lazy = true, 6 | opts = { 7 | lsp = { auto_attach = true }, 8 | }, 9 | }, 10 | } 11 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/neollama.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "paradoxical-dev/neollama", 4 | dependencies = { 5 | "MunifTanjim/nui.nvim", 6 | "nvim-lua/plenary.nvim", 7 | }, 8 | lazy = true, 9 | opts = { 10 | params = { 11 | model = "llama3.1:latest", 12 | stream = true, 13 | }, 14 | web_agent = { 15 | agent_models = { 16 | use_current = false, 17 | buffer_agent = { model = "qwen2.5:3b" }, 18 | reviewing_agent = { 19 | model = "qwen2.5:3b", 20 | options = { temperature = 0.2, num_ctx = 4096, top_p = 0.1 }, 21 | }, 22 | integration_agent = { model = _G.NeollamaModel, options = { num_ctx = 4096 } }, 23 | }, 24 | }, 25 | layout = { 26 | border = { 27 | default = "rounded", 28 | }, 29 | input = { 30 | hl = { fg = "#C9C7CD", bold = true, italic = true }, 31 | }, 32 | }, 33 | }, 34 | }, 35 | } 36 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/neotest.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "nvim-neotest/neotest", 4 | dependencies = { 5 | "nvim-neotest/nvim-nio", 6 | "nvim-lua/plenary.nvim", 7 | "antoinemadec/FixCursorHold.nvim", 8 | "nvim-treesitter/nvim-treesitter", 9 | 10 | -- adapters 11 | "nvim-neotest/neotest-python", 12 | }, 13 | -- event = "BufReadPre", 14 | keys = { 15 | { 16 | "xx", 17 | function() 18 | require("neotest").run.run() 19 | end, 20 | desc = "Run nearest test", 21 | }, 22 | { 23 | "xX", 24 | function() 25 | require("neotest").run.run(vim.fn.expand("%")) 26 | end, 27 | desc = "Run tests in current file", 28 | }, 29 | { 30 | "xl", 31 | function() 32 | require("neotest").run.run_last() 33 | end, 34 | desc = "Re-run last test", 35 | }, 36 | { 37 | "xL", 38 | function() 39 | require("neotest").run.run_last({ strategy = "dap" }) 40 | end, 41 | desc = "Re-run last test in debug mode", 42 | }, 43 | { 44 | "xd", 45 | function() 46 | require("neotest").run.run({ strategy = "dap" }) 47 | end, 48 | desc = "Run nearest test in debug mode", 49 | }, 50 | { 51 | "xD", 52 | function() 53 | require("neotest").run.run(vim.fn.expand("%"), { strategy = "dap" }) 54 | end, 55 | desc = "Run current file in debug mode", 56 | }, 57 | { 58 | "xs", 59 | function() 60 | require("neotest").run.stop() 61 | end, 62 | desc = "Stop nearest test", 63 | }, 64 | { 65 | "xa", 66 | function() 67 | require("neotest").run.attach() 68 | end, 69 | desc = "Attach to nearest test", 70 | }, 71 | { 72 | "xw", 73 | function() 74 | require("neotest").watch.toggle(vim.fn.expand("%")) 75 | end, 76 | desc = "Toggle current file watch", 77 | }, 78 | { 79 | "xW", 80 | function() 81 | require("neotest").watch.toggle(vim.fn.expand("%:h")) 82 | end, 83 | desc = "Toggle parent dir watch", 84 | }, 85 | { 86 | "xs", 87 | function() 88 | require("neotest").summary.toggle() 89 | end, 90 | desc = "Toggle summary", 91 | }, 92 | { 93 | "xf", 94 | function() 95 | require("neotest").output.open({ enter = true, quiet = false, auto_close = true }) 96 | end, 97 | desc = "Open output window", 98 | }, 99 | { 100 | "xc", 101 | function() 102 | require("neotest").output_panel.toggle() 103 | end, 104 | desc = "Toggle output panel", 105 | }, 106 | }, 107 | config = function() 108 | require("neotest").setup({ 109 | adapters = { 110 | require("neotest-python"), 111 | }, 112 | }) 113 | end, 114 | }, 115 | } 116 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/pyrola.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "matarina/pyrola.nvim", 4 | dependencies = { "nvim-treesitter/nvim-treesitter" }, 5 | keys = { 6 | { 7 | "ii", 8 | function() 9 | require("pyrola").send_statement_definition() 10 | end, 11 | desc = "Send Statement Definition", 12 | }, 13 | { 14 | "is", 15 | function() 16 | require("pyrola").send_visual_to_repl() 17 | end, 18 | mode = "v", 19 | desc = "Send Visual To Repl", 20 | }, 21 | { 22 | "iI", 23 | function() 24 | require("pyrola").inspect() 25 | end, 26 | desc = "Inspect Object", 27 | }, 28 | }, 29 | event = "BufReadPre", 30 | build = ":UpdateRemotePlugins", 31 | -- opts = { 32 | -- kernel_map = { 33 | -- python = "python3", 34 | -- lua = "ilua", 35 | -- javascript = "ijavascript", 36 | -- }, 37 | -- split_horizen = false, 38 | -- split_ratio = 0.3, 39 | -- }, 40 | config = function() 41 | local pyrola = require("pyrola") 42 | pyrola.setup({ 43 | kernel_map = { 44 | python = "python3", 45 | lua = "ilua", 46 | javascript = "ijavascript", 47 | }, 48 | split_horizen = false, 49 | split_ratio = 0.3, 50 | }) 51 | end, 52 | }, 53 | } 54 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/snipe.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "leath-dub/snipe.nvim", 4 | keys = { 5 | { 6 | "bs", 7 | function() 8 | require("snipe").open_buffer_menu() 9 | end, 10 | desc = "Open Snipe", 11 | }, 12 | }, 13 | opts = { 14 | ui = { 15 | max_height = 13, 16 | open_win_override = { 17 | border = "rounded", 18 | }, 19 | position = "bottomright", 20 | }, 21 | }, 22 | }, 23 | } 24 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/symbol-outline.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "simrat39/symbols-outline.nvim", 4 | lazy = true, 5 | event = "LspAttach", 6 | keys = { 7 | { "ls", "SymbolsOutline", desc = "Symbols Outline" }, 8 | }, 9 | opts = { 10 | width = 15, 11 | symbols = { 12 | File = { icon = "", hl = "@text.uri" }, 13 | Module = { icon = "", hl = "@namespace" }, 14 | Namespace = { icon = "󱁐", hl = "@namespace" }, 15 | Package = { icon = "󱧕", hl = "@namespace" }, 16 | Class = { icon = "", hl = "@type" }, 17 | Method = { icon = "󰡱", hl = "@method" }, 18 | Property = { icon = "", hl = "@method" }, 19 | Field = { icon = "", hl = "@field" }, 20 | Constructor = { icon = "", hl = "@constructor" }, 21 | Enum = { icon = "ℰ", hl = "@type" }, 22 | Interface = { icon = "ﰮ", hl = "@type" }, 23 | Function = { icon = "ƒ", hl = "@function" }, 24 | Variable = { icon = "󰫧", hl = "@constant" }, 25 | Constant = { icon = "", hl = "@constant" }, 26 | String = { icon = "𝓐", hl = "@string" }, 27 | Number = { icon = "#", hl = "@number" }, 28 | Boolean = { icon = "", hl = "@boolean" }, 29 | Array = { icon = "", hl = "@constant" }, 30 | Object = { icon = "", hl = "@type" }, 31 | Key = { icon = "󰌆", hl = "@type" }, 32 | Null = { icon = "NULL", hl = "@type" }, 33 | EnumMember = { icon = "", hl = "@field" }, 34 | Struct = { icon = "𝓢", hl = "@type" }, 35 | Event = { icon = "", hl = "@type" }, 36 | Operator = { icon = "", hl = "@operator" }, 37 | TypeParameter = { icon = "𝙏", hl = "@parameter" }, 38 | Component = { icon = "", hl = "@function" }, 39 | Fragment = { icon = "", hl = "@constant" }, 40 | }, 41 | }, 42 | }, 43 | } 44 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/theme.lua: -------------------------------------------------------------------------------- 1 | /nix/store/r84w6gr0v2gqdzgdj6rawg420nsmrj3v-home-manager-files/.config/nvim/lua/plugins/theme.lua -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/todo.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "folke/todo-comments.nvim", 4 | dependencies = { "nvim-lua/plenary.nvim" }, 5 | event = "BufReadPre", 6 | keys = { 7 | { 8 | "]t", 9 | function() 10 | require("todo-comments").jump_next() 11 | end, 12 | desc = "Next todo comment", 13 | }, 14 | { 15 | "[t", 16 | function() 17 | require("todo-comments").jump_prev() 18 | end, 19 | desc = "Previous todo comment", 20 | }, 21 | }, 22 | opts = {}, 23 | }, 24 | } 25 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/toggleterm.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "akinsho/toggleterm.nvim", 4 | lazy = true, 5 | keys = { 6 | { 7 | "tf", 8 | "ToggleTerm direction=float", 9 | desc = "Floating Terminal", 10 | }, 11 | { 12 | "th", 13 | "ToggleTerm direction=horizontal", 14 | desc = "Horizontal Terminal", 15 | }, 16 | { 17 | "tv", 18 | "ToggleTerm direction=vertical", 19 | desc = "Vertical Terminal", 20 | }, 21 | { 22 | "tn", 23 | function() 24 | local term = require("toggleterm.terminal").Terminal 25 | term:new({ cmd = "node", direction = "horizontal" }):toggle() 26 | end, 27 | desc = "Node REPL", 28 | }, 29 | { 30 | "tp", 31 | function() 32 | local term = require("toggleterm.terminal").Terminal 33 | term:new({ cmd = "python", direction = "horizontal" }):toggle() 34 | end, 35 | desc = "Python REPL", 36 | }, 37 | { 38 | "tr", 39 | function() 40 | local term = require("toggleterm.terminal").Terminal 41 | term:new({ cmd = "nix repl", direction = "horizontal" }):toggle() 42 | end, 43 | desc = "Nix REPL", 44 | }, 45 | { 46 | "tb", 47 | function() 48 | local term = require("toggleterm.terminal").Terminal 49 | term:new({ cmd = "btm", direction = "float" }):toggle() 50 | end, 51 | desc = "Bottom", 52 | }, 53 | }, 54 | version = "*", 55 | opts = { 56 | size = function(term) 57 | if term.direction == "horizontal" then 58 | return 6 59 | elseif term.direction == "vertical" then 60 | return math.floor(vim.o.columns * 0.3) 61 | end 62 | end, 63 | highlights = { 64 | NormalFloat = { 65 | link = "NormalFloat", 66 | }, 67 | FloatBorder = { 68 | link = "FloatBorder", 69 | }, 70 | }, 71 | winbar = { enabled = false }, 72 | float_opts = { 73 | border = "curved", 74 | width = function() 75 | return math.floor(vim.o.columns * 0.8) 76 | end, 77 | height = function() 78 | return math.floor(vim.o.lines * 0.7) 79 | end, 80 | title_pos = "center", 81 | }, 82 | }, 83 | }, 84 | } 85 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/treesitter.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "nvim-treesitter/nvim-treesitter", 4 | event = "BufReadPre", 5 | build = ":TSUpdate", 6 | config = function() 7 | local configs = require("nvim-treesitter.configs") 8 | configs.setup({ 9 | ensure_installed = { 10 | "lua", 11 | "vim", 12 | "vimdoc", 13 | "markdown", 14 | "bash", 15 | "javascript", 16 | "c", 17 | "rust", 18 | "http", 19 | }, 20 | auto_install = true, 21 | highlight = { 22 | enable = true, 23 | additional_vim_regex_highlighting = false, 24 | }, 25 | }) 26 | end, 27 | }, 28 | } 29 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/typr.lua: -------------------------------------------------------------------------------- 1 | return { 2 | "nvzone/typr", 3 | dependencies = "nvzone/volt", 4 | opts = { 5 | kblayout = { 6 | { "q", "w", "e", "r", "t", "y", "u", "i", "o", "p" }, 7 | { "a", "s", "d", "f", "g", "h", "j", "k", "l", ";" }, 8 | { "z", "x", "c", "v", "b", "n", "m", ",", ".", "/" }, 9 | }, 10 | }, 11 | cmd = { "Typr", "TyprStats" }, 12 | } 13 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/plugins/ufo.lua: -------------------------------------------------------------------------------- 1 | return { 2 | { 3 | "kevinhwang91/nvim-ufo", 4 | dependencies = { "kevinhwang91/promise-async" }, 5 | event = { "VeryLazy" }, 6 | opts = { 7 | provider_selector = function(bufnr, filetype, buftype) 8 | return { "treesitter", "indent" } 9 | end, 10 | }, 11 | }, 12 | } 13 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/lib/lua/5.1/gumbo/parse.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/system/pkgs/nvim/main_nvim/lua/rocks/lib/lua/5.1/gumbo/parse.so -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/lib/luarocks/rocks-5.1/gumbo/0.5-1/doc/README.md: -------------------------------------------------------------------------------- 1 | Synopsis 2 | -------- 3 | 4 | `lua-gumbo` is a [HTML5] parser and [DOM] library for [Lua]. It 5 | originally started out as a set of Lua bindings for the Gumbo C 6 | library, but has now absorbed an improved [fork] of it. 7 | 8 | Requirements 9 | ------------ 10 | 11 | * C99 compiler 12 | * [Lua] 5.1+ **or** [LuaJIT] 2.0+ 13 | 14 | Installation 15 | ------------ 16 | 17 | To install the latest release via [LuaRocks] use the command: 18 | 19 | luarocks install gumbo 20 | 21 | Usage 22 | ----- 23 | 24 | The `gumbo` module provides a [`parse`] function and a [`parseFile`] 25 | function, which both return a [`Document`] node containing a tree of 26 | [descendant] nodes. The structure and API of this tree mostly follows 27 | the [DOM] Level 4 Core specification. 28 | 29 | For full API documentation, see: . 30 | 31 | ### Example 32 | 33 | The following is a simple demonstration of how to find an element by ID 34 | and print the contents of it's first child text node. 35 | 36 | ```lua 37 | local gumbo = require "gumbo" 38 | local document = gumbo.parse('
Hello World
') 39 | local foo = document:getElementById("foo") 40 | local text = foo.childNodes[1].data 41 | print(text) --> Hello World 42 | ``` 43 | 44 | **Note:** this example omits error handling for the sake of simplicity. 45 | Production code should wrap each step with [`assert()`] or some other, 46 | application-specific error handling. 47 | 48 | See also: . 49 | 50 | 51 | [Lua]: https://www.lua.org/ 52 | [LuaJIT]: http://luajit.org/ 53 | [C API]: https://www.lua.org/manual/5.2/manual.html#4 54 | [HTML5]: https://html.spec.whatwg.org/multipage/introduction.html#is-this-html5? 55 | [DOM]: https://dom.spec.whatwg.org/ 56 | [descendant]: https://dom.spec.whatwg.org/#concept-tree-descendant 57 | [`parse`]: https://craigbarnes.gitlab.io/lua-gumbo/#parse 58 | [`parseFile`]: https://craigbarnes.gitlab.io/lua-gumbo/#parsefile 59 | [`Document`]: https://craigbarnes.gitlab.io/lua-gumbo/#document 60 | [fork]: https://gitlab.com/craigbarnes/lua-gumbo/tree/master/lib 61 | [LuaRocks]: https://luarocks.org/modules/craigb/gumbo 62 | [luacov]: https://keplerproject.github.io/luacov/ 63 | [`assert()`]: https://www.lua.org/manual/5.3/manual.html#pdf-assert 64 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/lib/luarocks/rocks-5.1/gumbo/0.5-1/gumbo-0.5-1.rockspec: -------------------------------------------------------------------------------- 1 | package = "gumbo" 2 | version = "0.5-1" 3 | 4 | description = { 5 | summary = "HTML5 parser and DOM library", 6 | homepage = "https://craigbarnes.gitlab.io/lua-gumbo/", 7 | license = "Apache-2.0" 8 | } 9 | 10 | source = { 11 | url = "https://craigbarnes.gitlab.io/dist/lua-gumbo/lua-gumbo-0.5.tar.gz", 12 | md5 = 'c156510d309012ab304710d1cf12f8cf' 13 | } 14 | 15 | dependencies = { 16 | "lua >= 5.1" 17 | } 18 | 19 | local parser_sources = { 20 | "gumbo/parse.c", 21 | "lib/ascii.c", 22 | "lib/attribute.c", 23 | "lib/char_ref.c", 24 | "lib/error.c", 25 | "lib/foreign_attrs.c", 26 | "lib/parser.c", 27 | "lib/string_buffer.c", 28 | "lib/svg_attrs.c", 29 | "lib/svg_tags.c", 30 | "lib/tag.c", 31 | "lib/tag_lookup.c", 32 | "lib/tokenizer.c", 33 | "lib/utf8.c", 34 | "lib/util.c", 35 | "lib/vector.c", 36 | } 37 | 38 | build = { 39 | type = "builtin", 40 | copy_directories = {}, -- Override the default: {"doc"} 41 | platforms = { 42 | unix = { 43 | modules = { 44 | ["gumbo.parse"] = { 45 | defines = {"NDEBUG -std=c99 -fvisibility=hidden"} 46 | } 47 | } 48 | } 49 | }, 50 | modules = { 51 | ["gumbo.parse"] = {sources = parser_sources}, 52 | ["gumbo"] = "gumbo.lua", 53 | ["gumbo.Buffer"] = "gumbo/Buffer.lua", 54 | ["gumbo.Set"] = "gumbo/Set.lua", 55 | ["gumbo.constants"] = "gumbo/constants.lua", 56 | ["gumbo.sanitize"] = "gumbo/sanitize.lua", 57 | ["gumbo.serialize.Indent"] = "gumbo/serialize/Indent.lua", 58 | ["gumbo.serialize.html"] = "gumbo/serialize/html.lua", 59 | ["gumbo.dom.util"] = "gumbo/dom/util.lua", 60 | ["gumbo.dom.Element"] = "gumbo/dom/Element.lua", 61 | ["gumbo.dom.Text"] = "gumbo/dom/Text.lua", 62 | ["gumbo.dom.Comment"] = "gumbo/dom/Comment.lua", 63 | ["gumbo.dom.Document"] = "gumbo/dom/Document.lua", 64 | ["gumbo.dom.DocumentFragment"] = "gumbo/dom/DocumentFragment.lua", 65 | ["gumbo.dom.DocumentType"] = "gumbo/dom/DocumentType.lua", 66 | ["gumbo.dom.Attribute"] = "gumbo/dom/Attribute.lua", 67 | ["gumbo.dom.AttributeList"] = "gumbo/dom/AttributeList.lua", 68 | ["gumbo.dom.DOMTokenList"] = "gumbo/dom/DOMTokenList.lua", 69 | ["gumbo.dom.ElementList"] = "gumbo/dom/ElementList.lua", 70 | ["gumbo.dom.NodeList"] = "gumbo/dom/NodeList.lua", 71 | ["gumbo.dom.Node"] = "gumbo/dom/Node.lua", 72 | ["gumbo.dom.ChildNode"] = "gumbo/dom/ChildNode.lua", 73 | ["gumbo.dom.ParentNode"] = "gumbo/dom/ParentNode.lua", 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/lib/luarocks/rocks-5.1/gumbo/0.5-1/rock_manifest: -------------------------------------------------------------------------------- 1 | rock_manifest = { 2 | doc = { 3 | LICENSE = "3b83ef96387f14655fc854ddc3c6bd57", 4 | ["README.md"] = "2f73d94c95b7bfa94acdcbca80bf9f50" 5 | }, 6 | ["gumbo-0.5-1.rockspec"] = "35e9134675f33aa697eae37a042c0bee", 7 | lib = { 8 | gumbo = { 9 | ["parse.so"] = "f5cbbba1fb1067e87eafe9745eb41852" 10 | } 11 | }, 12 | lua = { 13 | gumbo = { 14 | ["Buffer.lua"] = "f6a341848a988991b7c6578669bbadf6", 15 | ["Set.lua"] = "1ecdc4b4e7ba3d653e5b5d3cb34a6f8f", 16 | ["constants.lua"] = "b62d0dd9b783a1b008a3eada056280f8", 17 | dom = { 18 | ["Attribute.lua"] = "ba986a9a27090e97ef440a2375a386e2", 19 | ["AttributeList.lua"] = "7687570ad70d24dbbdb831a5fe992bdd", 20 | ["ChildNode.lua"] = "c2e371d12f859de175e375d313f2b3f7", 21 | ["Comment.lua"] = "36cf8680bc86fee5c04ceb9dedf0b1de", 22 | ["DOMTokenList.lua"] = "ff18237e8e3f76dc463ea5a265139601", 23 | ["Document.lua"] = "eeee2ee9ac7cf9a4b0ca651109c81031", 24 | ["DocumentFragment.lua"] = "904c89941e3bb93423a596ec3c2d835f", 25 | ["DocumentType.lua"] = "d21d9ac70c961797bb1f0c1108562a4b", 26 | ["Element.lua"] = "45a11c3633cea5648d4c4bdfff855b84", 27 | ["ElementList.lua"] = "a583132a6dfbbc459d11fe16bbb51bae", 28 | ["Node.lua"] = "1e0520f48c7f28dbd8aa7c07e50aaaf4", 29 | ["NodeList.lua"] = "9e4aea512d9446aa371f932402e0a4e0", 30 | ["ParentNode.lua"] = "4d14e98d86eb8ab94f49af8fa4258ddb", 31 | ["Text.lua"] = "5721a750a0b0120f24483d13799337d2", 32 | ["util.lua"] = "932d5a8c97a779d10fa41eb9cd17dabd" 33 | }, 34 | ["sanitize.lua"] = "70f5ee1c060d264e5bcb56f407a55006", 35 | serialize = { 36 | ["Indent.lua"] = "5d7425e15835c7b7d33069aa8952a7db", 37 | ["html.lua"] = "e7492d1ead5f80b97659bde773b1d2d3" 38 | } 39 | }, 40 | ["gumbo.lua"] = "1bc7736305d35f3526c0f4fe3bd261bf" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/lib/luarocks/rocks-5.1/manifest: -------------------------------------------------------------------------------- 1 | commands = {} 2 | dependencies = { 3 | gumbo = { 4 | ["0.5-1"] = { 5 | { 6 | constraints = { 7 | { 8 | op = ">=", 9 | version = { 10 | 5, 1, string = "5.1" 11 | } 12 | } 13 | }, 14 | name = "lua" 15 | } 16 | } 17 | } 18 | } 19 | modules = { 20 | gumbo = { 21 | "gumbo/0.5-1" 22 | }, 23 | ["gumbo.Buffer"] = { 24 | "gumbo/0.5-1" 25 | }, 26 | ["gumbo.Set"] = { 27 | "gumbo/0.5-1" 28 | }, 29 | ["gumbo.constants"] = { 30 | "gumbo/0.5-1" 31 | }, 32 | ["gumbo.dom.Attribute"] = { 33 | "gumbo/0.5-1" 34 | }, 35 | ["gumbo.dom.AttributeList"] = { 36 | "gumbo/0.5-1" 37 | }, 38 | ["gumbo.dom.ChildNode"] = { 39 | "gumbo/0.5-1" 40 | }, 41 | ["gumbo.dom.Comment"] = { 42 | "gumbo/0.5-1" 43 | }, 44 | ["gumbo.dom.DOMTokenList"] = { 45 | "gumbo/0.5-1" 46 | }, 47 | ["gumbo.dom.Document"] = { 48 | "gumbo/0.5-1" 49 | }, 50 | ["gumbo.dom.DocumentFragment"] = { 51 | "gumbo/0.5-1" 52 | }, 53 | ["gumbo.dom.DocumentType"] = { 54 | "gumbo/0.5-1" 55 | }, 56 | ["gumbo.dom.Element"] = { 57 | "gumbo/0.5-1" 58 | }, 59 | ["gumbo.dom.ElementList"] = { 60 | "gumbo/0.5-1" 61 | }, 62 | ["gumbo.dom.Node"] = { 63 | "gumbo/0.5-1" 64 | }, 65 | ["gumbo.dom.NodeList"] = { 66 | "gumbo/0.5-1" 67 | }, 68 | ["gumbo.dom.ParentNode"] = { 69 | "gumbo/0.5-1" 70 | }, 71 | ["gumbo.dom.Text"] = { 72 | "gumbo/0.5-1" 73 | }, 74 | ["gumbo.dom.util"] = { 75 | "gumbo/0.5-1" 76 | }, 77 | ["gumbo.parse"] = { 78 | "gumbo/0.5-1" 79 | }, 80 | ["gumbo.sanitize"] = { 81 | "gumbo/0.5-1" 82 | }, 83 | ["gumbo.serialize.Indent"] = { 84 | "gumbo/0.5-1" 85 | }, 86 | ["gumbo.serialize.html"] = { 87 | "gumbo/0.5-1" 88 | } 89 | } 90 | repository = { 91 | gumbo = { 92 | ["0.5-1"] = { 93 | { 94 | arch = "installed", 95 | commands = {}, 96 | dependencies = {}, 97 | modules = { 98 | gumbo = "gumbo.lua", 99 | ["gumbo.Buffer"] = "gumbo/Buffer.lua", 100 | ["gumbo.Set"] = "gumbo/Set.lua", 101 | ["gumbo.constants"] = "gumbo/constants.lua", 102 | ["gumbo.dom.Attribute"] = "gumbo/dom/Attribute.lua", 103 | ["gumbo.dom.AttributeList"] = "gumbo/dom/AttributeList.lua", 104 | ["gumbo.dom.ChildNode"] = "gumbo/dom/ChildNode.lua", 105 | ["gumbo.dom.Comment"] = "gumbo/dom/Comment.lua", 106 | ["gumbo.dom.DOMTokenList"] = "gumbo/dom/DOMTokenList.lua", 107 | ["gumbo.dom.Document"] = "gumbo/dom/Document.lua", 108 | ["gumbo.dom.DocumentFragment"] = "gumbo/dom/DocumentFragment.lua", 109 | ["gumbo.dom.DocumentType"] = "gumbo/dom/DocumentType.lua", 110 | ["gumbo.dom.Element"] = "gumbo/dom/Element.lua", 111 | ["gumbo.dom.ElementList"] = "gumbo/dom/ElementList.lua", 112 | ["gumbo.dom.Node"] = "gumbo/dom/Node.lua", 113 | ["gumbo.dom.NodeList"] = "gumbo/dom/NodeList.lua", 114 | ["gumbo.dom.ParentNode"] = "gumbo/dom/ParentNode.lua", 115 | ["gumbo.dom.Text"] = "gumbo/dom/Text.lua", 116 | ["gumbo.dom.util"] = "gumbo/dom/util.lua", 117 | ["gumbo.parse"] = "gumbo/parse.so", 118 | ["gumbo.sanitize"] = "gumbo/sanitize.lua", 119 | ["gumbo.serialize.Indent"] = "gumbo/serialize/Indent.lua", 120 | ["gumbo.serialize.html"] = "gumbo/serialize/html.lua" 121 | } 122 | } 123 | } 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo.lua: -------------------------------------------------------------------------------- 1 | local _parse = require "gumbo.parse" 2 | local type, open, iotype, error = type, io.open, io.type, error 3 | local pairs, assert = pairs, assert 4 | 5 | local defaultMetatables = { 6 | text = require "gumbo.dom.Text", 7 | comment = require "gumbo.dom.Comment", 8 | element = require "gumbo.dom.Element", 9 | attribute = require "gumbo.dom.Attribute", 10 | document = require "gumbo.dom.Document", 11 | documentType = require "gumbo.dom.DocumentType", 12 | documentFragment = require "gumbo.dom.DocumentFragment", 13 | nodeList = require "gumbo.dom.NodeList", 14 | attributeList = require "gumbo.dom.AttributeList" 15 | } 16 | 17 | local _ENV = nil 18 | 19 | local function unpackMetatables(mt) 20 | return 21 | mt.text, 22 | mt.comment, 23 | mt.element, 24 | mt.attribute, 25 | mt.document, 26 | mt.documentType, 27 | mt.documentFragment, 28 | mt.nodeList, 29 | mt.attributeList 30 | end 31 | 32 | local function checkMetatables(mt) 33 | if mt == nil then 34 | return unpackMetatables(defaultMetatables) 35 | elseif type(mt) ~= "table" then 36 | local s = "Error: 'options.metatables' must be a table or nil (got %s)" 37 | error(s:format(type(mt)), 4) 38 | end 39 | for k in pairs(defaultMetatables) do 40 | local valtype = type(mt[k]) 41 | if valtype ~= "table" then 42 | local s = "Error: 'options.metatables.%s' must be a table (got %s)" 43 | error(s:format(k, valtype), 4) 44 | end 45 | end 46 | return unpackMetatables(mt) 47 | end 48 | 49 | local function checkArgs(arg2, ctx, ctxns) 50 | if type(arg2) == "table" then 51 | -- Use new table-of-options API 52 | local options = arg2 53 | return 54 | options.tabStop, 55 | options.contextElement, 56 | options.contextNamespace, 57 | checkMetatables(options.metatables) 58 | else 59 | -- Fall back to old API for backwards compat 60 | return arg2, ctx, ctxns, unpackMetatables(defaultMetatables) 61 | end 62 | end 63 | 64 | local function parse(text, arg2, ctx, ctxns) 65 | return _parse(text, checkArgs(arg2, ctx, ctxns)) 66 | end 67 | 68 | local function parseFile(pathOrFile, arg2, ctx, ctxns) 69 | local file, openerr 70 | local closeAfterRead = false 71 | if type(pathOrFile) == "string" then 72 | file, openerr = open(pathOrFile) 73 | if not file then 74 | return nil, openerr 75 | end 76 | closeAfterRead = true 77 | elseif iotype(pathOrFile) == "file" then 78 | file = pathOrFile 79 | else 80 | error("Invalid argument #1: not a file handle or filename string", 2) 81 | end 82 | local text, readerr = file:read("*a") 83 | if closeAfterRead == true then 84 | file:close() 85 | end 86 | if text then 87 | return _parse(text, checkArgs(arg2, ctx, ctxns)) 88 | else 89 | return nil, readerr 90 | end 91 | end 92 | 93 | return { 94 | VERSION = "0.5", 95 | parse = parse, 96 | parseFile = parseFile, 97 | parse_file = parseFile -- Alias for backwards compatibility 98 | } 99 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/Buffer.lua: -------------------------------------------------------------------------------- 1 | local select, tconcat, setmetatable = select, table.concat, setmetatable 2 | local _ENV = nil 3 | local Buffer = {} 4 | Buffer.__index = Buffer 5 | 6 | function Buffer:write(...) 7 | local length = self.length 8 | for i = 1, select("#", ...) do 9 | length = length + 1 10 | self[length] = select(i, ...) 11 | end 12 | self.length = length 13 | end 14 | 15 | function Buffer:tostring() 16 | return tconcat(self) 17 | end 18 | 19 | Buffer.__tostring = Buffer.tostring 20 | 21 | -- TODO: Allow specifying the number of array slots to pre-allocate. 22 | -- Buffers are almost always discarded shortly after creation, 23 | -- so setting a small default value for this would probably not 24 | -- waste much memory and would avoid the first few re-hashes. 25 | return function() 26 | return setmetatable({length = 0}, Buffer) 27 | end 28 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/Set.lua: -------------------------------------------------------------------------------- 1 | local type, pairs, error = type, pairs, error 2 | local setmetatable = setmetatable 3 | local _ENV = nil 4 | local Set = {} 5 | Set.__index = Set 6 | 7 | local function assertSet(v) 8 | if not (v and type(v) == "table" and v.union) then 9 | error("TypeError: Argument is not a Set", 3) 10 | end 11 | end 12 | 13 | function Set:union(other) 14 | assertSet(self) 15 | assertSet(other) 16 | local union = {} 17 | for member in pairs(self) do 18 | union[member] = true 19 | end 20 | for member in pairs(other) do 21 | union[member] = true 22 | end 23 | return setmetatable(union, Set) 24 | end 25 | 26 | function Set:isSubsetOf(other) 27 | assertSet(self) 28 | assertSet(other) 29 | for member in pairs(self) do 30 | if not other[member] then 31 | return false 32 | end 33 | end 34 | return true 35 | end 36 | 37 | Set.__add = Set.union 38 | 39 | function Set:__eq(other) 40 | return self:isSubsetOf(other) and other:isSubsetOf(self) 41 | end 42 | 43 | local function constructor(members) 44 | local set = {} 45 | if members ~= nil then 46 | local argtype = type(members) 47 | if argtype == "table" then 48 | for i = 1, #members do 49 | set[members[i]] = true 50 | end 51 | elseif argtype == "string" then 52 | for member in members:gmatch("%S+") do 53 | set[member] = true 54 | end 55 | else 56 | error("Invalid argument type; expecting table or string", 2) 57 | end 58 | end 59 | return setmetatable(set, Set) 60 | end 61 | 62 | return constructor 63 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/constants.lua: -------------------------------------------------------------------------------- 1 | local Set = require "gumbo.Set" 2 | local _ENV = nil 3 | 4 | local namespaces = { 5 | html = "http://www.w3.org/1999/xhtml", 6 | math = "http://www.w3.org/1998/Math/MathML", 7 | svg = "http://www.w3.org/2000/svg" 8 | } 9 | 10 | local voidElements = Set { 11 | "area", "base", "basefont", "bgsound", "br", "col", "embed", 12 | "frame", "hr", "img", "input", "keygen", "link", "menuitem", "meta", 13 | "param", "source", "track", "wbr" 14 | } 15 | 16 | local rcdataElements = Set { 17 | "style", "script", "xmp", "iframe", "noembed", "noframes", 18 | "plaintext" 19 | } 20 | 21 | local booleanAttributes = { 22 | [""] = Set{"hidden", "irrelevant", "itemscope"}, 23 | audio = Set{"autoplay", "controls"}, 24 | button = Set{"disabled", "autofocus"}, 25 | command = Set{"hidden", "disabled", "checked", "default"}, 26 | datagrid = Set{"multiple", "disabled"}, 27 | details = Set{"open"}, 28 | fieldset = Set{"disabled", "readonly"}, 29 | hr = Set{"noshade"}, 30 | img = Set{"ismap"}, 31 | input = Set[[disabled readonly required autofocus checked ismap]], 32 | menu = Set{"autosubmit"}, 33 | optgroup = Set{"disabled", "readonly"}, 34 | option = Set{"disabled", "readonly", "selected"}, 35 | output = Set{"disabled", "readonly"}, 36 | script = Set{"defer", "async"}, 37 | select = Set{"disabled", "readonly", "autofocus", "multiple"}, 38 | style = Set{"scoped"}, 39 | video = Set{"autoplay", "controls"}, 40 | } 41 | 42 | return { 43 | namespaces = namespaces, 44 | rcdataElements = rcdataElements, 45 | voidElements = voidElements, 46 | booleanAttributes = booleanAttributes 47 | } 48 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/Attribute.lua: -------------------------------------------------------------------------------- 1 | local util = require "gumbo.dom.util" 2 | local assert = assert 3 | local _ENV = nil 4 | 5 | local Attribute = {getters = {}} 6 | Attribute.__index = assert(util.indexFactory(Attribute)) 7 | 8 | local namespaces = { 9 | xlink = "http://www.w3.org/1999/xlink", 10 | xml = "http://www.w3.org/XML/1998/namespace", 11 | xmlns = "http://www.w3.org/2000/xmlns/" 12 | } 13 | 14 | local escmap = { 15 | ["\194\160"] = " ", 16 | ["&"] = "&", 17 | ['"'] = """ 18 | } 19 | 20 | function Attribute.getters:localName() 21 | return self.name 22 | end 23 | 24 | function Attribute.getters:namespaceURI() 25 | local prefix = self.prefix 26 | if prefix then 27 | return namespaces[prefix] 28 | end 29 | end 30 | 31 | function Attribute.getters:textContent() 32 | return self.value 33 | end 34 | 35 | function Attribute.getters:escapedValue() 36 | return (self.value:gsub('[&"]', escmap):gsub("\194\160", escmap)) 37 | end 38 | 39 | return Attribute 40 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/AttributeList.lua: -------------------------------------------------------------------------------- 1 | local _ENV = nil 2 | local AttributeList = {} 3 | AttributeList.__metatable = AttributeList 4 | 5 | function AttributeList:__index(k) 6 | if k == "length" then 7 | return #self 8 | end 9 | end 10 | 11 | return AttributeList 12 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/ChildNode.lua: -------------------------------------------------------------------------------- 1 | local util = require "gumbo.dom.util" 2 | local assertNode = util.assertNode 3 | local _ENV = nil 4 | 5 | local ChildNode = { 6 | implementsChildNode = true 7 | } 8 | 9 | function ChildNode:remove() 10 | assertNode(self) 11 | local parent = self.parentNode 12 | if parent then 13 | parent:removeChild(self) 14 | end 15 | end 16 | 17 | -- TODO: function ChildNode:before(...) 18 | -- TODO: function ChildNode:after(...) 19 | -- TODO: function ChildNode:replace(...) 20 | 21 | return ChildNode 22 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/Comment.lua: -------------------------------------------------------------------------------- 1 | local util = require "gumbo.dom.util" 2 | local Node = require "gumbo.dom.Node" 3 | local ChildNode = require "gumbo.dom.ChildNode" 4 | local Text = require "gumbo.dom.Text" 5 | local assertComment = util.assertComment 6 | local constructor = assert(getmetatable(Text)) 7 | local setmetatable = setmetatable 8 | local _ENV = nil 9 | 10 | local Comment = util.merge(Node, ChildNode, { 11 | type = "comment", 12 | nodeName = "#comment", 13 | nodeType = 8, 14 | data = "" 15 | }) 16 | 17 | function Comment:__tostring() 18 | assertComment(self) 19 | return "" 20 | end 21 | 22 | function Comment:cloneNode() 23 | assertComment(self) 24 | return setmetatable({data = self.data}, Comment) 25 | end 26 | 27 | function Comment.getters:length() 28 | return #self.data 29 | end 30 | 31 | return setmetatable(Comment, constructor) 32 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/DOMTokenList.lua: -------------------------------------------------------------------------------- 1 | local util = require "gumbo.dom.util" 2 | local Buffer = require "gumbo.Buffer" 3 | local assertString = util.assertString 4 | local error = error 5 | local _ENV = nil 6 | local DOMTokenList = {} 7 | DOMTokenList.__index = DOMTokenList 8 | 9 | -- TODO: Add type assertions 10 | -- TODO: function DOMTokenList:add(...) 11 | -- TODO: function DOMTokenList:remove(...) 12 | -- TODO: function DOMTokenList:toggle(token, force) 13 | 14 | function DOMTokenList:__tostring() 15 | local length = self.length 16 | local buf = Buffer() 17 | buf:write("DOMTokenList{") 18 | if length > 0 then 19 | buf:write('"', self[1], '"') 20 | for i = 2, length do 21 | buf:write(', "', self[i], '"') 22 | end 23 | end 24 | buf:write("}") 25 | return buf:tostring() 26 | end 27 | 28 | function DOMTokenList:toString() 29 | local buf = Buffer() 30 | for i = 1, self.length do 31 | buf:write(self[i]) 32 | end 33 | return buf:tostring() 34 | end 35 | 36 | function DOMTokenList:item(index) 37 | return self[index] 38 | end 39 | 40 | function DOMTokenList:contains(token) 41 | assertString(token) 42 | if token == "" then 43 | error("SyntaxError", 2) 44 | elseif token:find("%s") then 45 | error("InvalidCharacterError", 2) 46 | elseif self[token] then 47 | return true 48 | else 49 | return false 50 | end 51 | end 52 | 53 | return DOMTokenList 54 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/DocumentFragment.lua: -------------------------------------------------------------------------------- 1 | local util = require "gumbo.dom.util" 2 | local Node = require "gumbo.dom.Node" 3 | local ParentNode = require "gumbo.dom.ParentNode" 4 | local Document = require "gumbo.dom.Document" 5 | local assert = assert 6 | local _ENV = nil 7 | 8 | local DocumentFragment = util.merge(Node, ParentNode, { 9 | type = "fragment", 10 | nodeName = "#document-fragment", 11 | nodeType = 11, 12 | getElementById = assert(Document.getElementById) 13 | }) 14 | 15 | return DocumentFragment 16 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/DocumentType.lua: -------------------------------------------------------------------------------- 1 | local util = require "gumbo.dom.util" 2 | local Node = require "gumbo.dom.Node" 3 | local ChildNode = require "gumbo.dom.ChildNode" 4 | local rawget, setmetatable = rawget, setmetatable 5 | local _ENV = nil 6 | 7 | local DocumentType = util.merge(Node, ChildNode, { 8 | type = "doctype", 9 | nodeType = 10, 10 | publicId = "", 11 | systemId = "" 12 | }) 13 | 14 | function DocumentType:cloneNode() 15 | local clone = { 16 | name = rawget(self, "name"), 17 | publicId = rawget(self, "publicId"), 18 | systemId = rawget(self, "systemId") 19 | } 20 | return setmetatable(clone, DocumentType) 21 | end 22 | 23 | function DocumentType.getters:nodeName() 24 | return self.name 25 | end 26 | 27 | return DocumentType 28 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/ElementList.lua: -------------------------------------------------------------------------------- 1 | local util = require "gumbo.dom.util" 2 | local assertString = util.assertString 3 | local type, ipairs = type, ipairs 4 | local _ENV = nil 5 | local ElementList = {} 6 | 7 | function ElementList:__index(k) 8 | local field = ElementList[k] 9 | if field then 10 | return field 11 | elseif type(k) == "string" then 12 | return self:namedItem(k) 13 | end 14 | end 15 | 16 | function ElementList:item(index) 17 | return self[index] 18 | end 19 | 20 | function ElementList:namedItem(key) 21 | assertString(key) 22 | if key == "" then 23 | return nil 24 | end 25 | for _, element in ipairs(self) do 26 | if element:getAttribute("id") == key then 27 | return element 28 | elseif 29 | element.namespaceURI == "http://www.w3.org/1999/xhtml" 30 | and element:getAttribute("name") == key 31 | then 32 | return element 33 | end 34 | end 35 | end 36 | 37 | return ElementList 38 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/NodeList.lua: -------------------------------------------------------------------------------- 1 | local util = require "gumbo.dom.util" 2 | local _ENV = nil 3 | local NodeList = {getters = {}} 4 | NodeList.__index = util.indexFactory(NodeList) 5 | 6 | -- TODO: Add tests 7 | function NodeList:item(index) 8 | return self[index] 9 | end 10 | 11 | function NodeList:removeAll() 12 | for i = #self, 1, -1 do 13 | self[i] = nil 14 | end 15 | end 16 | 17 | function NodeList.getters:length() 18 | return #self 19 | end 20 | 21 | return NodeList 22 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/ParentNode.lua: -------------------------------------------------------------------------------- 1 | local ElementList = require "gumbo.dom.ElementList" 2 | local Set = require "gumbo.Set" 3 | local ipairs, setmetatable = ipairs, setmetatable 4 | local _ENV = nil 5 | 6 | local ParentNode = { 7 | implementsParentNode = true, 8 | getters = {}, 9 | readonly = Set { 10 | "children", "firstElementChild", "lastElementChild", 11 | "childElementCount" 12 | } 13 | } 14 | 15 | function ParentNode.getters:children() 16 | if self:hasChildNodes() then 17 | local collection = {} 18 | local length = 0 19 | for i, node in ipairs(self.childNodes) do 20 | if node.type == "element" then 21 | length = length + 1 22 | collection[length] = node 23 | end 24 | end 25 | collection.length = length 26 | return setmetatable(collection, ElementList) 27 | end 28 | end 29 | 30 | function ParentNode.getters:childElementCount() 31 | local length = 0 32 | if self:hasChildNodes() then 33 | for i, node in ipairs(self.childNodes) do 34 | if node.type == "element" then 35 | length = length + 1 36 | end 37 | end 38 | end 39 | return length 40 | end 41 | 42 | function ParentNode.getters:firstElementChild() 43 | if self:hasChildNodes() then 44 | for i, node in ipairs(self.childNodes) do 45 | if node.type == "element" then 46 | return node 47 | end 48 | end 49 | end 50 | end 51 | 52 | function ParentNode.getters:lastElementChild() 53 | if self:hasChildNodes() then 54 | local childNodes = self.childNodes 55 | for i = #childNodes, 1, -1 do 56 | local node = childNodes[i] 57 | if node.type == "element" then 58 | return node 59 | end 60 | end 61 | end 62 | end 63 | 64 | return ParentNode 65 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/Text.lua: -------------------------------------------------------------------------------- 1 | local util = require "gumbo.dom.util" 2 | local Node = require "gumbo.dom.Node" 3 | local ChildNode = require "gumbo.dom.ChildNode" 4 | local assertTextNode = util.assertTextNode 5 | local assertStringOrNil = util.assertStringOrNil 6 | local rawget, setmetatable = rawget, setmetatable 7 | local _ENV = nil 8 | 9 | local Text = util.merge(Node, ChildNode, { 10 | type = "text", 11 | nodeName = "#text", 12 | nodeType = 3, 13 | data = "" 14 | }) 15 | 16 | function Text:__tostring() 17 | assertTextNode(self) 18 | return '#text "' .. self.data .. '"' 19 | end 20 | 21 | function Text:cloneNode() 22 | assertTextNode(self) 23 | local clone = { 24 | data = rawget(self, "data"), 25 | type = rawget(self, "type") 26 | } 27 | return setmetatable(clone, Text) 28 | end 29 | 30 | function Text.getters:length() 31 | return #self.data 32 | end 33 | 34 | local escmap = { 35 | ["&"] = "&", 36 | ["<"] = "<", 37 | [">"] = ">", 38 | } 39 | 40 | function Text.getters:escapedData() 41 | return (self.data:gsub("[&<>]", escmap):gsub("\194\160", " ")) 42 | end 43 | 44 | local constructor = { 45 | __call = function(self, data) 46 | assertStringOrNil(data) 47 | return setmetatable({data = data}, self) 48 | end 49 | } 50 | 51 | return setmetatable(Text, constructor) 52 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/dom/util.lua: -------------------------------------------------------------------------------- 1 | local type, select, pairs = type, select, pairs 2 | local assert, error, rawset = assert, error, rawset 3 | local _ENV = nil 4 | local util = {} 5 | 6 | function util.merge(...) 7 | local t = {getters={}} 8 | for i = 1, select("#", ...) do 9 | local m = select(i, ...) 10 | assert(type(m) == "table") 11 | for k, v in pairs(m) do 12 | local tk = t[k] 13 | if type(v) == "table" and type(tk) == "table" then 14 | for k2, v2 in pairs(v) do 15 | tk[k2] = v2 16 | end 17 | else 18 | t[k] = v 19 | end 20 | end 21 | end 22 | t.__index = util.indexFactory(t) 23 | t.__newindex = util.newindexFactory(t) 24 | return t 25 | end 26 | 27 | function util.indexFactory(t) 28 | local getters = assert(t.getters) 29 | t.__metatable = t 30 | return function(self, k) 31 | local field = t[k] 32 | if field then 33 | return field 34 | else 35 | local getter = getters[k] 36 | if getter then 37 | return getter(self) 38 | end 39 | end 40 | end 41 | end 42 | 43 | function util.newindexFactory(t) 44 | local setters = assert(t.setters) 45 | local readonly = assert(t.readonly) 46 | return function(self, k, v) 47 | local setter = setters[k] 48 | if setter then 49 | setter(self, v) 50 | elseif not readonly[k] then 51 | rawset(self, k, v) 52 | end 53 | end 54 | end 55 | 56 | -- TODO: Better error messages 57 | 58 | function util.assertNode(v) 59 | if not (v and type(v) == "table" and v.nodeType) then 60 | error("TypeError: Argument is not a Node", 3) 61 | end 62 | end 63 | 64 | function util.assertDocument(v) 65 | if not (v and type(v) == "table" and v.type == "document") then 66 | error("TypeError: Argument is not a Document", 3) 67 | end 68 | end 69 | 70 | function util.assertElement(v) 71 | if not (v and type(v) == "table" and v.type == "element") then 72 | error("TypeError: Argument is not an Element", 3) 73 | end 74 | end 75 | 76 | function util.assertTextNode(v) 77 | if not (v and type(v) == "table" and v.nodeName == "#text") then 78 | error("TypeError: Argument is not a Text node", 3) 79 | end 80 | end 81 | 82 | function util.assertComment(v) 83 | if not (v and type(v) == "table" and v.type == "comment") then 84 | error("TypeError: Argument is not a Comment", 3) 85 | end 86 | end 87 | 88 | function util.assertString(v) 89 | if type(v) ~= "string" then 90 | error("TypeError: Argument is not a string", 3) 91 | end 92 | end 93 | 94 | function util.assertStringOrNil(v) 95 | if v ~= nil and type(v) ~= "string" then 96 | error("TypeError: Argument is not a string", 3) 97 | end 98 | end 99 | 100 | function util.assertName(v) 101 | if type(v) ~= "string" then 102 | error("TypeError: Argument is not a string", 3) 103 | elseif not v:find("^[A-Za-z:_][A-Za-z0-9:_.-]*$") then 104 | -- TODO: If ASCII name pattern isn't found, try full Unicode match 105 | -- before throwing an error. 106 | -- See: http://www.w3.org/TR/xml/#NT-Name 107 | error("InvalidCharacterError", 3) 108 | end 109 | end 110 | 111 | function util.NYI() 112 | error("Not yet implemented", 2) 113 | end 114 | 115 | return util 116 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/sanitize.lua: -------------------------------------------------------------------------------- 1 | local Set = require "gumbo.Set" 2 | local assert = assert 3 | local urlPrefix = (_VERSION == "Lua 5.1") and "^[%z\1-\32]*" or "^[\0-\32]*" 4 | local _ENV = nil 5 | 6 | local urlSchemePattern = urlPrefix .. "([a-zA-Z][a-zA-Z0-9+.-]*:)" 7 | local allowedHrefSchemes = Set{"http:", "https:", "mailto:"} 8 | local allowedImgSrcSchemes = Set{"http:", "https:"} 9 | local allowedDivAttributes = Set{"itemscope", "itemtype"} 10 | 11 | local allowedElements = Set [[ 12 | a b blockquote br code dd del div dl dt em h1 h2 h3 h4 h5 h6 hr i 13 | img ins kbd li ol p pre q rp rt ruby s samp strike strong sub sup 14 | table tbody td tfoot th thead tr tt ul var 15 | ]] 16 | 17 | local allowedAttributes = Set [[ 18 | abbr accept accept-charset accesskey action align alt axis border 19 | cellpadding cellspacing char charoff charset checked cite clear 20 | color cols colspan compact coords datetime dir disabled enctype for 21 | frame headers height hreflang hspace ismap itemprop label lang 22 | longdesc maxlength media method multiple name nohref noshade nowrap 23 | prompt readonly rel rev rows rowspan rules scope selected shape size 24 | span start summary tabindex target title type usemap valign value 25 | vspace width 26 | ]] 27 | 28 | local function isAllowedHref(url) 29 | local scheme = url:match(urlSchemePattern) 30 | return scheme == nil or allowedHrefSchemes[scheme:lower()] == true 31 | end 32 | 33 | local function isAllowedImgSrc(url) 34 | local scheme = url:match(urlSchemePattern) 35 | return scheme == nil or allowedImgSrcSchemes[scheme:lower()] == true 36 | end 37 | 38 | local function isAllowedAttribute(tag, attr) 39 | local name, value = assert(attr.name), assert(attr.value) 40 | return 41 | allowedAttributes[name] 42 | or (name:find("^data[-].+") ~= nil) 43 | or (tag == "div" and allowedDivAttributes[name]) 44 | or (tag == "a" and name == "href" and isAllowedHref(value)) 45 | or (tag == "area" and name == "href" and isAllowedHref(value)) 46 | or (tag == "img" and name == "src" and isAllowedImgSrc(value)) 47 | end 48 | 49 | local function sanitize(root) 50 | for node in root:reverseWalk() do 51 | if node.type == "element" then 52 | local tag = node.localName 53 | if allowedElements[tag] then 54 | local attributes = node.attributes 55 | for i = #attributes, 1, -1 do 56 | local attr = attributes[i] 57 | if not isAllowedAttribute(tag, attr) then 58 | node:removeAttribute(attr.name) 59 | end 60 | end 61 | else 62 | node:remove() 63 | end 64 | end 65 | end 66 | return root 67 | end 68 | 69 | return sanitize 70 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/serialize/Indent.lua: -------------------------------------------------------------------------------- 1 | local setmetatable = setmetatable 2 | local _ENV = nil 3 | local Indent = {} 4 | 5 | function Indent:__index(depth) 6 | if depth < 25 then 7 | local indent = self[1]:rep(depth) 8 | self[depth] = indent 9 | return indent 10 | else -- stop indenting at depth of 25, to avoid buffer/output bloat 11 | return "" 12 | end 13 | end 14 | 15 | return function(width) 16 | local i1 = (" "):rep(width or 4) 17 | return setmetatable({[0] = "", [1] = i1}, Indent) 18 | end 19 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/lua/rocks/share/lua/5.1/gumbo/serialize/html.lua: -------------------------------------------------------------------------------- 1 | local Buffer = require "gumbo.Buffer" 2 | local Indent = require "gumbo.serialize.Indent" 3 | local constants = require "gumbo.constants" 4 | local voidElements = constants.voidElements 5 | local rcdataElements = constants.rcdataElements 6 | local _ENV = nil 7 | 8 | local function wrap(text, indent) 9 | local limit = 78 10 | local indentWidth = #indent 11 | local pos = 1 - indentWidth 12 | text = text:gsub("^%s*(.-)%s*$", "%1") 13 | local function reflow(start, word, stop) 14 | if stop - pos > limit then 15 | pos = start - indentWidth 16 | return "\n" .. indent .. word 17 | else 18 | return " " .. word 19 | end 20 | end 21 | return indent, text:gsub("%s+()(%S+)()", reflow), "\n" 22 | end 23 | 24 | return function(node, buffer, indentWidth) 25 | local buf = buffer or Buffer() 26 | local getIndent = Indent(indentWidth) 27 | local function serialize(node, depth) 28 | local type = node.type 29 | local indent = getIndent[depth] 30 | if type == "element" then 31 | local tag = node.localName 32 | buf:write(indent, node.tagHTML) 33 | local children = node.childNodes 34 | local length = #children 35 | if voidElements[tag] then 36 | buf:write("\n") 37 | elseif length == 0 then 38 | buf:write("\n") 39 | else 40 | buf:write("\n") 41 | for i = 1, length do 42 | serialize(children[i], depth + 1) 43 | end 44 | buf:write(indent, "\n") 45 | end 46 | elseif type == "text" then 47 | local parent = node.parentNode 48 | if parent and rcdataElements[parent.localName] then 49 | buf:write(indent, node.data, "\n") 50 | else 51 | buf:write(wrap(node.escapedData, indent)) 52 | end 53 | elseif type == "comment" then 54 | buf:write(indent, "\n") 55 | elseif type == "document" then 56 | if node.doctype then 57 | buf:write("\n") 58 | end 59 | local children = node.childNodes 60 | for i = 1, #children do 61 | serialize(children[i], depth) 62 | end 63 | end 64 | end 65 | serialize(node, 0) 66 | if buf.tostring then 67 | return buf:tostring() 68 | end 69 | end 70 | -------------------------------------------------------------------------------- /system/pkgs/nvim/main_nvim/typrstats: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/system/pkgs/nvim/main_nvim/typrstats -------------------------------------------------------------------------------- /system/pkgs/nvim/themes/README.md: -------------------------------------------------------------------------------- 1 | # Themes 2 | 3 | These are the base configurations for the corresponding neovim themes. 4 | 5 | If the userSettings argument `nvim.nvim_compile` is set to true, then the compiled themes list will be used instead 6 | -------------------------------------------------------------------------------- /system/pkgs/nvim/themes/yang.nix: -------------------------------------------------------------------------------- 1 | { 2 | config = '' 3 | -- WARN: This file has been generated by home manager and pulled from the dotfiles repo 4 | local base_transparent = { bg = "none" } 5 | local transparent = { 6 | Normal = { bg = "none" }, 7 | TermCursor = { bg = "#f0f0f0", fg = "#000000" }, 8 | NormalNC = { bg = "none" }, 9 | NormalFloat = base_transparent, 10 | FloatBorder = base_transparent, 11 | 12 | WinBar = base_transparent, 13 | WinBarNC = base_transparent, 14 | WinSeparator = { fg = "#404040" }, 15 | 16 | TabLineFill = base_transparent, 17 | LineNr = { fg = "#454545" }, 18 | LineNrAbove = { fg = "#454545" }, 19 | LineNrBelow = { fg = "#454545" }, 20 | CursorLineNr = { fg = "#8ea4a2" }, 21 | CursorLineFold = base_transparent, 22 | CursorLineSign = base_transparent, 23 | FoldColumn = { bg = "none", fg = "#666666" }, 24 | SignColumn = base_transparent, 25 | StatusColumn = { bg = "none" }, 26 | StatusLine = { bg = "none" }, 27 | CursorLine = { bg = "none" }, 28 | 29 | Comment = { fg = "#777777", italic = true }, 30 | Visual = { bg = "#555555" }, 31 | 32 | CmpDocumentation = { bg = "none" }, 33 | CmpDocumentationBorder = { bg = "none" }, 34 | 35 | NeoTreeEndOfBuffer = base_transparent, 36 | NeoTreeStatusLine = { bg = "none", fg = "#aba8a8" }, 37 | NeoTreeTabInactive = { bg = "none", fg = "#aba8a8" }, 38 | NeoTreeTabSeparatorInactive = { bg = "none", fg = "#202020" }, 39 | NeoTreeSignColumn = { bg = "none", fg = "#aba8a8" }, 40 | NeoTreePopup = { bg = "none", fg = "#aba8a8" }, 41 | NeoTreePopupBorder = base_transparent, 42 | NeoTreeNormal = { bg = "none", fg = "#aba8a8" }, 43 | NeoTreeNormalNC = { bg = "none", fg = "#aba8a8" }, 44 | NeoTreeWinSeparator = { fg = "#404040" }, 45 | 46 | TelescopeNormal = base_transparent, 47 | TelescopePreviewNormal = base_transparent, 48 | TelescopeResultsNormal = base_transparent, 49 | TelescopePromptNormal = base_transparent, 50 | TelescopePreviewBorder = { fg = "#404040", bg = "none" }, 51 | TelescopeResultsBorder = { fg = "#404040", bg = "none" }, 52 | TelescopePromptBorder = { fg = "#404040", bg = "none" }, 53 | 54 | DiagnosticSignError = { fg = "#b96a65", bg = "none" }, 55 | DiagnosticSignWarn = { fg = "#a37967", bg = "none" }, 56 | DiagnosticSignInfo = { fg = "#708894", bg = "none" }, 57 | DiagnosticSignHint = { fg = "#8d7e8e", bg = "none" }, 58 | DiagnosticSignOk = { fg = "#7a8a6c", bg = "none" }, 59 | DiagnosticUnnecessary = { fg = "#777777", italic = true }, 60 | 61 | GitSignsAdd = { fg = "#4f6736", bg = "none" }, 62 | GitSignsChange = { fg = "#c4b28a", bg = "none" }, 63 | GitSignsDelete = { fg = "#a84843", bg = "none" }, 64 | 65 | snacksDashboardDir = { fg = "#777777", italic = true }, 66 | SnacksIndent = { bg = "none", fg = "#454545" }, 67 | 68 | NotifyBackground = base_transparent, 69 | 70 | RenderMarkdownCode = { bg = "#232323" }, 71 | } 72 | 73 | return { 74 | { 75 | "ramojus/mellifluous.nvim", 76 | lazy = false, 77 | priority = 1000, 78 | opts = { 79 | colorset = "kanagawa_dragon", 80 | highlight_overrides = { 81 | dark = function(highlighter, colors) 82 | for key, value in pairs(transparent) do 83 | highlighter.set(key, value) 84 | end 85 | end, 86 | }, 87 | }, 88 | config = function(_, opts) 89 | require("mellifluous").setup(opts) 90 | vim.cmd.colorscheme("mellifluous") 91 | end, 92 | }, 93 | } 94 | ''; 95 | } 96 | -------------------------------------------------------------------------------- /system/pkgs/sddm.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, lib, userSettings, ... }: 2 | let 3 | themes = { 4 | yin = { 5 | wallpaper = "yin.png"; 6 | accent = "#222222"; 7 | main = "#222222"; 8 | button_text = "#FFFFFF"; 9 | }; 10 | yang = { 11 | wallpaper = "yang.png"; 12 | main = "#FFFFFF"; 13 | accent = "#FFFFFF"; 14 | button_text = "#222222"; 15 | }; 16 | burst = { 17 | wallpaper = "fractal.png"; 18 | main = "#FFFFFF"; 19 | accent = "#87A1DD"; 20 | button_text = "#FFFFFF"; 21 | }; 22 | shards = { 23 | wallpaper = "shard.png"; 24 | main = "#FFFFFF"; 25 | accent = "#94cbba"; 26 | button_text = "#FFFFFF"; 27 | }; 28 | }; 29 | currentTheme = themes.${userSettings.theme}; 30 | in 31 | { 32 | services.displayManager = { 33 | sddm = { 34 | enable = true; 35 | wayland.enable = true; 36 | sugarCandyNix = { 37 | enable = true; 38 | settings = { 39 | Background = lib.cleanSource ../../wallpapers/${currentTheme.wallpaper}; 40 | MainColor = currentTheme.main; 41 | AccentColor = currentTheme.accent; 42 | OverrideLoginButtonTextColor = currentTheme.button_text; 43 | ScreenWidth = 2560; 44 | ScreenHeight = 1440; 45 | FormPosition = "left"; 46 | HaveFormBackground = false; 47 | PartialBlur = true; 48 | }; 49 | }; 50 | }; 51 | defaultSession = "hyprland"; 52 | sessionPackages = with pkgs; [ hyprland ]; 53 | }; 54 | } 55 | -------------------------------------------------------------------------------- /system/pkgs/vm.nix: -------------------------------------------------------------------------------- 1 | { pkgs, userSettings, ... }: 2 | { 3 | virtualisation.libvirtd = { 4 | enable = true; 5 | }; 6 | environment.systemPackages = with pkgs; [ virt-manager ]; 7 | 8 | # bridged network 9 | # networking.bridges = { 10 | # br0 = { 11 | # interfaces = [ "wlp3s0" ]; 12 | # }; 13 | # }; 14 | } 15 | -------------------------------------------------------------------------------- /system/security/fail2ban.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, userSettings, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | fail2ban 5 | ]; 6 | 7 | services.fail2ban = { 8 | enable = true; 9 | jails = { 10 | sshd = { 11 | settings = { 12 | port = 22; 13 | filter = "sshd"; 14 | maxRetry = 5; 15 | bantime = 3600; 16 | findtime = 600; 17 | }; 18 | }; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /system/security/firewall.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | firewalld 5 | ]; 6 | networking.firewall = { 7 | enable = true; 8 | allowedTCPPorts = [ 22 ]; 9 | allowedUDPPorts = [ ]; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /system/security/sudo.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, userSettings, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | sudo 5 | ]; 6 | 7 | security.sudo = { 8 | enable = true; 9 | extraConfig = '' 10 | # Enable the running of the fail2ban script which by default requires sudo privelages 11 | ${userSettings.username} ALL=(ALL) NOPASSWD: /home/${userSettings.username}/dots/user/shell/cli/fastfetch/scripts/fail2ban.sh 12 | ${userSettings.username} ALL=(ALL) NOPASSWD: /home/${userSettings.username}/dots/user/shell/cli/fastfetch/scripts/docker.sh 13 | ''; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /system/security/sysctl.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | sysctl 5 | ]; 6 | 7 | boot.kernel.sysctl = { 8 | "net.ipv4.conf.all.accept_source_route" = "0"; 9 | "net.ipv6.conf.all.accept_source_route" = "0"; 10 | "net.ipv4.conf.all.rp_filter" = "1"; 11 | "net.ipv4.conf.all.accept_redirects" = "0"; 12 | "net.ipv6.conf.all.accept_redirects" = "0"; 13 | "net.ipv4.conf.all.log_martians" = "1"; 14 | "net.ipv4.tcp_syncookies" = "1"; 15 | "fs.suid_dumpable" = "0"; 16 | }; 17 | } 18 | -------------------------------------------------------------------------------- /system/security/unbound.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | unbound 5 | openresolv 6 | ]; 7 | 8 | services.unbound = { 9 | enable = true; 10 | settings = { 11 | server = { 12 | verbosity = 1; 13 | interface = [ "127.0.0.1" ]; 14 | port = 53; 15 | do-ip4 = true; 16 | do-ip6 = false; 17 | do-tcp = true; 18 | access-control = [ "127.0.0.0/8 allow" ]; 19 | cache-max-ttl = 86400; 20 | cache-min-ttl = 3600; 21 | }; 22 | forward-zone = [ 23 | { 24 | name = "."; 25 | forward-tls-upstream = true; 26 | forward-addr = [ 27 | "1.1.1.1@853" 28 | "9.9.9.9@853" 29 | "8.8.8.8@853" 30 | ]; 31 | } 32 | ]; 33 | }; 34 | }; 35 | 36 | networking.resolvconf = { 37 | enable = true; 38 | useLocalResolver = true; 39 | dnsSingleRequest = true; 40 | }; 41 | } 42 | -------------------------------------------------------------------------------- /system/wm/README.md: -------------------------------------------------------------------------------- 1 | # Window Managers 2 | 3 | This is a list of window manager configurations. They will be organized by subdirectories labeled with their respective window manager name. 4 | 5 | Currently only Hyprland is supported. 6 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/scripts/alpaca-sidebar.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | get_active_window() { 4 | hyprctl activewindow -j | jq -r '.address' 5 | } 6 | 7 | get_alpaca_window() { 8 | hyprctl clients -j | jq -r '.[] | select(.title == "Alpaca") | .address' 9 | } 10 | 11 | # grabs the x coordinates of the Alpaca window 12 | alpaca_window_position() { 13 | hyprctl clients -j | jq -r '.[] | select(.title == "Alpaca") | .at | .[0]' 14 | } 15 | 16 | MAIN_WINDOW=$(get_active_window) 17 | 18 | sleep 0.5 19 | 20 | if [[ -z "$MAIN_WINDOW" ]]; then 21 | echo "No active window found. Exiting." 22 | alpaca & 23 | exit 1 24 | fi 25 | 26 | alpaca & 27 | sleep 0.25 28 | 29 | ALPACA_WINDOW=$(get_alpaca_window) 30 | 31 | while [[ -z "$ALPACA_WINDOW" ]] 32 | do 33 | sleep 0.1 34 | ALPACA_WINDOW=$(get_alpaca_window) 35 | done 36 | 37 | echo "Main window: $MAIN_WINDOW" 38 | echo "Alpaca window: $ALPACA_WINDOW" 39 | echo "Alpaca window position: $(alpaca_window_position)" 40 | 41 | if [[ $(alpaca_window_position) -le 70 ]]; then 42 | hyprctl dispatch focuswindow "$ALPACA_WINDOW" 43 | hyprctl dispatch swapwindow r 44 | hyprctl dispatch splitratio 0.5 "$ALPACA_WINDOW" 45 | else 46 | hyprctl dispatch splitratio 0.5 "$ALPACA_WINDOW" 47 | fi 48 | 49 | echo "Custom layout applied successfully." 50 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/scripts/home_layout.sh: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | # main terminal / system file editor 4 | kitty --detach 5 | 6 | sleep 0.1 7 | 8 | hyprctl dispatch movewindowpixel exact 1125 85, activewindow 9 | hyprctl dispatch resizewindowpixel exact 700 900, activewindow 10 | 11 | # visualizer 12 | kitty --detach cava 13 | 14 | sleep 0.1 15 | 16 | hyprctl dispatch movewindowpixel exact 90 540, activewindow 17 | hyprctl dispatch resizewindowpixel exact 700 450, activewindow 18 | 19 | # music player 20 | theme=$(cat ~/.system-theme) 21 | export SYSTEM_THEME=$theme 22 | ags -b music-player -c ~/dots/user/pkgs/music/custom_player/config.js & 23 | 24 | sleep 0.35 25 | 26 | hyprctl dispatch movewindowpixel exact 300 80, activewindow 27 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/settings/apps.conf: -------------------------------------------------------------------------------- 1 | $terminal = kitty 2 | $fileManager = kitty --detach yazi ~ 3 | $menu = wofi --show drun 4 | 5 | exec-once = hyprpanel 6 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/settings/env.conf: -------------------------------------------------------------------------------- 1 | env = XCURSOR_SIZE,24 2 | env = HYPRCURSOR_SIZE,24 3 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/settings/inputs.conf: -------------------------------------------------------------------------------- 1 | input { 2 | kb_layout = us 3 | kb_variant = 4 | kb_model = 5 | kb_options = 6 | kb_rules = 7 | 8 | follow_mouse = 1 9 | 10 | sensitivity = 0 # -1.0 - 1.0, 0 means no modification. 11 | 12 | touchpad { 13 | natural_scroll = false 14 | } 15 | } 16 | 17 | gestures { 18 | workspace_swipe = false 19 | } 20 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/settings/keybindings.conf: -------------------------------------------------------------------------------- 1 | # SHORTCUTS 2 | $mainMod = SUPER 3 | bind = $mainMod, Q, exec, $terminal 4 | bind = $mainMod, C, killactive, 5 | bind = $mainMod, M, exit, 6 | bind = $mainMod, E, exec, $fileManager 7 | bind = $mainMod, V, togglefloating, 8 | bind = $mainMod, R, exec, $menu 9 | bind = $mainMod, P, pseudo, # dwindle 10 | bind = $mainMod, J, togglesplit, # dwindle 11 | bind = $mainMod, F, fullscreen, 12 | 13 | # WINDOW NAV 14 | bind = $mainMod, left, movefocus, l 15 | bind = $mainMod, right, movefocus, r 16 | bind = $mainMod, up, movefocus, u 17 | bind = $mainMod, down, movefocus, d 18 | 19 | # WORKSPACE NAV 20 | bind = $mainMod, 1, workspace, 1 21 | bind = $mainMod, 2, workspace, 2 22 | bind = $mainMod, 3, workspace, 3 23 | bind = $mainMod, 4, workspace, 4 24 | bind = $mainMod, 5, workspace, 5 25 | bind = $mainMod, 6, workspace, 6 26 | bind = $mainMod, 7, workspace, 7 27 | bind = $mainMod, 8, workspace, 8 28 | bind = $mainMod, 9, workspace, 9 29 | bind = $mainMod, 0, workspace, 10 30 | bind = $mainMod, mouse_down, workspace, e+1 31 | bind = $mainMod, mouse_up, workspace, e-1 32 | 33 | # WINDOW TO WORKSPACE 34 | bind = $mainMod SHIFT, 1, movetoworkspace, 1 35 | bind = $mainMod SHIFT, 2, movetoworkspace, 2 36 | bind = $mainMod SHIFT, 3, movetoworkspace, 3 37 | bind = $mainMod SHIFT, 4, movetoworkspace, 4 38 | bind = $mainMod SHIFT, 5, movetoworkspace, 5 39 | bind = $mainMod SHIFT, 6, movetoworkspace, 6 40 | bind = $mainMod SHIFT, 7, movetoworkspace, 7 41 | bind = $mainMod SHIFT, 8, movetoworkspace, 8 42 | bind = $mainMod SHIFT, 9, movetoworkspace, 9 43 | bind = $mainMod SHIFT, 0, movetoworkspace, 10 44 | 45 | # SPECIAL WORKSPACE 46 | bind = $mainMod, O, togglespecialworkspace, magic 47 | bind = $mainMod SHIFT, O, movetoworkspace, special:magic 48 | 49 | # WINDOW MOVE/RESIZE 50 | bindm = $mainMod, mouse:272, movewindow 51 | bindm = $mainMod, mouse:273, resizewindow 52 | 53 | # BRIGHTNESS 54 | bind = ,XF86MonBrightnessUp, exec, brightnessctl set +10% 55 | bind = ,XF86MonBrightnessDown, exec, brightnessctl set 10%- 56 | 57 | # VOLUME 58 | bind = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 10%+ 59 | bind = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 10%- 60 | bind = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle 61 | 62 | # SCREENSHOT 63 | bind = $mainMod, S, exec, grim -g "$(slurp)" ~/Pictures/screenshot-$(date +%Y-%m-%d-%H-%M-%S).png 64 | bind = $mainMod SHIFT, S, exec, grim ~/Pictures/screenshot-$(date +%Y-%m-%d-%H-%M-%S).png 65 | 66 | # SCRIPTS 67 | bind = $mainMod SHIFT, A, exec, ~/dots/system/wm/hypr/conf/scripts/home_layout.sh 68 | bind = $mainMod, A, exec, ~/dots/system/wm/hypr/conf/scripts/alpaca-sidebar.sh 69 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/settings/windowrule.conf: -------------------------------------------------------------------------------- 1 | windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. 2 | 3 | # KITTY FLOAT 4 | windowrule = float, ^(kitty)$ 5 | windowrule = size 700 450, ^(kitty)$ 6 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/themes/burst.conf: -------------------------------------------------------------------------------- 1 | monitor=,preferred,auto,1.333333 2 | 3 | general { 4 | gaps_in = 15 5 | gaps_out = 20 6 | 7 | border_size = 0 8 | 9 | col.active_border = rgba(fefefe99) 10 | col.inactive_border = rgba(fefefe99) 11 | 12 | resize_on_border = false 13 | 14 | allow_tearing = false 15 | 16 | layout = dwindle 17 | } 18 | 19 | decoration { 20 | rounding = 10 21 | 22 | shadow { 23 | enabled = true 24 | color = rgba(3535353e) 25 | offset = 3 8 26 | range = 5 27 | render_power = 2 28 | } 29 | 30 | blur { 31 | enabled = true 32 | size = 8 33 | passes = 3 34 | } 35 | } 36 | 37 | animations { 38 | enabled = true 39 | 40 | bezier = myBezier, 0.05, 0.9, 0.1, 1.05 41 | 42 | animation = windows, 1, 7, myBezier 43 | animation = windowsOut, 1, 7, default, popin 80% 44 | animation = border, 1, 10, default 45 | animation = borderangle, 1, 8, default 46 | animation = fade, 1, 7, default 47 | animation = workspaces, 1, 6, default 48 | } 49 | 50 | dwindle { 51 | pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below 52 | preserve_split = true # You probably want this 53 | } 54 | 55 | master { 56 | new_status = master 57 | } 58 | 59 | misc { 60 | force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers 61 | disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( 62 | } 63 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/themes/shards.conf: -------------------------------------------------------------------------------- 1 | monitor=,preferred,auto,1.333333 2 | 3 | general { 4 | gaps_in = 15 5 | gaps_out = 20 6 | 7 | border_size = 0 8 | 9 | col.active_border = rgba(fefefe99) 10 | col.inactive_border = rgba(fefefe99) 11 | 12 | resize_on_border = false 13 | 14 | allow_tearing = false 15 | 16 | layout = dwindle 17 | } 18 | 19 | decoration { 20 | rounding = 10 21 | 22 | shadow { 23 | enabled = false 24 | color = rgba(3535353e) 25 | offset = 3 8 26 | range = 5 27 | render_power = 2 28 | } 29 | 30 | blur { 31 | enabled = true 32 | size = 8 33 | passes = 3 34 | } 35 | } 36 | 37 | animations { 38 | enabled = true 39 | 40 | bezier = myBezier, 0.05, 0.9, 0.1, 1.05 41 | 42 | animation = windows, 1, 7, myBezier 43 | animation = windowsOut, 1, 7, default, popin 80% 44 | animation = border, 1, 10, default 45 | animation = borderangle, 1, 8, default 46 | animation = fade, 1, 7, default 47 | animation = workspaces, 1, 6, default 48 | } 49 | 50 | dwindle { 51 | pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below 52 | preserve_split = true # You probably want this 53 | } 54 | 55 | master { 56 | new_status = master 57 | } 58 | 59 | misc { 60 | force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers 61 | disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( 62 | } 63 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/themes/yang.conf: -------------------------------------------------------------------------------- 1 | monitor=,preferred,auto,1.333333 2 | 3 | general { 4 | gaps_in = 15 5 | gaps_out = 20 6 | 7 | border_size = 2 8 | 9 | col.active_border = rgba(fefefe99) 10 | col.inactive_border = rgba(fefefe99) 11 | 12 | resize_on_border = false 13 | 14 | allow_tearing = false 15 | 16 | layout = dwindle 17 | } 18 | 19 | decoration { 20 | rounding = 0 21 | 22 | shadow { 23 | enabled = true 24 | color = rgba(dedede3e) 25 | offset = 8 10 26 | range = 2 27 | render_power = 4 28 | } 29 | 30 | blur { 31 | enabled = true 32 | size = 8 33 | passes = 2 34 | } 35 | } 36 | 37 | animations { 38 | enabled = true 39 | 40 | bezier = myBezier, 0.05, 0.9, 0.1, 1.05 41 | 42 | animation = windows, 1, 7, myBezier 43 | animation = windowsOut, 1, 7, default, popin 80% 44 | animation = border, 1, 10, default 45 | animation = borderangle, 1, 8, default 46 | animation = fade, 1, 7, default 47 | animation = workspaces, 1, 6, default 48 | } 49 | 50 | dwindle { 51 | pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below 52 | preserve_split = true # You probably want this 53 | } 54 | 55 | master { 56 | new_status = master 57 | } 58 | 59 | misc { 60 | force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers 61 | disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( 62 | } 63 | -------------------------------------------------------------------------------- /system/wm/hypr/conf/themes/yin.conf: -------------------------------------------------------------------------------- 1 | monitor=,preferred,auto,1.333333 2 | 3 | general { 4 | gaps_in = 15 5 | gaps_out = 20 6 | 7 | border_size = 2 8 | 9 | col.active_border = rgba(000000aa) 10 | col.inactive_border = rgba(000000aa) 11 | 12 | resize_on_border = false 13 | 14 | allow_tearing = false 15 | 16 | layout = dwindle 17 | } 18 | 19 | decoration { 20 | rounding = 0 21 | 22 | shadow { 23 | enabled = true 24 | color = rgba(424242dd) 25 | offset = 12 12 26 | range = 0 27 | } 28 | 29 | blur { 30 | enabled = true 31 | size = 8 32 | passes = 2 33 | } 34 | } 35 | 36 | animations { 37 | enabled = true 38 | 39 | bezier = myBezier, 0.05, 0.9, 0.1, 1.05 40 | 41 | animation = windows, 1, 7, myBezier 42 | animation = windowsOut, 1, 7, default, popin 80% 43 | animation = border, 1, 10, default 44 | animation = borderangle, 1, 8, default 45 | animation = fade, 1, 7, default 46 | animation = workspaces, 1, 6, default 47 | } 48 | 49 | dwindle { 50 | pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below 51 | preserve_split = true # You probably want this 52 | } 53 | 54 | master { 55 | new_status = master 56 | } 57 | 58 | misc { 59 | force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers 60 | disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( 61 | } 62 | -------------------------------------------------------------------------------- /system/wm/hypr/hyprland.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, userSettings, ... }: 2 | let 3 | cursorConfigs = { 4 | yin = { 5 | cursorTheme = "Barbita-Modern-Classic"; 6 | }; 7 | 8 | yang = { 9 | cursorTheme = "Barbita-Modern-Ice"; 10 | }; 11 | 12 | burst = { 13 | cursorTheme = "Barbita-Modern-Ice"; 14 | }; 15 | }; 16 | 17 | currentCursorConfig = cursorConfigs.${userSettings.theme} or { 18 | cursorTheme = "Barbita-Modern-Classic"; 19 | }; 20 | in 21 | { 22 | wayland.windowManager = { 23 | hyprland = { 24 | enable = true; 25 | systemd.enable = true; 26 | xwayland.enable = true; 27 | extraConfig = '' 28 | source = ${config.home.homeDirectory}dots/system/wm/hypr/conf/settings/apps.conf 29 | source = ${config.home.homeDirectory}dots/system/wm/hypr/conf/settings/env.conf 30 | env = XCURSOR_SIZE,24 31 | env = XCURSOR_THEME,${currentCursorConfig.cursorTheme} 32 | env = HYPRCURSOR_SIZE,24 33 | env = HYPRCURSOR_THEME,${currentCursorConfig.cursorTheme} 34 | source = ${config.home.homeDirectory}dots/system/wm/hypr/conf/settings/inputs.conf 35 | source = ${config.home.homeDirectory}dots/system/wm/hypr/conf/settings/keybindings.conf 36 | source = ${config.home.homeDirectory}dots/system/wm/hypr/conf/themes/${userSettings.theme}.conf 37 | source = ${config.home.homeDirectory}dots/system/wm/hypr/conf/settings/windowrule.conf 38 | ''; 39 | }; 40 | }; 41 | } 42 | -------------------------------------------------------------------------------- /system/wm/hypr/hyprpaper/default.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, lib, userSettings, ... }: 2 | let 3 | themes = { 4 | yin = "${config.home.homeDirectory}dots/wallpapers/yin.png"; 5 | yang = "${config.home.homeDirectory}dots/wallpapers/yang.png"; 6 | burst = "${config.home.homeDirectory}dots/wallpapers/fractal.png"; 7 | shards = "${config.home.homeDirectory}dots/wallpapers/shard.png"; 8 | }; 9 | 10 | wallpaperPath = themes.${userSettings.theme}; 11 | monitorWallpapers = builtins.map (monitor: "${monitor},${wallpaperPath}") userSettings.hypr.monitors; 12 | in 13 | { 14 | services.hyprpaper = { 15 | enable = true; 16 | settings = { 17 | preload = [ 18 | wallpaperPath 19 | ]; 20 | wallpaper = monitorWallpapers; 21 | }; 22 | }; 23 | # Service override fix 24 | systemd.user.services.hyprpaper = { 25 | Service = { 26 | # provide a delay and for some reason it works 27 | # 0.5 seconds is the lowest I could get to work 28 | ExecStartPre = "${pkgs.coreutils}/bin/sleep 0.7"; 29 | }; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /system/wm/hypr/packages.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | hyprland 5 | hyprpaper 6 | wlroots 7 | xwayland 8 | grim 9 | slurp 10 | xdg-desktop-portal-hyprland 11 | xdg-desktop-portal-gtk 12 | wl-clipboard 13 | breeze-icons 14 | ]; 15 | } 16 | -------------------------------------------------------------------------------- /user/README.md: -------------------------------------------------------------------------------- 1 | # User 2 | 3 | All user specific configuration goes here. These configurations, *should* be tied to home-manager and be included and configued within it; although there is some crossover. 4 | 5 | This includes: 6 | 7 | - User packages 8 | - Shell configuration 9 | - Programming languages and related packages 10 | 11 | And more. 12 | -------------------------------------------------------------------------------- /user/de/README.md: -------------------------------------------------------------------------------- 1 | # Desktop Environment 2 | 3 | This contains the configurations of all DE designated applications. This can include application launchers, bars, etc. 4 | 5 | This is modularized to support different DEs and should be separated by sub directories denoting the chosen DE. However, as of right now, only Hyprland is supported. 6 | -------------------------------------------------------------------------------- /user/de/hypr/gtk/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, userSettings, ... }: 2 | let 3 | themeConfig = { 4 | yin = { 5 | themeName = "Graphite"; 6 | themePackage = pkgs.graphite-gtk-theme; 7 | iconName = "Adwaita"; 8 | iconPackage = pkgs.adwaita-icon-theme; 9 | cursorName = "Bibata-Modern-Classic"; 10 | cursorPackage = pkgs.bibata-cursors; 11 | }; 12 | 13 | yang = { 14 | themeName = "Graphite-Dark"; 15 | themePackage = pkgs.graphite-gtk-theme; 16 | iconName = "Adwaita"; 17 | iconPackage = pkgs.adwaita-icon-theme; 18 | cursorName = "Bibata-Modern-Ice"; 19 | cursorPackage = pkgs.bibata-cursors; 20 | }; 21 | 22 | burst = { 23 | themeName = "Tokyonight-Dark"; 24 | themePackage = pkgs.tokyonight-gtk-theme; 25 | iconName = "Adwaita"; 26 | iconPackage = pkgs.adwaita-icon-theme; 27 | cursorName = "Bibata-Modern-Ice"; 28 | cursorPackage = pkgs.bibata-cursors; 29 | }; 30 | 31 | shards = { 32 | themeName = "Graphite-Dark"; 33 | themePackage = pkgs.graphite-gtk-theme; 34 | iconName = "Adwaita"; 35 | iconPackage = pkgs.adwaita-icon-theme; 36 | cursorName = "Bibata-Modern-Ice"; 37 | cursorPackage = pkgs.bibata-cursors; 38 | }; 39 | }; 40 | 41 | currentTheme = themeConfig.${userSettings.theme} or { 42 | themeName = null; 43 | themePackage = null; 44 | iconName = "Adwaita"; 45 | iconPackage = pkgs.adwaita-icon-theme; 46 | cursorName = "Bibata-Modern-Classic"; 47 | cursorPackage = pkgs.bibata-cursors; 48 | }; 49 | in 50 | { 51 | home.packages = with pkgs; [ 52 | gtk3 53 | gtk4 54 | dconf 55 | ]; 56 | 57 | gtk = { 58 | enable = true; 59 | theme = { 60 | name = currentTheme.themeName; 61 | package = currentTheme.themePackage; 62 | }; 63 | iconTheme = { 64 | name = currentTheme.iconName; 65 | package = currentTheme.iconPackage; 66 | }; 67 | cursorTheme = { 68 | name = currentTheme.cursorName; 69 | package = currentTheme.cursorPackage; 70 | size = 24; 71 | }; 72 | }; 73 | home.pointerCursor = { 74 | name = currentTheme.cursorName; 75 | package = currentTheme.cursorPackage; 76 | gtk.enable = true; 77 | }; 78 | } 79 | -------------------------------------------------------------------------------- /user/de/hypr/hypridle.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | services.hypridle = { 4 | enable = true; 5 | settings = { 6 | general = { 7 | lock_cmd = "pgrep hyprlock || hyprlock"; 8 | before_sleep_cmd = "loginctl lock-session"; 9 | after_sleep_cmd = "hyprctl dispatch dpms on"; 10 | }; 11 | listener = [ 12 | { 13 | timeout = 150; 14 | on-timeout = "brightnessctl -s set 10"; 15 | on-resume = "brightnessctl -r"; 16 | } 17 | { 18 | timeout = 300; 19 | on-timeout = "loginctl lock-session"; 20 | } 21 | { 22 | timeout = 330; 23 | on-timeout = "hyprctl dispatch dpms off"; 24 | on-resume = "hyprctl dispatch dpms on"; 25 | } 26 | { 27 | timeout = 1800; 28 | on-timeout = "systemctl suspend"; 29 | } 30 | ]; 31 | }; 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /user/de/hypr/hyprlock.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, userSettings, ... }: 2 | let 3 | themes = { 4 | yin = "${config.home.homeDirectory}dots/wallpapers/yin.png"; 5 | yang = "${config.home.homeDirectory}dots/wallpapers/yang.png"; 6 | burst = "${config.home.homeDirectory}dots/wallpapers/fractal.png"; 7 | shards = "${config.home.homeDirectory}dots/wallpapers/shard.png"; 8 | }; 9 | 10 | wallpaperPath = themes.${userSettings.theme}; 11 | in 12 | { 13 | programs.hyprlock = { 14 | enable = true; 15 | settings = { 16 | general = { 17 | disable_loading_bar = true; 18 | grace = 300; 19 | hide_cursor = true; 20 | no_fade_in = false; 21 | }; 22 | 23 | background = [ 24 | { 25 | path = wallpaperPath; 26 | blur_passes = 3; 27 | blur_size = 8; 28 | } 29 | ]; 30 | }; 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /user/de/hypr/packages.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | sddm 5 | libgtop 6 | btop 7 | gnome-bluetooth 8 | hyprpicker 9 | hyprsunset 10 | hypridle 11 | hyprlock 12 | hyprpanel 13 | wofi 14 | yazi 15 | firefox-wayland 16 | ]; 17 | } 18 | -------------------------------------------------------------------------------- /user/de/hypr/wofi/default.nix: -------------------------------------------------------------------------------- 1 | { config, userSettings, ... }: 2 | { 3 | programs.wofi = { 4 | enable = true; 5 | settings = { 6 | width = "400px"; 7 | height = "450px"; 8 | allow_markup = true; 9 | allow_images = true; 10 | stylesheet = builtins.toPath "${config.home.homeDirectory}dots/user/de/hypr/wofi/themes/${userSettings.theme}.css"; 11 | term = userSettings.terminal; 12 | prompt = "where we droppin..."; 13 | }; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /user/de/hypr/wofi/themes/burst.css: -------------------------------------------------------------------------------- 1 | window { 2 | font-family: "JetBrains Mono"; 3 | margin: 5px; 4 | border: 1px solid rgba(153, 168, 198, 0.6); 5 | background-color: rgba(21, 21, 30, 0.95); 6 | border-radius: 10px; 7 | } 8 | 9 | #input { 10 | margin: 5px; 11 | border: 1px solid rgba(153, 168, 198, 0.6); 12 | border-radius: 15px; 13 | color: #e0e0e0; 14 | background-color: rgba(44, 44, 53, 0.95); 15 | font-family: "Victor Mono"; 16 | font-style: italic; 17 | } 18 | 19 | #inner-box { 20 | margin: 5px; 21 | border: none; 22 | background-color: transparent; 23 | } 24 | 25 | #outer-box { 26 | margin: 15px; 27 | border: none; 28 | background-color: transparent; 29 | } 30 | 31 | #scroll { 32 | margin: 0px; 33 | border: none; 34 | } 35 | 36 | #text { 37 | margin: 5px; 38 | border: none; 39 | color: #d0d0d0; 40 | } 41 | 42 | #entry { 43 | border: none; 44 | margin: 5px 0px; 45 | } 46 | 47 | #entry:focus { 48 | border: none; 49 | } 50 | 51 | #entry:selected { 52 | background-color: rgba(168, 161, 190, 0.7); 53 | border-radius: 15px; 54 | border: 3px solid rgba(162, 150, 201, 0.9); 55 | } 56 | -------------------------------------------------------------------------------- /user/de/hypr/wofi/themes/shards.css: -------------------------------------------------------------------------------- 1 | window { 2 | font-family: "JetBrains Mono"; 3 | margin: 5px; 4 | border: 1px solid rgba(153, 168, 198, 0.6); 5 | background-color: rgba(21, 21, 30, 0.95); 6 | border-radius: 10px; 7 | } 8 | 9 | #input { 10 | margin: 5px; 11 | border: 1px solid rgba(153, 168, 198, 0.6); 12 | border-radius: 15px; 13 | color: #e0e0e0; 14 | background-color: rgba(44, 44, 53, 0.95); 15 | font-family: "Victor Mono"; 16 | font-style: italic; 17 | } 18 | 19 | #inner-box { 20 | margin: 5px; 21 | border: none; 22 | background-color: transparent; 23 | } 24 | 25 | #outer-box { 26 | margin: 15px; 27 | border: none; 28 | background-color: transparent; 29 | } 30 | 31 | #scroll { 32 | margin: 0px; 33 | border: none; 34 | } 35 | 36 | #text { 37 | margin: 5px; 38 | border: none; 39 | color: #d0d0d0; 40 | } 41 | 42 | #entry { 43 | border: none; 44 | margin: 5px 0px; 45 | } 46 | 47 | #entry:focus { 48 | border: none; 49 | } 50 | 51 | #entry:selected { 52 | background-color: rgba(168, 161, 190, 0.7); 53 | border-radius: 15px; 54 | border: 3px solid rgba(162, 150, 201, 0.9); 55 | } 56 | -------------------------------------------------------------------------------- /user/de/hypr/wofi/themes/yang.css: -------------------------------------------------------------------------------- 1 | window { 2 | font-family: "JetBrains Mono"; 3 | margin: 0px; 4 | border: 1px solid rgba(254, 254, 250, 0.6); 5 | background-color: rgba(34, 34, 34, 0.95); 6 | border-radius: 10px; 7 | } 8 | 9 | #input { 10 | margin: 5px; 11 | border: 1px solid rgba(254, 254, 250, 0.6); 12 | color: #e0e0e0; 13 | background-color: rgba(53, 53, 53, 0.95); 14 | font-family: "Victor Mono"; 15 | font-style: italic; 16 | } 17 | 18 | #inner-box { 19 | margin: 5px; 20 | border: none; 21 | background-color: transparent; 22 | } 23 | 24 | #outer-box { 25 | margin: 5px; 26 | border: none; 27 | background-color: transparent; 28 | } 29 | 30 | #scroll { 31 | margin: 0px; 32 | border: none; 33 | } 34 | 35 | #text { 36 | margin: 5px; 37 | border: none; 38 | color: #d0d0d0; 39 | } 40 | 41 | #entry { 42 | border: none; 43 | } 44 | 45 | #entry:focus { 46 | border: none; 47 | } 48 | 49 | #entry:selected { 50 | background-color: rgba(53, 53, 53, 0.95); 51 | border-radius: 5px; 52 | border: 1px solid rgba(254, 254, 250, 0.6); 53 | color: #e0e0e0 54 | } 55 | -------------------------------------------------------------------------------- /user/de/hypr/wofi/themes/yin.css: -------------------------------------------------------------------------------- 1 | window { 2 | font-family: "JetBrains Mono"; 3 | margin: 0px; 4 | border: 1px solid rgba(0, 0, 0, 0.9); 5 | background-color: rgba(221, 221, 221, 0.95); 6 | border-radius: 10px; 7 | } 8 | 9 | #input { 10 | margin: 5px; 11 | border: 1px solid rgba(0, 0, 0, 0.9); 12 | color: #000000; 13 | background-color: rgba(243, 244, 241, 0.95); 14 | font-family: "Victor Mono"; 15 | font-style: italic; 16 | } 17 | 18 | #inner-box { 19 | margin: 5px; 20 | border: none; 21 | background-color: transparent; 22 | } 23 | 24 | #outer-box { 25 | margin: 5px; 26 | border: none; 27 | background-color: transparent; 28 | } 29 | 30 | #scroll { 31 | margin: 0px; 32 | border: none; 33 | } 34 | 35 | #text { 36 | margin: 5px; 37 | border: none; 38 | color: #656565; 39 | } 40 | 41 | #entry { 42 | border: none; 43 | } 44 | 45 | #entry:focus { 46 | border: none; 47 | } 48 | 49 | #entry:selected { 50 | background-color: rgba(243, 244, 241, 0.95); 51 | border-radius: 5px; 52 | border: 1px solid rgba(0, 0, 0, 0.9); 53 | color: #656565 54 | } 55 | -------------------------------------------------------------------------------- /user/de/hypr/yazi.nix: -------------------------------------------------------------------------------- 1 | { userSettings, ... }: 2 | let 3 | themes = { 4 | yin = { }; 5 | yang = { }; 6 | burst = { 7 | mode = { 8 | normal_main = { fg = "#17171f"; bg = "#a8a1be"; bold = true; }; 9 | normal_alt = { fg = "#a8a1be"; bg = "#2b2731"; }; 10 | select_main = { fg = "#17171f"; bg = "#be7c7d"; bold = true; }; 11 | select_alt = { fg = "#be7c7d"; bg = "#342a2a"; }; 12 | }; 13 | }; 14 | shards = { }; 15 | }; 16 | currentTheme = themes.${userSettings.theme}; 17 | in 18 | { 19 | programs.yazi = { 20 | enable = true; 21 | theme = currentTheme; 22 | settings = { 23 | opener = { 24 | open = [ 25 | { run = ''xdg-open "$@"''; orphan = true; desc = "Open"; } 26 | ]; 27 | }; 28 | }; 29 | }; 30 | } 31 | -------------------------------------------------------------------------------- /user/lang/c.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | gcc 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /user/lang/dart.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | dart-sass 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /user/lang/databases.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | sqlite 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /user/lang/lua.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | luarocks 5 | lua5_1 6 | ]; 7 | } 8 | -------------------------------------------------------------------------------- /user/lang/nodejs.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | nodePackages_latest.nodejs 5 | nodePackages_latest.nodemon 6 | # nodePackages_latest.ijavascript 7 | eslint 8 | 9 | deno 10 | ]; 11 | } 12 | -------------------------------------------------------------------------------- /user/lang/python/py.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | # python3Full 5 | # python3Packages.pip 6 | 7 | # global packages 8 | (python3.withPackages (ppkgs: [ 9 | # standard packages 10 | ppkgs.debugpy 11 | ppkgs.pandas 12 | ppkgs.numpy 13 | ppkgs.matplotlib 14 | 15 | # pyrola / jupyter support 16 | ppkgs.pynvim 17 | ppkgs.jupyter-client 18 | ppkgs.prompt-toolkit 19 | ppkgs.pillow 20 | ppkgs.ilua 21 | ])) 22 | 23 | pyenv 24 | ]; 25 | } 26 | -------------------------------------------------------------------------------- /user/lang/python/pyenv.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | programs.pyenv = { 4 | enable = true; 5 | enableZshIntegration = true; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /user/lang/rust.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | cargo 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /user/pkgs/README.md: -------------------------------------------------------------------------------- 1 | # User Packages 2 | 3 | This directory will contain the user defined packages. Mostly, this is defined as packages which will be defined and customized from within home-manager, although there is some crossover. 4 | 5 | Each directory of configureable packages will contain the corresponding configs for their theme and will have this file named after their theme name. Base configurations will also be included under the name `default.nix` 6 | -------------------------------------------------------------------------------- /user/pkgs/ags.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | ags 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /user/pkgs/alpaca.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | alpaca 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /user/pkgs/kitty/default.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, userSettings, ... }: 2 | let 3 | themes = { 4 | shards = { 5 | opacity = 0.5; 6 | }; 7 | burst = { 8 | opacity = 0.8; 9 | }; 10 | yin = { 11 | opacity = 0.8; 12 | }; 13 | yang = { 14 | opacity = 0.8; 15 | }; 16 | }; 17 | 18 | theme_config = themes.${userSettings.theme}; 19 | in 20 | { 21 | home.packages = with pkgs; [ kitty ]; 22 | 23 | programs.kitty = { 24 | enable = true; 25 | keybindings = { 26 | "ctrl+shift+h" = "previous_tab"; 27 | "ctrl+shift+l" = "next_tab"; 28 | "ctrl+shift+;" = "next_layout"; 29 | }; 30 | shellIntegration.enableBashIntegration = true; 31 | shellIntegration.enableZshIntegration = true; 32 | settings = { 33 | background_opacity = theme_config.opacity; 34 | active_tab_background = "#E29ECA"; 35 | inactive_tab_background = "#090610"; 36 | tab_title_template = "{tab.active_oldest_wd}"; 37 | active_tab_title_template = "{title}"; 38 | tab_active_symbol = "󱌣"; 39 | tab_title_max_length = 50; 40 | window_border_width = 1; 41 | active_border_color = "#414141"; 42 | inactive_border_color = "#414141"; 43 | cursor_shape = "block"; 44 | }; 45 | extraConfig = '' 46 | include ~/dots/user/pkgs/kitty/themes/${userSettings.theme}.conf 47 | 48 | window_padding_width 5 15 49 | 50 | enabled_layouts Grid, Stack 51 | 52 | cursor_trail 3 53 | 54 | font_size ${userSettings.fontSize} 55 | font_family JetBrainsMonoNL NFM Regular 56 | italic_font Victor Mono Italic 57 | bold_italic_font Victor Mono Bold Italic 58 | ''; 59 | }; 60 | } 61 | -------------------------------------------------------------------------------- /user/pkgs/kitty/themes/burst.conf: -------------------------------------------------------------------------------- 1 | ## name: Rosé Pine Moon 2 | ## author: mvllow 3 | ## license: MIT 4 | ## upstream: https://github.com/rose-pine/kitty/blob/main/dist/rose-pine-moon.conf 5 | ## blurb: All natural pine, faux fur and a bit of soho vibes for the classy minimalist 6 | 7 | foreground #e0def4 8 | background #17171f 9 | selection_foreground #e0def4 10 | selection_background #44415a 11 | 12 | cursor #f0f0f0 13 | cursor_text_color #e0def4 14 | 15 | url_color #c4a7e7 16 | 17 | active_tab_foreground #e0def4 18 | active_tab_background #393552 19 | inactive_tab_foreground #6e6a86 20 | inactive_tab_background #232136 21 | 22 | # black 23 | color0 #393552 24 | color8 #6e6a86 25 | 26 | # red 27 | color1 #be7c7d 28 | color9 #cf7071 29 | 30 | # green 31 | color2 #94cbba 32 | color10 #7dc7b1 33 | 34 | # yellow 35 | color3 #efd0a3 36 | color11 #efdaa3 37 | 38 | # blue 39 | color4 #99a8c6 40 | color12 #8da4d2 41 | 42 | # magenta 43 | color5 #a8a1be 44 | color13 #aca1cd 45 | 46 | # cyan 47 | color6 #b99bb5 48 | color14 #be96b9 49 | 50 | # white 51 | color7 #d8d6eb 52 | color15 #e0def4 53 | 54 | -------------------------------------------------------------------------------- /user/pkgs/kitty/themes/leaf_dark.conf: -------------------------------------------------------------------------------- 1 | # vim:ft=kitty 2 | ## name: Leaf Dark 3 | ## author: qewer33, brought to kitty by KodiakWeb 4 | ## license: GPLv3 5 | ## upstream: 6 | ## blurb: a green accent, forest colored dark theme, adapted from leaf kde 7 | 8 | #: All the settings below are colors, which you can choose to modify, or use the 9 | #: defaults. You can also add non-color based settings if needed but note that 10 | #: these will not work with using kitty @ set-colors with this theme. For a 11 | #: reference on what these settings do see https://sw.kovidgoyal.net/kitty/conf/ 12 | 13 | #: The basic colors 14 | 15 | foreground #e1e4dc 16 | background #222222 17 | # selection_foreground #000000 18 | # selection_background #fffacd 19 | 20 | 21 | #: Cursor colors 22 | 23 | # cursor #cccccc 24 | # cursor_text_color #111111 25 | 26 | 27 | #: URL underline color when hovering with mouse 28 | 29 | url_color #5292c6 30 | 31 | 32 | #: kitty window border colors and terminal bell colors 33 | 34 | # active_border_color #00ff00 35 | # inactive_border_color #cccccc 36 | # bell_border_color #ff5a00 37 | # visual_bell_color none 38 | 39 | 40 | #: OS Window titlebar colors 41 | 42 | # wayland_titlebar_color system 43 | # macos_titlebar_color system 44 | 45 | 46 | #: Tab bar colors 47 | 48 | active_tab_foreground #403F42 49 | active_tab_background #729B79 50 | inactive_tab_foreground #729B79 51 | inactive_tab_background #2e2c2f 52 | # tab_bar_background none 53 | # tab_bar_margin_color none 54 | 55 | 56 | #: Colors for marks (marked text in the terminal) 57 | 58 | # mark1_foreground black 59 | # mark1_background #98d3cb 60 | # mark2_foreground black 61 | # mark2_background #f2dcd3 62 | # mark3_foreground black 63 | # mark3_background #f274bc 64 | 65 | 66 | #: The basic 16 colors 67 | 68 | #: black 69 | color0 #2e2c2f 70 | color8 #403F42 71 | 72 | #: red 73 | color1 #BA5860 74 | color9 #D6797A 75 | 76 | #: green 77 | color2 #729B79 78 | color10 #98CCA4 79 | 80 | #: yellow 81 | color3 #CCAA6C 82 | color11 #E3C882 83 | 84 | #: blue 85 | color4 #5292C6 86 | color12 #76ACE6 87 | 88 | #: magenta 89 | color5 #8C6AA8 90 | color13 #B798E6 91 | 92 | #: cyan 93 | color6 #489CA5 94 | color14 #77C5DA 95 | 96 | #: white 97 | color7 #e1e4dc 98 | color15 #FCFFF6 99 | 100 | 101 | #: You can set the remaining 240 colors as color16 to color255. 102 | -------------------------------------------------------------------------------- /user/pkgs/kitty/themes/oldworld.conf: -------------------------------------------------------------------------------- 1 | background #222222 2 | foreground #A4A1A1 3 | cursor #F0F0F0 4 | selection_background #F5E0DC 5 | selection_foreground #090909 6 | 7 | # Black 8 | color0 #343436 9 | color8 #434346 10 | 11 | # Yellow 12 | color3 #F5A191 13 | color11 #E6B99D 14 | 15 | # Green 16 | color2 #90B99F 17 | color10 #8ac9a5 18 | 19 | # Red 20 | color1 #EA83A5 21 | color9 #E29ECA 22 | 23 | # Blue 24 | color4 #92A2D5 25 | color12 #A4B8E3 26 | 27 | # Magenta 28 | color5 #ACA1CF 29 | color13 #B4ADD9 30 | 31 | # Cyan 32 | color6 #85B5BA 33 | color14 #8EC4CA 34 | 35 | # White 36 | color7 #C9C7CD 37 | color15 #F7F7F7 38 | 39 | -------------------------------------------------------------------------------- /user/pkgs/kitty/themes/shards.conf: -------------------------------------------------------------------------------- 1 | # vim:ft=kitty 2 | 3 | ## name: Catppuccin-Mocha 4 | ## author: Pocco81 (https://github.com/Pocco81) 5 | ## license: MIT 6 | ## upstream: https://github.com/catppuccin/kitty/blob/main/mocha.conf 7 | ## blurb: Soothing pastel theme for the high-spirited! 8 | 9 | 10 | 11 | # The basic colors 12 | foreground #d8d6eb 13 | background #101017 14 | selection_foreground #1E1E2E 15 | selection_background #F5E0DC 16 | 17 | # Cursor colors 18 | cursor #d8d6eb 19 | cursor_text_color #1E1E2E 20 | 21 | # URL underline color when hovering with mouse 22 | url_color #cba6f7 23 | 24 | # Kitty window border colors 25 | active_border_color #B4BEFE 26 | inactive_border_color #6C7086 27 | bell_border_color #F9E2AF 28 | 29 | # OS Window titlebar colors 30 | wayland_titlebar_color system 31 | macos_titlebar_color system 32 | 33 | # Tab bar colors 34 | active_tab_foreground #11111B 35 | active_tab_background #CBA6F7 36 | inactive_tab_foreground #CDD6F4 37 | inactive_tab_background #181825 38 | tab_bar_background #11111B 39 | 40 | # Colors for marks (marked text in the terminal) 41 | mark1_foreground #1E1E2E 42 | mark1_background #B4BEFE 43 | mark2_foreground #1E1E2E 44 | mark2_background #CBA6F7 45 | mark3_foreground #1E1E2E 46 | mark3_background #74C7EC 47 | 48 | # The 16 terminal colors 49 | 50 | # black 51 | color0 #45475A 52 | color8 #585B70 53 | 54 | # red 55 | color1 #F38BA8 56 | color9 #F38BA8 57 | 58 | # green 59 | color2 #94e2d5 60 | color10 #94e2d5 61 | 62 | # yellow 63 | color3 #F9E2AF 64 | color11 #F9E2AF 65 | 66 | # blue 67 | color4 #b4befe 68 | color12 #b4befe 69 | 70 | # magenta 71 | color5 #F5C2E7 72 | color13 #F5C2E7 73 | 74 | # cyan 75 | color6 #89dceb 76 | color14 #89dceb 77 | 78 | # white 79 | color7 #BAC2DE 80 | color15 #A6ADC8 81 | -------------------------------------------------------------------------------- /user/pkgs/kitty/themes/yang.conf: -------------------------------------------------------------------------------- 1 | # vim:ft=kitty 2 | 3 | ## name: Kanagawa_dragon 4 | ## license: MIT 5 | ## author: Tommaso Laurenzi 6 | ## upstream: https://github.com/rebelot/kanagawa.nvim/ 7 | ## blurb: NeoVim dark colorscheme inspired by the colors of the famous painting 8 | ## by Katsushika Hokusai. Dragon version. 9 | 10 | #: The basic colors 11 | 12 | foreground #e0e0e0 13 | background #202020 14 | selection_foreground #c8c093 15 | selection_background #2d4f67 16 | 17 | #: Cursor colors 18 | 19 | cursor #f0f0f0 20 | 21 | #: URL underline color when overing with mouse 22 | 23 | url_color #72a7bc 24 | 25 | #: Tab bar colors 26 | 27 | active_tab_foreground #c8c093 28 | active_tab_background #12120f 29 | inactive_tab_foreground #a6a69c 30 | inactive_tab_background #12120f 31 | 32 | #: The basic 16 colors 33 | 34 | #: black 35 | color0 #0d0c0c 36 | color8 #a6a69c 37 | 38 | #: red 39 | color1 #c4746e 40 | color9 #e46876 41 | 42 | #: green 43 | color2 #8a9a7b 44 | color10 #87a987 45 | 46 | #: yellow 47 | color3 #c4b28a 48 | color11 #e6c384 49 | 50 | #: blue 51 | color4 #8ba4b0 52 | color12 #7fb4ca 53 | 54 | #: magenta 55 | color5 #a292a3 56 | color13 #938aa9 57 | 58 | #: cyan 59 | color6 #8ea4a2 60 | color14 #7aa89f 61 | 62 | #: white 63 | color7 #c5c9c5 64 | color15 #d6d6d6 65 | 66 | 67 | #: You can set the remaining 240 colors as color16 to color255. 68 | 69 | color16 #b6927b 70 | color17 #b98d7b 71 | -------------------------------------------------------------------------------- /user/pkgs/kitty/themes/yin.conf: -------------------------------------------------------------------------------- 1 | # vim:ft=kitty 2 | 3 | ## name: Leaf Light 4 | ## author: qewer33, brought to kitty by KodiakWeb 5 | ## license: GPLv3 6 | ## upstream: 7 | ## blurb: A green accent, forest colored light theme, adapted from leaf kde 8 | 9 | #: All the settings below are colors, which you can choose to modify, or use the 10 | #: defaults. You can also add non-color based settings if needed but note that 11 | #: these will not work with using kitty @ set-colors with this theme. For a 12 | #: reference on what these settings do see https://sw.kovidgoyal.net/kitty/conf/ 13 | 14 | #: The basic colors 15 | 16 | foreground #2e2c2f 17 | # background #e1e4dc 18 | background #c8c8c8 19 | selection_foreground #000000 20 | selection_background #fffacd 21 | 22 | 23 | #: Cursor colors 24 | 25 | cursor #303030 26 | cursor_text_color #e1e4dc 27 | 28 | 29 | #: URL underline color when hovering with mouse 30 | 31 | #url_color #2e2c2f 32 | 33 | 34 | #: kitty window border colors and terminal bell colors 35 | 36 | # active_border_color #00ff00 37 | # inactive_border_color #cccccc 38 | # bell_border_color #ff5a00 39 | # visual_bell_color none 40 | 41 | 42 | #: OS Window titlebar colors 43 | 44 | # wayland_titlebar_color system 45 | # macos_titlebar_color system 46 | 47 | 48 | #: Tab bar colors 49 | 50 | active_tab_foreground #2e2c2f 51 | active_tab_background #729B79 52 | inactive_tab_foreground #2e2c2f 53 | inactive_tab_background #b1b3ad 54 | # tab_bar_background none 55 | # tab_bar_margin_color none 56 | 57 | 58 | #: Colors for marks (marked text in the terminal) 59 | 60 | # mark1_foreground black 61 | # mark1_background #98d3cb 62 | # mark2_foreground black 63 | # mark2_background #f2dcd3 64 | # mark3_foreground black 65 | # mark3_background #f274bc 66 | 67 | 68 | #: The basic 16 colors 69 | 70 | #: black 71 | color0 #2e2c2f 72 | color8 #403f42 73 | 74 | #: red 75 | color1 #BA5860 76 | color9 #9d4b53 77 | 78 | #: green 79 | color2 #729B79 80 | color10 #59795f 81 | 82 | #: yellow 83 | color3 #CCAA6C 84 | color11 #a78a58 85 | 86 | #: blue 87 | color4 #5292C6 88 | color12 #40739a 89 | 90 | #: magenta 91 | color5 #8C6AA8 92 | color13 #715688 93 | 94 | #: cyan 95 | color6 #489CA5 96 | color14 #3b8187 97 | 98 | #: white 99 | color7 #e1e4dc 100 | color15 #b1b3ad 101 | 102 | 103 | #: You can set the remaining 240 colors as color16 to color255. 104 | -------------------------------------------------------------------------------- /user/pkgs/lazygit.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ lazygit ]; 4 | programs.lazygit = { 5 | enable = true; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /user/pkgs/music/cava.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, userSettings, ... }: 2 | let 3 | themes = { 4 | yin = { 5 | background = "#DEDEDE"; 6 | foreground = "#000000"; 7 | }; 8 | yang = { 9 | background = "#222222"; 10 | foreground = "#fefefe"; 11 | }; 12 | burst = { 13 | background = "#17171f"; 14 | foreground = "#BB9AF7"; 15 | }; 16 | shards = { 17 | background = "#101017"; 18 | foreground = "#caafbe"; 19 | }; 20 | }; 21 | 22 | currentTheme = themes.${userSettings.theme}; 23 | in 24 | { 25 | home.packages = with pkgs; [ 26 | cava 27 | ]; 28 | programs.cava = { 29 | enable = true; 30 | settings = { 31 | input.method = "fifo"; 32 | color = { 33 | background = "'${currentTheme.background}'"; 34 | foreground = "'${currentTheme.foreground}'"; 35 | }; 36 | }; 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /user/pkgs/music/custom_player/README.md: -------------------------------------------------------------------------------- 1 | # Custom Music Player 2 | 3 | This directory contains the necessary files to load up my custom music player made within AGS. 4 | 5 | Credits to the original creator [qxb3](https://github.com/qxb3) from which I grabbed the initial framework and ported over to work with MPD. 6 | 7 | The player is also configured to match the current system theme. and can have more themes added in the future by addign a custom css file to `themes/`. 8 | 9 | [!TIP] 10 | > Reference the existing css files to understand the slectors used in the player. 11 | -------------------------------------------------------------------------------- /user/pkgs/music/custom_player/config.js: -------------------------------------------------------------------------------- 1 | import GLib from 'gi://GLib' 2 | import Music from './windows/music/Music.js' 3 | 4 | const currentTheme = GLib.getenv('SYSTEM_THEME') 5 | const cssFile = App.configDir + '/themes/' + currentTheme + '.css' 6 | 7 | Music.set_resizable(false); 8 | Music.show_all() 9 | Music.connect('destroy', () => App.quit()) 10 | 11 | App.config({ 12 | style: cssFile 13 | }) 14 | -------------------------------------------------------------------------------- /user/pkgs/music/custom_player/themes/burst.css: -------------------------------------------------------------------------------- 1 | * { 2 | all: unset; 3 | font-family: "JetBrains Mono"; 4 | font-weight: 900; 5 | color: #DeDeDe; 6 | } 7 | 8 | .music { 9 | background-color: #17171c; 10 | padding: 1rem; 11 | } 12 | 13 | .music .thumbnail { 14 | background-size: cover; 15 | background-position: center; 16 | min-width: 150px; 17 | min-height: 300px; 18 | } 19 | 20 | .music .meta .name { 21 | font-size: 16px; 22 | } 23 | 24 | .music .controls .control { 25 | border-radius: 8px; 26 | font-size: 24px; 27 | padding: 0 8px; 28 | } 29 | 30 | .music .controls .center_controls { 31 | margin-right: 0px; 32 | } 33 | -------------------------------------------------------------------------------- /user/pkgs/music/custom_player/themes/shards.css: -------------------------------------------------------------------------------- 1 | * { 2 | all: unset; 3 | font-family: "JetBrains Mono"; 4 | font-weight: 900; 5 | color: #DeDeDe; 6 | } 7 | 8 | .music { 9 | background-color: #151521; 10 | padding: 1rem; 11 | } 12 | 13 | .music .thumbnail { 14 | background-size: cover; 15 | background-position: center; 16 | min-width: 150px; 17 | min-height: 300px; 18 | } 19 | 20 | .music .meta .name { 21 | font-size: 16px; 22 | } 23 | 24 | .music .controls .control { 25 | border-radius: 8px; 26 | font-size: 24px; 27 | padding: 0 8px; 28 | } 29 | 30 | .music .controls .center_controls { 31 | margin-right: 0px; 32 | } 33 | -------------------------------------------------------------------------------- /user/pkgs/music/custom_player/themes/yang.css: -------------------------------------------------------------------------------- 1 | * { 2 | all: unset; 3 | font-family: "JetBrains Mono"; 4 | font-weight: 900; 5 | color: #DeDeDe; 6 | } 7 | 8 | .music { 9 | background-color: #212121; 10 | padding: 1rem; 11 | } 12 | 13 | .music .thumbnail { 14 | background-size: cover; 15 | background-position: center; 16 | min-width: 150px; 17 | min-height: 300px; 18 | } 19 | 20 | .music .meta .name { 21 | font-size: 16px; 22 | } 23 | 24 | .music .controls .control { 25 | border-radius: 8px; 26 | font-size: 24px; 27 | padding: 0 8px; 28 | } 29 | 30 | .music .controls .center_controls { 31 | margin-right: 0px; 32 | } 33 | -------------------------------------------------------------------------------- /user/pkgs/music/custom_player/themes/yin.css: -------------------------------------------------------------------------------- 1 | * { 2 | all: unset; 3 | font-family: "JetBrains Mono"; 4 | font-weight: 900; 5 | color: #212121; 6 | } 7 | 8 | .music { 9 | background-color: #DEDEDE; 10 | padding: 1rem; 11 | } 12 | 13 | .music .thumbnail { 14 | background-size: cover; 15 | background-position: center; 16 | min-width: 150px; 17 | min-height: 300px; 18 | } 19 | 20 | .music .meta .name { 21 | font-size: 16px; 22 | } 23 | 24 | .music .controls .control { 25 | border-radius: 8px; 26 | font-size: 24px; 27 | padding: 0 8px; 28 | } 29 | 30 | .music .controls .center_controls { 31 | margin-right: 0px; 32 | } 33 | -------------------------------------------------------------------------------- /user/pkgs/music/custom_player/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "module": "ES2022", 5 | "lib": [ 6 | "ES2022" 7 | ], 8 | "allowJs": true, 9 | "checkJs": true, 10 | "strict": true, 11 | "noImplicitAny": false, 12 | "baseUrl": ".", 13 | "typeRoots": [ 14 | "./types", 15 | ], 16 | "skipLibCheck": true 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /user/pkgs/music/custom_player/windows/music/Music.js: -------------------------------------------------------------------------------- 1 | import Gtk from "gi://Gtk"; 2 | 3 | import { 4 | musicShuffle, 5 | musicStatus, 6 | musicThumbnailUrl, 7 | musicTitle, 8 | next, 9 | prev, 10 | shuffle, 11 | // musicPlayer, 12 | toggle, 13 | } from "../../shared/music.js"; 14 | 15 | function Thumbnail() { 16 | return Widget.Box({ 17 | className: "thumbnail", 18 | css: musicThumbnailUrl 19 | .bind() 20 | .transform((thumbnail) => `background-image: url("${thumbnail}");`), 21 | }); 22 | } 23 | 24 | function MusicMeta() { 25 | const MusicName = Widget.Label({ 26 | className: "name", 27 | label: musicTitle.bind(), 28 | justification: "center", 29 | maxWidthChars: 20, 30 | truncate: "end", 31 | wrap: true, 32 | }); 33 | 34 | return Widget.Box({ 35 | className: "meta", 36 | hexpand: true, 37 | hpack: "center", 38 | children: [MusicName], 39 | }); 40 | } 41 | 42 | function MusicControls() { 43 | const PrevButton = Widget.Button({ 44 | className: "prev_button control", 45 | onPrimaryClick: () => prev(), 46 | child: Widget.Label("󰒮"), 47 | }); 48 | 49 | const PlayButton = Widget.Button({ 50 | className: "play_button control", 51 | onPrimaryClick: () => toggle(), 52 | child: Widget.Label().hook(musicStatus, (self) => { 53 | if (musicStatus.value === "Stopped") self.label = "󰓛"; 54 | if (musicStatus.value === "Playing") self.label = "󰏤"; 55 | if (musicStatus.value === "Paused") self.label = "󰐊"; 56 | }), 57 | }); 58 | 59 | const NextButton = Widget.Button({ 60 | className: "next_button control", 61 | onPrimaryClick: () => next(), 62 | child: Widget.Label("󰒭"), 63 | }); 64 | 65 | const ShuffleButton = Widget.Button({ 66 | className: "shuffle_button control", 67 | onPrimaryClick: () => shuffle(), 68 | child: Widget.Label().hook(musicShuffle, (self) => { 69 | if (musicShuffle.value) self.label = "󰒟"; 70 | if (!musicShuffle.value) self.label = "󰒞"; 71 | }), 72 | }); 73 | 74 | const detailsButton = Widget.Button({ 75 | className: "details_button control", 76 | child: Widget.Label("󰎇"), 77 | }); 78 | 79 | return Widget.Box({ 80 | className: "controls", 81 | hpack: "fill", 82 | vpack: "end", 83 | vexpand: true, 84 | spacing: 16, 85 | children: [ 86 | Widget.Box({ 87 | className: "left_controls", 88 | children: [ShuffleButton], 89 | hexpand: true, 90 | }), 91 | Widget.Box({ 92 | className: "center_controls", 93 | children: [PrevButton, PlayButton, NextButton], 94 | hexpand: true, 95 | hpack: "center", 96 | spacing: 16, 97 | }), 98 | Widget.Box({ 99 | className: "right_controls", 100 | children: [detailsButton], 101 | hexpand: true, 102 | hpack: "end", 103 | }), 104 | ], 105 | }); 106 | } 107 | 108 | function Music() { 109 | return Widget.Box({ 110 | className: "music", 111 | vertical: true, 112 | spacing: 10, 113 | children: [Thumbnail(), MusicMeta(), MusicControls()], 114 | }); 115 | } 116 | 117 | export default new Gtk.Window({ 118 | title: "Music Player", 119 | default_width: 325, 120 | default_height: 425, 121 | child: Music(), 122 | }); 123 | -------------------------------------------------------------------------------- /user/pkgs/music/mpd/mpd.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, userSettings, systemSettings, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | mpd 5 | mpc-cli 6 | ]; 7 | services.mpd = { 8 | enable = true; 9 | musicDirectory = "/home/${userSettings.username}/Music"; 10 | # user = "${userSettings.username}"; 11 | extraConfig = '' 12 | audio_output { 13 | type "pipewire" 14 | name "PipeWire Output" 15 | } 16 | 17 | audio_output { 18 | type "fifo" 19 | name "my_fifo" 20 | path "/tmp/mpd.fifo" 21 | format "44100:16:2" 22 | } 23 | ''; 24 | network.startWhenNeeded = true; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /user/pkgs/music/mpd/mpdris.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, userSettings, ... }: 2 | { 3 | home.packages = with pkgs; [ 4 | mpdris2 5 | mpd-mpris 6 | ]; 7 | services.mpdris2 = { 8 | enable = true; 9 | notifications = false; 10 | mpd.musicDirectory = "/home/${userSettings.username}/Music"; 11 | }; 12 | services.mpd-mpris = { 13 | enable = true; 14 | mpd.useLocal = true; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /user/pkgs/obsidian/default.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | home.packages = with pkgs; [ obsidian ]; 4 | } 5 | -------------------------------------------------------------------------------- /user/pkgs/obsidian/themes/burst.json: -------------------------------------------------------------------------------- 1 | { 2 | "anuppuccin-theme-settings@@anuppuccin-theme-accents": "ctp-accent-blue", 3 | "anuppuccin-theme-settings@@anuppuccin-theme-dark": "ctp-mocha", 4 | "anuppuccin-theme-settings@@anp-color-transition-toggle": true, 5 | "anuppuccin-theme-settings@@anp-header-color-toggle": true, 6 | "anuppuccin-theme-settings@@anp-header-margin-toggle": false, 7 | "anuppuccin-theme-settings@@anp-header-divider-color-toggle": true, 8 | "anuppuccin-theme-settings@@anp-decoration-toggle": true, 9 | "anuppuccin-theme-settings@@anp-canvas-dark-bg": true, 10 | "anuppuccin-theme-settings@@anp-file-icons": true, 11 | "anuppuccin-theme-settings@@anp-floating-header": false, 12 | "anuppuccin-theme-settings@@anp-pdf-blend-toggle-dark": true, 13 | "anuppuccin-theme-settings@@anp-alt-rainbow-style": "anp-default-rainbow", 14 | "anuppuccin-theme-settings@@anp-rainbow-file-toggle": false, 15 | "anuppuccin-theme-settings@@anp-full-rainbow-text-color-toggle-light": false, 16 | "anuppuccin-theme-settings@@anp-full-rainbow-text-color-toggle-dark": false, 17 | "anuppuccin-theme-settings@@anp-simple-rainbow-title-toggle": true, 18 | "anuppuccin-theme-settings@@anp-simple-rainbow-collapse-icon-toggle": false, 19 | "anuppuccin-theme-settings@@anp-simple-rainbow-indentation-toggle": false, 20 | "anuppuccin-theme-settings@@anp-simple-rainbow-icon-toggle": false, 21 | "anuppuccin-theme-settings@@anp-rainbow-subfolder-color-toggle": true, 22 | "anuppuccin-theme-settings@@anp-status-bar-select": "none", 23 | "anuppuccin-theme-settings@@anp-alt-tab-style": "anp-mini-tab-toggle", 24 | "anuppuccin-theme-settings@@anp-layout-select": "anp-card-layout", 25 | "anuppuccin-theme-settings@@anp-bg-fix": false, 26 | "anuppuccin-theme-settings@@anp-hide-borders": false, 27 | "anuppuccin-theme-settings@@anp-card-shadows": true, 28 | "anuppuccin-theme-settings@@anp-card-layout-actions": false, 29 | "anuppuccin-theme-settings@@anp-card-layout-filebrowser": true, 30 | "anuppuccin-theme-settings@@anp-table-toggle": false, 31 | "anuppuccin-theme-settings@@anp-h1-divider": true, 32 | "anuppuccin-theme-settings@@anp-h2-divider": true, 33 | "anuppuccin-theme-settings@@anp-h3-color-custom": "anp-h3-pink", 34 | "anuppuccin-theme-settings@@anp-toggle-scrollbars": true, 35 | "anuppuccin-theme-settings@@anp-hide-status-bar": false, 36 | "anuppuccin-theme-settings@@anp-tooltip-toggle": false, 37 | "anuppuccin-theme-settings@@anp-italic-custom": "anp-italic-blue", 38 | "anuppuccin-theme-settings@@anuppuccin-theme-light": "ctp-latte", 39 | "anuppuccin-theme-settings@@anuppuccin-light-theme-accents": "ctp-accent-light-teal", 40 | "anuppuccin-theme-settings@@ctp-custom-base@@light": "#D7D7D7", 41 | "anuppuccin-theme-settings@@ctp-custom-mantle@@light": "#C8C8C8", 42 | "anuppuccin-theme-settings@@ctp-custom-crust@@light": "#C2C2C2", 43 | "minimal-advanced@@styled-scrollbars": false, 44 | "minimal-style@@h1-l": true, 45 | "minimal-style@@h1-size": "1.75em", 46 | "minimal-style@@h2-size": "1.5em", 47 | "minimal-style@@h2-l": true, 48 | "minimal-style@@h3-size": "1.25em", 49 | "minimal-style@@h4-size": "1.125em", 50 | "minimal-style@@h5-size": "1.0em", 51 | "minimal-style@@h6-size": "0.95em", 52 | "minimal-style@@bg1@@light": "#D7D7D7", 53 | "minimal-style@@bg2@@light": "#DFDFDF", 54 | "anuppuccin-theme-settings@@anp-colorful-frame": false, 55 | "anuppuccin-theme-settings@@anp-colorful-frame-icon-toggle-dark": false, 56 | "anuppuccin-theme-settings@@ctp-custom-base@@dark": "#17171F", 57 | "anuppuccin-theme-settings@@ctp-custom-mantle@@dark": "#15151D", 58 | "anuppuccin-theme-settings@@ctp-custom-crust@@dark": "#15151D" 59 | } -------------------------------------------------------------------------------- /user/pkgs/packet-tracer.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | # INFO: You'll need to download the Ubuntu version of the Packet Tracer binaries; 3 | # However, after downloading, you'll need to rename the package to CiscoPacketTracer822_amd64_signed.deb before adding this to the nix-path using: 4 | # `nix-prefetch-url --type sha256 file:///full/path/to/binaries` 5 | 6 | # WARN: If you are on wayland, this looks like shit but is fully functional. Haven't found a way to make it look nice on wayland yet 7 | { 8 | home.packages = with pkgs; [ ciscoPacketTracer8 ]; 9 | } 10 | -------------------------------------------------------------------------------- /user/pkgs/zathura.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, userSettings, ... }: 2 | let 3 | themes = { 4 | yin = { 5 | lightcolor = "#D7D7D7"; 6 | darkcolor = "#000000"; 7 | }; 8 | yang = { 9 | lightcolor = "#222222"; 10 | darkcolor = "#e7e7e7"; 11 | }; 12 | burst = { 13 | lightcolor = "#17171f"; 14 | darkcolor = "#d8d6eb"; 15 | }; 16 | shards = { 17 | lightcolor = "#101017"; 18 | darkcolor = "#d8d6eb"; 19 | }; 20 | }; 21 | 22 | currentTheme = themes.${userSettings.theme}; 23 | in 24 | { 25 | home.packages = with pkgs; [ 26 | zathura 27 | ]; 28 | 29 | programs.zathura = { 30 | enable = true; 31 | options = { }; 32 | extraConfig = '' 33 | set recolor "true" 34 | set recolor-lightcolor "${currentTheme.lightcolor}" 35 | set recolor-darkcolor "${currentTheme.darkcolor}" 36 | ''; 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /user/shell/README.md: -------------------------------------------------------------------------------- 1 | # Shell 2 | 3 | This directory contains all configurations of the shell/terminal environments. This includes shell configurations (i.e. zsh, bash, etc.) different CLI packages, shell prompts and more. 4 | 5 | # Zsh 6 | 7 | My base zsh config comes with some QoL features and ergonomic aliases. 8 | 9 | ## Aliases 10 | 11 | - **`update`**: sudo nixos rebuild switch --flake ~/dots#main 12 | - **`hm-update`**: home-manager switch --flake ~/dots; ~/dots/scripts/theme-switch.sh 13 | - **`update-full`**: update && hm-update 14 | 15 | - **`c`**: clear 16 | - **`ff`**: fastfetch 17 | - **`v`**: nvim 18 | - **`wifi`**: nmtui 19 | - **`shutdown`**: systemctl poweroff 20 | 21 | - **`ls`**: eza -a --icons 22 | - **`ll`**: eza -al --icons 23 | - **`lt`**: eza -a --tree --level=1 --icons 24 | 25 | - **`gs`**: git status 26 | - **`ga`**: git add 27 | - **`gc`**: git commit -m 28 | - **`gp`**: git push 29 | - **`gpl`**: git pull 30 | - **`gst`**: git stash 31 | - **`gsp`**: git stash; git pull 32 | - **`gcheck`**: git checkout 33 | - **`gcredential`**: git config credential.helper store 34 | - **`gg`**: lazygit 35 | 36 | ## Prompt 37 | 38 | My prompt is configured with starship and prebuilt configs can be found in the [starship directory](./starship/) 39 | 40 | ## Features 41 | 42 | The shell features fzf lookup of command history (default binding is ) and fastfetch on startup for the *aesthetics*. I have also modified the fastfetch config using custom scripts to display a server like MOTD and make it overall more useful. 43 | -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/default.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | programs.fastfetch = { 4 | enable = true; 5 | settings = { 6 | logo = { 7 | type = "none"; 8 | }; 9 | display = { 10 | separator = " "; 11 | }; 12 | modules = [ 13 | { 14 | type = "command"; 15 | key = " "; 16 | text = "hostname | figlet -f slant"; 17 | } 18 | { 19 | format = "OS:"; 20 | type = "custom"; 21 | } 22 | { 23 | key = "{#34} {icon} Distro {#keys}"; 24 | type = "os"; 25 | } 26 | { 27 | type = "command"; 28 | key = "  Age "; 29 | keyColor = "magenta"; 30 | text = "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"; 31 | } 32 | { 33 | key = "{#33}  Uptime {#keys}"; 34 | type = "uptime"; 35 | } 36 | { 37 | type = "custom"; 38 | format = " "; 39 | } 40 | { 41 | type = "custom"; 42 | format = "Services:"; 43 | } 44 | { 45 | type = "command"; 46 | key = " "; 47 | text = "sh ~/dots/user/shell/cli/fastfetch/scripts/services.sh"; 48 | } 49 | { 50 | type = "custom"; 51 | format = " "; 52 | } 53 | { 54 | type = "custom"; 55 | format = "Disk:"; 56 | } 57 | { 58 | type = "command"; 59 | key = " "; 60 | text = "sh ~/dots/user/shell/cli/fastfetch/scripts/disk.sh"; 61 | } 62 | { 63 | type = "custom"; 64 | format = " "; 65 | } 66 | { 67 | type = "custom"; 68 | format = "Memory:"; 69 | } 70 | { 71 | type = "command"; 72 | key = " "; 73 | text = "sh ~/dots/user/shell/cli/fastfetch/scripts/ram.sh"; 74 | } 75 | { 76 | type = "custom"; 77 | format = " "; 78 | } 79 | { 80 | type = "custom"; 81 | format = "Fail2Ban:"; 82 | } 83 | { 84 | type = "command"; 85 | key = " "; 86 | text = "sudo ~/dots/user/shell/cli/fastfetch/scripts/fail2ban.sh"; 87 | } 88 | { 89 | type = "custom"; 90 | format = " "; 91 | } 92 | { 93 | type = "custom"; 94 | format = "Docker:"; 95 | # key = "󰡨 Docker"; 96 | # keyColor = "blue"; 97 | } 98 | { 99 | type = "command"; 100 | key = " "; 101 | text = "sudo ~/dots/user/shell/cli/fastfetch/scripts/docker.sh ollama"; 102 | } 103 | ]; 104 | }; 105 | }; 106 | } 107 | -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/goku.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | 3 | { 4 | 5 | programs.fastfetch = { 6 | enable = true; 7 | settings = { 8 | logo = { 9 | type = "auto"; 10 | source = "~/dots/user/shell/cli/fastfetch/goku_ascii.txt"; 11 | height = 15; 12 | padding = { 13 | bottom = 2; 14 | }; 15 | }; 16 | display = { 17 | separator = " "; 18 | }; 19 | modules = [ 20 | { 21 | format = "┌──────────────────────────── Hardware ─────────────────────────────────┐"; 22 | type = "custom"; 23 | } 24 | { 25 | key = " {#33} 󰍛 cpu {#keys}"; 26 | type = "cpu"; 27 | showPeCoreCount = true; 28 | } 29 | { 30 | key = " {#34} 󰉉 disk {#keys}"; 31 | type = "disk"; 32 | folders = "/"; 33 | } 34 | { 35 | key = " {#35}  memory {#keys}"; 36 | type = "memory"; 37 | } 38 | { 39 | key = " {#36} 󰩟 network {#keys}"; 40 | type = "localip"; 41 | format = "{ipv4} ({ifname})"; 42 | } 43 | { 44 | format = "└───────────────────────────────────────────────────────────────────────┘"; 45 | type = "custom"; 46 | } 47 | { 48 | format = " "; 49 | type = "custom"; 50 | } 51 | { 52 | format = "┌──────────────────────────── Software ─────────────────────────────────┐"; 53 | type = "custom"; 54 | } 55 | { 56 | key = " {#34} {icon} distro {#keys}"; 57 | type = "os"; 58 | } 59 | { 60 | key = " {#35}  kernel {#keys}"; 61 | type = "kernel"; 62 | } 63 | { 64 | key = " {#36} 󰇄 desktop {#keys}"; 65 | type = "de"; 66 | } 67 | { 68 | key = " {#31}  term {#keys}"; 69 | type = "terminal"; 70 | } 71 | { 72 | key = " {#32}  shell {#keys}"; 73 | type = "shell"; 74 | } 75 | { 76 | format = "└───────────────────────────────────────────────────────────────────────┘"; 77 | type = "custom"; 78 | } 79 | { 80 | format = " "; 81 | type = "custom"; 82 | } 83 | { 84 | format = "┌───────────────────────────── Uptime ──────────────────────────────────┐"; 85 | type = "custom"; 86 | } 87 | { 88 | key = " {#33} 󰅐 uptime {#keys}"; 89 | type = "uptime"; 90 | } 91 | { 92 | type = "command"; 93 | key = "  age "; 94 | keyColor = "magenta"; 95 | text = "birth_install=$(stat -c %W /); current=$(date +%s); time_progression=$((current - birth_install)); days_difference=$((time_progression / 86400)); echo $days_difference days"; 96 | } 97 | { 98 | format = "└───────────────────────────────────────────────────────────────────────┘"; 99 | type = "custom"; 100 | } 101 | { 102 | key = " {#39} colors {#keys}"; 103 | type = "colors"; 104 | symbol = "circle"; 105 | } 106 | ]; 107 | }; 108 | }; 109 | 110 | } 111 | -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/logos/goku.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/user/shell/cli/fastfetch/logos/goku.png -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/logos/goku_ascii.txt: -------------------------------------------------------------------------------- 1 | 2 | ⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣴⣶⣶⣶⣶⣆⢰⣦⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀ 3 | ⠀⠀⠀⠀⠀⢀⣠⣶⣿⣿⣿⣿⣿⡿⢿⣿⣿⠀⣿⣿⣿⣿⣶⣄⡀⠀⠀⠀⠀⠀ 4 | ⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⠃⠀⣿⠿⠛⠀⠻⢿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀ 5 | ⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⡟⠀⠀⠃⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀ 6 | ⠀⢠⣿⣿⣿⣿⣿⣿⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⢛⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠀ 7 | ⠀⣾⣿⣿⣿⣿⣿⠿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢹⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀ 8 | ⢸⣿⣿⣿⣿⣛⡉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⡆⢠⡈⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ 9 | ⢸⣿⣿⣿⣿⣟⣉⣁⠀⠀⠀⠀⠀⠀⠀⠀⣻⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ 10 | ⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠇⠀⠀⣠⣴⣿⣿⠈⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇ 11 | ⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠙⣿⣿⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇ 12 | ⠀⢿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡀⠀⠀⠀⠀⠈⠁⠀⢨⣿⣿⣿⣿⣿⣿⣿⣿⡿⠀ 13 | ⠀⠈⢿⣿⣿⣿⣿⣿⠿⢿⣿⡇⠀⠀⠀⠀⠀⣤⠀⢸⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀ 14 | ⠀⠀⠈⢿⣿⣿⣿⠁⣴⣾⡿⠁⠀⠀⠀⠀⠀⠘⡇⢸⣿⣿⣿⣿⣿⣿⡟⠁⠀⠀ 15 | ⠀⠀⠀⠀⠙⢿⣿⡀⠿⣿⡧⠀⠀⠀⠀⠀⠀⢠⡄⢸⣿⣿⣿⣿⡿⠋⠀⠀⠀⠀ 16 | ⠀⠀⠀⠀⠀⠀⠙⠻⢶⣤⣤⣾⠀⠀⠀⠀⢠⣼⡇⢸⣿⡿⠟⠋⠀⠀⠀⠀⠀⠀ 17 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠃⠀⠀⠀⠠⠿⠟⠃⠈⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀ 18 | -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/logos/naruto_ascii.txt: -------------------------------------------------------------------------------- 1 | ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⣤⣤⣤⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀ 2 | ⠀⠀⠀⠀⠀⠀⢀⣠⣶⣿⣿⡿⠿⠿⠿⠿⢿⣿⣿⣷⣦⣄⣀⣤⣶⣶ 3 | ⠀⠀⠀⠀⠀⣰⣿⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⠟⠋ 4 | ⠀⠀⠀⠀⣼⣿⡿⠃⠀⢀⣤⣾⣿⣿⣿⣿⣷⣦⣄⠀⠀⠈⠉⠀⠀⠀ 5 | ⠀⠀⠀⣸⣿⡿⠁⠀⢠⣿⣿⠟⠉⠀⠈⠉⠛⢿⣿⣷⡄⠀⠀⠀⠀⠀ 6 | ⠀⠀⢀⣿⣿⡇⠀⠀⣾⣿⡟⠀⠀⢀⣤⣄⠀⠀⠹⣿⣿⡄⠀⠀⠀⠀ 7 | ⠀⠀⣾⣿⣿⡇⠀⠀⢻⣿⣷⡀⠀⠘⣿⣿⡇⠀⠀⣿⣿⡇⠀⠀⠀⠀ 8 | ⠀⣼⣿⡿⣿⣿⡄⠀⠈⠻⣿⣿⣷⣿⣿⡿⠃⠀⢀⣿⣿⡇⠀⠀⠀⠀ 9 | ⣰⣿⣿⠁⠹⣿⣿⣦⡀⠀⠈⠉⠛⠋⠉⠀⠀⣠⣾⣿⡟⠀⠀⠀⠀⠀ 10 | ⣿⣿⣧⣤⣤⣬⣿⣿⣿⣶⣦⣤⣤⣤⣴⣶⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀ 11 | ⠙⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠿⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀ 12 | -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/scripts/disk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Get disk usage statistics for the root partition 4 | disk_stats=$(df -h / | awk 'NR==2 {print $3, $2, $5}') 5 | 6 | # Parse the output into variables 7 | used=$(echo "$disk_stats" | awk '{print $1}') 8 | total=$(echo "$disk_stats" | awk '{print $2}') 9 | percent=$(echo "$disk_stats" | awk '{print $3}' | tr -d '%') 10 | 11 | # Define the maximum length of the progress bar 12 | bar_length=50 13 | 14 | # Calculate the number of characters to fill 15 | filled_length=$(( percent * bar_length / 100 )) 16 | 17 | filled_bar=$(printf "%0.s─" $(seq 1 $filled_length)) 18 | empty_bar=$(printf "%0.s─" $(seq 1 $((bar_length - filled_length)))) 19 | 20 | # Define colors 21 | GREEN=$(tput setaf 2) # Green 22 | BLACK=$(tput setaf 0) # Black (or dark gray) 23 | RESET=$(tput sgr0) 24 | 25 | # Calculate padding to align the percentage 26 | used_free_length=$(( ${#used} + ${#total} + 1 )) # Combined length of "used/total" 27 | padding=$(( bar_length - used_free_length - ${#percent} - 8 )) # 2 for spaces 28 | 29 | # Output the result 30 | printf "%s/%s %${padding}s%s\n" " / $used" "$total" "" "${percent}%" 31 | echo " ${GREEN}$filled_bar${BLACK}$empty_bar${RESET}" 32 | -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/scripts/docker.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if ! command -v docker &> /dev/null; then 4 | echo "Error: Docker not found." 5 | exit 1 6 | fi 7 | 8 | format_ports() { 9 | ports_json=$1 10 | echo "$ports_json" | jq -r ' 11 | to_entries[] | 12 | "\(.key) -> \(.value[0].HostIp):\(.value[0].HostPort)" 13 | ' 14 | } 15 | 16 | get_container_info() { 17 | container_name=$1 18 | container_id=$(docker inspect --format '{{.ID}}' "$container_name" 2>/dev/null) 19 | if [ -z "$container_id" ]; then 20 | echo "Container '$container_name' not found." 21 | return 1 22 | fi 23 | 24 | info=$(docker inspect --format="{{json .}}" "$container_name") 25 | status=$(echo "$info" | jq -r '.State.Status') 26 | ports_json=$(echo "$info" | jq -r '.NetworkSettings.Ports') 27 | ports=$(format_ports "$ports_json") 28 | } 29 | 30 | get_status_symbol() { 31 | status=$1 32 | if [ "$status" = "running" ]; then 33 | echo -e "\033[32m●\033[0m" 34 | elif [ "$status" = "paused" ]; then 35 | echo -e "\033[33m\033[0m" 36 | elif [ "$status" = "exited" ]; then 37 | echo -e "\033[31m\033[0m" 38 | else 39 | echo -e "\033[34m?  $1\033[0m" 40 | fi 41 | } 42 | 43 | main() { 44 | if [ $# -eq 0 ]; then 45 | echo "Error: No container name provided." 46 | exit 1 47 | fi 48 | 49 | echo " | Name | Status | Ports |" 50 | echo " ───────────────────────────────────" 51 | for container_name in "$@"; do 52 | get_container_info "$container_name" || continue 53 | echo -e " \033[1m$container_name\033[0m\t $(get_status_symbol "$status")\t \033[3;35m$ports\033[0m" 54 | done 55 | } 56 | 57 | main "$@" 58 | -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/scripts/fail2ban.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # # fail2ban-client status to get all jails, takes about ~70ms 4 | # jails=($(sudo fail2ban-client status | grep "Jail list:" | sed "s/ //g" | awk '{split($2,a,",");for(i in a) print a[i]}')) 5 | # 6 | # out="jail,failed,total,banned,total,banned_ips\n" 7 | # 8 | # for jail in ${jails[@]}; do 9 | # # slow because fail2ban-client has to be called for every jail (~70ms per jail) 10 | # status=$(sudo fail2ban-client status ${jail}) 11 | # failed=$(echo "$status" | grep -ioP '(?<=Currently failed:\t)[[:digit:]]+') 12 | # totalfailed=$(echo "$status" | grep -ioP '(?<=Total failed:\t)[[:digit:]]+') 13 | # banned=$(echo "$status" | grep -ioP '(?<=Currently banned:\t)[[:digit:]]+') 14 | # totalbanned=$(echo "$status" | grep -ioP '(?<=Total banned:\t)[[:digit:]]+') 15 | # 16 | # # Get the banned IPs for the current jail 17 | # banned_ips=$(sudo fail2ban-client status ${jail} | grep -i "Banned IP list:" | sed 's/Banned IP list://g' | sed 's/^[[:space:]]*//g' | sed 's/[[:space:]]*$//g') 18 | # 19 | # # If the banned IPs list contains only the "-" or is empty, set it to "N/A" 20 | # if [[ "$banned_ips" == "\`-" || -z "$banned_ips" ]]; then 21 | # banned_ips="N/A" 22 | # fi 23 | # 24 | # # Append the results for this jail to the output variable 25 | # out+="$jail,$failed,$totalfailed,$banned,$totalbanned,\"$banned_ips\"\n" 26 | # done 27 | # 28 | # # Print the output in a well-organized format 29 | # printf "$out" | column -ts $',' | sed -e 's/^/ /' 30 | 31 | logfile='/var/log/fail2ban.log' 32 | 33 | if ! mapfile -t lines < <(grep -hioP '(\[[a-z-]+\]) ?(?:restore)? (ban|unban)' $logfile | sort | uniq -c); then 34 | echo " No stats found" 35 | exit 1 36 | fi 37 | 38 | if [ ${#lines[@]} -eq 0 ]; then 39 | echo " No stats found" 40 | exit 1 41 | fi 42 | 43 | mapfile -t lines < <(grep -hioP '(\[[a-z-]+\]) ?(?:restore)? (ban|unban)' $logfile | sort | uniq -c) 44 | jails=($(printf -- '%s\n' "${lines[@]}" | grep -oP '\[\K[^\]]+' | sort | uniq)) 45 | 46 | out="" 47 | for jail in ${jails[@]}; do 48 | bans=$(printf -- '%s\n' "${lines[@]}" | grep -iP "[[:digit:]]+ \[$jail\] ban" | awk '{print $1}') 49 | restores=$(printf -- '%s\n' "${lines[@]}" | grep -iP "[[:digit:]]+ \[$jail\] restore ban" | awk '{print $1}') 50 | unbans=$(printf -- '%s\n' "${lines[@]}" | grep -iP "[[:digit:]]+ \[$jail\] unban" | awk '{print $1}') 51 | bans=${bans:-0} # default value 52 | restores=${restores:-0} # default value 53 | unbans=${unbans:-0} # default value 54 | bans=$(($bans+$restores)) 55 | diff=$(($bans-$unbans)) 56 | out+=$(printf "$jail, %+3s bans, %+3s unbans, %+3s active" $bans $unbans $diff)"\n" 57 | done 58 | 59 | printf "$out" | column -ts $',' | sed -e 's/^/ /' 60 | -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/scripts/ram.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Get memory usage statistics 4 | mem_stats=$(free -h | awk 'NR==2 {print $3, $2, $6, $3/$2*100}') 5 | swap_stats=$(free -h | awk 'NR==3 {print $3, $2, $3/$2*100}') 6 | 7 | # Parse the output into variables and strip out the units (Gi, G, etc.) 8 | used_mem=$(echo "$mem_stats" | awk '{print $1}' | sed 's/[A-Za-z]//g') 9 | total_mem=$(echo "$mem_stats" | awk '{print $2}' | sed 's/[A-Za-z]//g') 10 | cached_mem=$(echo "$mem_stats" | awk '{print $3}' | sed 's/[A-Za-z]//g') 11 | percent_mem=$(echo "$mem_stats" | awk '{print $4}' | tr -d '%') 12 | 13 | used_swap=$(echo "$swap_stats" | awk '{print $1}' | sed 's/[A-Za-z]//g') 14 | total_swap=$(echo "$swap_stats" | awk '{print $2}' | sed 's/[A-Za-z]//g') 15 | percent_swap=$(echo "$swap_stats" | awk '{print $3}' | tr -d '%') 16 | 17 | # Define the maximum length of the progress bar 18 | bar_length=50 19 | 20 | ### RAM Bar Calculations ### 21 | used_length_mem=$(echo "scale=0; $percent_mem * $bar_length / 100" | bc) 22 | cached_length=$(echo "scale=0; ($cached_mem * 100 / $total_mem) * $bar_length / 100" | bc) 23 | remaining_length_mem=$(( bar_length - used_length_mem - cached_length )) 24 | 25 | filled_used_mem=$(printf "%0.s─" $(seq 1 $used_length_mem)) 26 | filled_cached_mem=$(printf "%0.s─" $(seq 1 $cached_length)) 27 | empty_mem=$(printf "%0.s─" $(seq 1 $remaining_length_mem)) 28 | 29 | # Calculate the length of the "used_mem/total_mem" string 30 | used_free_length_mem=$(( ${#used_mem} + ${#total_mem} + 1 )) # Add 1 for "/" 31 | padding_mem=$(( bar_length - used_free_length_mem - ${#percent_mem} - 10 )) # Subtract for spaces 32 | 33 | ### Swap Bar Calculations ### 34 | used_length_swap=$(echo "scale=0; $percent_swap * $bar_length / 100" | bc) 35 | remaining_length_swap=$(( bar_length - used_length_swap )) 36 | 37 | filled_used_swap=$(printf "%0.s─" $(seq 1 $used_length_swap)) 38 | empty_swap=$(printf "%0.s─" $(seq 1 $remaining_length_swap)) 39 | 40 | # Calculate the length of the "used_swap/total_swap" string 41 | used_free_length_swap=$(( ${#used_swap} + ${#total_swap} + 1 )) # Add 1 for "/" 42 | padding_swap=$(( bar_length - used_free_length_swap - ${#percent_swap} - 12 )) # Subtract for spaces 43 | 44 | # Define colors 45 | GREEN=$(tput setaf 2) 46 | BLUE=$(tput setaf 4) 47 | BLACK=$(tput setaf 0) 48 | RESET=$(tput sgr0) 49 | 50 | # Round the percentages for display 51 | rounded_percent_mem=$(echo "scale=1; $percent_mem/1" | bc) 52 | rounded_percent_swap=$(echo "scale=1; $percent_swap/1" | bc) 53 | 54 | # Output the RAM result 55 | printf "%s/%s G %${padding_mem}s%s\n" " RAM $used_mem" "$total_mem" "" "${rounded_percent_mem}%" 56 | echo " ${GREEN}$filled_used_mem${BLUE}$filled_cached_mem${BLACK}$empty_mem${RESET}" 57 | 58 | # Output the Swap result 59 | printf "%s/%s G %${padding_swap}s%s\n" " SWAP $used_swap" "$total_swap" "" "${rounded_percent_swap}%" 60 | if [ "$used_swap" -eq 0 ]; then 61 | echo " ${BLACK}$empty_swap${RESET}" 62 | else 63 | echo " ${GREEN}$filled_used_swap${BLACK}$empty_swap${RESET}" 64 | fi 65 | -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/scripts/services.sh: -------------------------------------------------------------------------------- 1 | #/bin/sh 2 | 3 | # USER 4 | pipewire_status=$(systemctl --user is-active pipewire >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 5 | mpd_status=$(systemctl --user is-active mpd >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 6 | dconf_status=$(systemctl --user is-active dconf >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 7 | dbus_status=$(systemctl --user is-active dbus >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 8 | hypridle=$(systemctl --user is-active hypridle >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 9 | mpdris=$(systemctl --user is-active mpdris2 >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 10 | 11 | # SYSTEM 12 | ssh=$(systemctl is-active sshd >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 13 | network_manager=$(systemctl is-active NetworkManager >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 14 | bluetooth=$(systemctl is-active bluetooth >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 15 | firewall=$(systemctl is-active firewall >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 16 | unbound=$(systemctl is-active unbound >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 17 | fail2ban=$(systemctl is-active fail2ban >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 18 | docker=$(systemctl is-active docker >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 19 | 20 | # Will be moving these to docker containers to include in docker stats 21 | # ollama=$(systemctl is-active ollama >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 22 | # open_webui=$(systemctl is-active open-webui >/dev/null 2>&1 && echo -e "\033[32m●\033[0m" || echo -e "\033[31m●\033[0m") 23 | 24 | 25 | # Display statuses inline 26 | echo -e " \033[3;31mUser \033[0m \033[3;31mSystem \033[0m" 27 | echo -e " Pipewire: $pipewire_status MPD: $mpd_status Docker: $docker SSH: $ssh" 28 | echo -e " dconf: $dconf_status DBus: $dbus_status Fail2Ban: $fail2ban Unbound: $unbound" 29 | echo -e " HyprIdle: $hypridle MPDris: $mpdris Bluetooth: $bluetooth Firewall: $firewall" 30 | # echo -e " Docker: $docker" 31 | -------------------------------------------------------------------------------- /user/shell/cli/fastfetch/scripts/temps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # set background color based on temperature 4 | set_color() { 5 | local temp=$1 6 | # Clean the temperature value (remove non-numeric characters) 7 | temp=$(echo "$temp" | sed 's/[^0-9.]//g') 8 | 9 | # Check if the temperature is valid 10 | if [ -z "$temp" ] || ! echo "$temp" | grep -qE '^[0-9]+(\.[0-9]+)?$'; then 11 | # If no temperature is available, print "N/A" 12 | echo "N/A" 13 | elif (( $(echo "$temp <= 50" | bc -l) )); then 14 | # Green background for <= 50 15 | echo "$(tput setab 2) $temp°C $(tput sgr0)" 16 | elif (( $(echo "$temp <= 75" | bc -l) )); then 17 | # Yellow background for 51-75 18 | echo "$(tput setab 3) $temp°C $(tput sgr0)" 19 | else 20 | # Red background for > 75 21 | echo "$(tput setab 1) $temp°C $(tput sgr0)" 22 | fi 23 | } 24 | 25 | # Retrieve the temperatures 26 | cpu_temp=$(sensors | grep 'Tctl' | awk '{print $2}' | sed 's/[^0-9.]//g') 27 | dgpu_temp=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits) 28 | igpu_temp=$(sensors | grep 'edge' | awk '{print $2}' | sed 's/[^0-9.]//g') 29 | ssd_temp=$(sensors | grep 'Composite' | awk '{print $2}' | sed 's/[^0-9.]//g') 30 | 31 | # Print temp blocks with a check to ensure valid readings 32 | echo "CPU: $cpu_temp" 33 | echo "dGPU: $dgpu_temp" 34 | echo "iGPU: $igpu_temp" 35 | echo "SSD: $ssd_temp" 36 | echo "CPU: $(set_color "$cpu_temp")" 37 | echo "dGPU: $(set_color "$dgpu_temp")" 38 | echo "iGPU: $(set_color "$igpu_temp")" 39 | echo "SSD: $(set_color "$ssd_temp")" 40 | -------------------------------------------------------------------------------- /user/shell/cli/packages.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | fastfetch 5 | eza 6 | lshw 7 | bottom 8 | ddgr 9 | fzf 10 | chafa 11 | timg 12 | figlet 13 | bc 14 | lm_sensors 15 | smartmontools 16 | tldr 17 | bat 18 | jq 19 | fd 20 | file 21 | lesspipe 22 | exiftool 23 | ]; 24 | } 25 | -------------------------------------------------------------------------------- /user/shell/starship/pill.toml: -------------------------------------------------------------------------------- 1 | format = """ 2 | ${custom.vi_normal}\ 3 | ${custom.vi_insert}\ 4 | ${custom.vi_replace}\ 5 | ${custom.vi_visual}\ 6 | ${custom.vi_vline}\ 7 | [ ](fg:#454545)\ 8 | $directory\ 9 | [](fg:#a5bef0)\ 10 | [ ](fg:#454545)\ 11 | $git_branch\ 12 | $git_status\ 13 | $fill\ 14 | \n$character""" 15 | 16 | [custom.vi_normal] 17 | command = "echo " 18 | symbol = "[](fg:#a5bef0 )" 19 | when = '~/dots/scripts/vi-modes/normal.sh' 20 | style = "fg:#10101e bg:#a5bef0 " 21 | format = "[](fg:#a5bef0 bg:#232526)[$output$symbol[ NORMAL](bg:#232526 fg:bold #a5bef0 )[](fg:#232526)]($style)" 22 | 23 | [custom.vi_insert] 24 | command = "echo " 25 | symbol = "[](fg:#f5c2e7)" 26 | when = '~/dots/scripts/vi-modes/insert.sh' 27 | style = "fg:bold black bg:#f5c2e7" 28 | format = "[](fg:#f5c2e7 bg:#232526)[$output$symbol[ INSERT](bg:#232526 fg:bold #f5c2e7)[](fg:#232526)]($style)" 29 | 30 | [custom.vi_replace] 31 | command = "echo " 32 | symbol = "[](fg:#f38ba8)" 33 | when = '~/dots/scripts/vi-modes/replace.sh' 34 | style = "fg:#10101e bg:#f38ba8" 35 | format = "[](fg:#f38ba8 bg:#232526)[$output$symbol[ REPLACE](bg:#232526 fg:bold #f38ba8)[](fg:#232526)]($style)" 36 | 37 | [custom.vi_visual] 38 | command = "echo " 39 | symbol = "[](fg:#f2cdcd)" 40 | when = '~/dots/scripts/vi-modes/visual.sh' 41 | style = "fg:#10101e bg:#f2cdcd" 42 | format = "[](fg:#f2cdcd bg:#232526)[$output$symbol[ VISUAL](bg:#232526 fg:bold #f2cdcd)[](fg:#232526)]($style)" 43 | 44 | [custom.vi_vline] 45 | command = "echo " 46 | symbol = "[](fg:#f2cdcd)" 47 | when = '~/dots/scripts/vi-modes/vline.sh' 48 | style = "fg:#10101e bg:#f2cdcd" 49 | format = "[](fg:#f2cdcd bg:#232526)[$output$symbol[ V-LINE](bg:#232526 fg:bold #f2cdcd)[](fg:#232526)]($style)" 50 | 51 | [character] 52 | format = "$symbol " 53 | success_symbol = "[❯](bold italic white)" 54 | vicmd_symbol = "[❯](bold italic white)" 55 | error_symbol = "[❯](bold italic white)" 56 | 57 | [fill] 58 | symbol = " " 59 | 60 | [directory] 61 | style = "fg:#10101e bold bg:#b4befe" 62 | format = "[[](fg:#232526)$path [](bg:#232526 fg:#b4befe)[](fg:#232526 bg:#b4befe)](bg:#232526 fg:bold #b4befe)" 63 | truncation_length = 2 64 | truncation_symbol = "…/" 65 | 66 | [directory.substitutions] 67 | "Documents" = "󰈙 " 68 | "Downloads" = " " 69 | "Music" = " " 70 | "Pictures" = " " 71 | 72 | [git_branch] 73 | symbol = "" 74 | style = "bg:#94e2d5" 75 | format = '[[](fg:#232526)[$branch ](fg:bold #94e2d5 bg:#232526)]($style)' 76 | 77 | [git_status] 78 | style = "bg:#94e2d5" 79 | untracked = "[?](fg:bold green bg:#232526)" 80 | modified = "[!](fg:bold green bg:#232526)" 81 | staged = "[+](fg:bold green bg:#232526)" 82 | deleted = "[✘](fg:bold green bg:#232526)" 83 | conflicted = "[=](fg:bold green bg:#232526)" 84 | stashed = "[](fg:bold green bg:#232526)" 85 | renamed = "[»](fg:bold green bg:#232526)" 86 | format = '[[($all_status$ahead_behind )](fg:bold #94e2d5 bg:#232526)[](bg:#232526 fg:#94e2d5)[](fg:#232526 bg:#94e2d5)[](fg:#94e2d5)]($style)' 87 | 88 | [nodejs] 89 | symbol = "" 90 | style = "bg:#212736" 91 | format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' 92 | 93 | [rust] 94 | symbol = "" 95 | style = "bg:#212736" 96 | format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' 97 | 98 | [golang] 99 | symbol = "" 100 | style = "bg:#212736" 101 | format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' 102 | 103 | [php] 104 | symbol = "" 105 | style = "bg:#212736" 106 | format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)' 107 | 108 | [cmd_duration] 109 | min_time = 0 110 | format = "[](fg:#232526)[$duration ](bg:#232526 fg:bold white)" 111 | 112 | [status] 113 | disabled = false 114 | success_symbol = "[](fg:#94e2d5 bg:#232526)[](fg:bold black bg:#94e2d5)[](fg:#94e2d5)" 115 | symbol = "[](fg:#f38ba8 bg:#232526)[](fg:bold black bg:#f38ba8)[](fg:#f38ba8)" 116 | not_executable_symbol = "[](fg:#f38ba8 bg:#232526)[󰜺](fg:bold black bg:#f38ba8)[](fg:#f38ba8)" 117 | not_found_symbol = "[](fg:#b4b3f3 bg:#232526)[](fg:bold black bg:#b4b3f3)[](fg:#b4b3f3)" 118 | format = "[$symbol]($style)" 119 | -------------------------------------------------------------------------------- /user/shell/starship/starship.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ 4 | starship 5 | ]; 6 | } 7 | -------------------------------------------------------------------------------- /wallpapers/Tokyo_Pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/Tokyo_Pink.png -------------------------------------------------------------------------------- /wallpapers/astroneer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/astroneer.png -------------------------------------------------------------------------------- /wallpapers/cat-ninja.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/cat-ninja.jpg -------------------------------------------------------------------------------- /wallpapers/cat-sword.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/cat-sword.jpg -------------------------------------------------------------------------------- /wallpapers/deer_and_sunset.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/deer_and_sunset.jpg -------------------------------------------------------------------------------- /wallpapers/default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/default.jpg -------------------------------------------------------------------------------- /wallpapers/driver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/driver.png -------------------------------------------------------------------------------- /wallpapers/flow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/flow.jpg -------------------------------------------------------------------------------- /wallpapers/fractal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/fractal.png -------------------------------------------------------------------------------- /wallpapers/jack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/jack.png -------------------------------------------------------------------------------- /wallpapers/mountain-lake.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/mountain-lake.jpg -------------------------------------------------------------------------------- /wallpapers/paper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/paper.png -------------------------------------------------------------------------------- /wallpapers/pixel-bamboo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/pixel-bamboo.png -------------------------------------------------------------------------------- /wallpapers/pixel-street.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/pixel-street.jpg -------------------------------------------------------------------------------- /wallpapers/prisim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/prisim.png -------------------------------------------------------------------------------- /wallpapers/priyanuch_konkaew_unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/priyanuch_konkaew_unsplash.jpg -------------------------------------------------------------------------------- /wallpapers/rain-man.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/rain-man.jpg -------------------------------------------------------------------------------- /wallpapers/ruins.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/ruins.jpg -------------------------------------------------------------------------------- /wallpapers/shard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/shard.png -------------------------------------------------------------------------------- /wallpapers/shifter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/shifter.jpg -------------------------------------------------------------------------------- /wallpapers/statue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/statue.jpg -------------------------------------------------------------------------------- /wallpapers/street-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/street-view.png -------------------------------------------------------------------------------- /wallpapers/streetlight.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/streetlight.jpg -------------------------------------------------------------------------------- /wallpapers/sundown-over-water.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/sundown-over-water.jpg -------------------------------------------------------------------------------- /wallpapers/village.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/village.png -------------------------------------------------------------------------------- /wallpapers/wallhaven3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/wallhaven3.jpg -------------------------------------------------------------------------------- /wallpapers/yang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/yang.png -------------------------------------------------------------------------------- /wallpapers/yin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paradoxical-dev/dots/067c563cfac5a4fcece4941755bd357fa878cd6b/wallpapers/yin.png --------------------------------------------------------------------------------