├── .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 | 
80 |
81 | 
82 |
83 | 
84 |
85 |
86 |
87 |
88 | Yang
89 |
90 | 
91 |
92 | 
93 |
94 | 
95 |
96 |
97 |
98 |
99 | Burst
100 |
101 | 
102 |
103 | 
104 |
105 | 
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 | |  |  |
10 | | --------------------------------------------- | -------------------------------------------------------------- |
11 | |  |  |
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("", tag, ">\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, "", tag, ">\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
--------------------------------------------------------------------------------