├── secrets ├── pass.age ├── downonspot.age ├── secrets.nix ├── home.nix └── home-secrets.nix ├── pkgs ├── open-utau │ ├── fetch-new │ ├── update.sh │ └── default.nix ├── overlays.nix ├── default.nix └── sway-hidpi.nix ├── home ├── profiles │ ├── envious │ │ └── yavor.nix │ └── default.nix ├── develop │ ├── editors │ │ ├── default.nix │ │ ├── nvim │ │ │ ├── lua │ │ │ │ ├── config.lua │ │ │ │ ├── plug-conf │ │ │ │ │ ├── coq.lua │ │ │ │ │ ├── lualine.lua │ │ │ │ │ ├── init.lua │ │ │ │ │ ├── default.nix │ │ │ │ │ ├── nvim-tree.lua │ │ │ │ │ ├── toggleterm.lua │ │ │ │ │ ├── dap.lua │ │ │ │ │ ├── legendary.lua │ │ │ │ │ ├── alpha.lua │ │ │ │ │ ├── bufferline.lua │ │ │ │ │ ├── git.lua │ │ │ │ │ ├── treesitter.lua │ │ │ │ │ ├── navic.lua │ │ │ │ │ └── cmp.lua │ │ │ │ ├── extra.lua │ │ │ │ ├── options.lua │ │ │ │ ├── theme.lua │ │ │ │ ├── keymap.lua │ │ │ │ ├── ui.lua │ │ │ │ └── plugins.lua │ │ │ ├── init.lua │ │ │ └── default.nix │ │ ├── helix.nix │ │ └── lsp.nix │ ├── default.nix │ └── neovim-flake.nix ├── default.nix ├── gui │ ├── eww │ │ ├── css │ │ │ ├── _volume.scss │ │ │ ├── _calendar.scss │ │ │ ├── _colors.scss │ │ │ ├── _notification.scss │ │ │ ├── _system.scss │ │ │ ├── _music.scss │ │ │ └── _sidebar.scss │ │ ├── modules │ │ │ ├── launcher.yuck │ │ │ ├── net.yuck │ │ │ ├── bluetooth.yuck │ │ │ ├── cpu.yuck │ │ │ ├── mem.yuck │ │ │ ├── bright.yuck │ │ │ ├── bat.yuck │ │ │ ├── workspaces.yuck │ │ │ ├── volume.yuck │ │ │ ├── clock.yuck │ │ │ ├── music.yuck │ │ │ └── variables.yuck │ │ ├── windows │ │ │ ├── calendar.yuck │ │ │ ├── music.yuck │ │ │ ├── notifications.yuck │ │ │ └── sidebar.yuck │ │ ├── scripts │ │ │ ├── brightness │ │ │ ├── memory │ │ │ ├── airplane │ │ │ ├── net │ │ │ ├── bluetooth │ │ │ ├── volume │ │ │ ├── battery │ │ │ ├── music │ │ │ ├── notifications │ │ │ └── workspaces │ │ ├── README.md │ │ ├── default.nix │ │ ├── eww.scss │ │ └── eww.yuck │ ├── productivity.nix │ ├── ironbar │ │ ├── scss-pkg.nix │ │ └── styles │ │ │ ├── _colors.scss │ │ │ └── main.scss │ ├── anyrun.nix │ ├── hpr_scratcher.nix │ ├── wallpaper.nix │ ├── colors.nix │ ├── gtk.nix │ ├── xdg.nix │ ├── kvantum.nix │ ├── dunst.nix │ ├── wl-screenrec.nix │ ├── nwg-stuff.nix │ ├── default.nix │ ├── cat-mocha.frag.nix │ ├── rofi.nix │ └── hyprland.nix ├── media │ ├── default.nix │ ├── mpv.nix │ └── music.nix ├── cli │ ├── bat.nix │ ├── ascii.nix │ ├── zellij.nix │ ├── cava.nix │ ├── default.nix │ ├── btop.nix │ ├── macchina.nix │ └── zsh.nix └── gaming │ └── default.nix ├── hosts ├── impurity-module.nix ├── envious │ ├── hardware-configuration.nix │ └── default.nix └── default.nix ├── rebuild.sh ├── home.nix ├── modules ├── booting.nix ├── fonts.nix ├── compat.nix ├── greetd.nix ├── firefox.nix ├── network │ └── default.nix ├── nix-daemon.nix └── security.nix ├── lib.nix ├── README.md └── flake.nix /secrets/pass.age: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yavko/Dotfiles/HEAD/secrets/pass.age -------------------------------------------------------------------------------- /pkgs/open-utau/fetch-new: -------------------------------------------------------------------------------- 1 | /nix/store/fs4sa0dh89nkfac441i74q86bjkfqbdp-fetch-openutau-deps -------------------------------------------------------------------------------- /home/profiles/envious/yavor.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | imports = [ 3 | ../.. 4 | ]; 5 | } 6 | -------------------------------------------------------------------------------- /secrets/downonspot.age: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yavko/Dotfiles/HEAD/secrets/downonspot.age -------------------------------------------------------------------------------- /home/develop/editors/default.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | imports = [ 3 | ./helix.nix 4 | ./lsp.nix 5 | ./nvim 6 | ]; 7 | } 8 | -------------------------------------------------------------------------------- /home/default.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | imports = [ 3 | ./cli 4 | ./gui 5 | ./develop 6 | ./media 7 | ./gaming 8 | ]; 9 | } 10 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/config.lua: -------------------------------------------------------------------------------- 1 | require('theme') 2 | require('options') 3 | require('ui') 4 | require('keymap') 5 | require('plug-conf') 6 | -------------------------------------------------------------------------------- /pkgs/overlays.nix: -------------------------------------------------------------------------------- 1 | inputs: _: prev: { 2 | sway-hidpi = import ./sway-hidpi.nix inputs prev; 3 | open-utau = prev.callPackage ./open-utau {}; 4 | } 5 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/init.lua: -------------------------------------------------------------------------------- 1 | --require("vim") 2 | 3 | require("plugins") 4 | require("impatient") 5 | --vim.notify = require("notify") 6 | require("config") 7 | -------------------------------------------------------------------------------- /home/gui/eww/css/_volume.scss: -------------------------------------------------------------------------------- 1 | .vol-icon { color: $teal; } 2 | .volbar highlight { 3 | background-image: linear-gradient(to right, $teal 30%, $sky 100%); 4 | border-radius: 10px; 5 | } 6 | -------------------------------------------------------------------------------- /home/gui/eww/modules/launcher.yuck: -------------------------------------------------------------------------------- 1 | (defwidget launcher [] 2 | (button 3 | :tooltip "launcher" 4 | :hexpand true 5 | :class "launcher" 6 | :onclick "wofi &" 7 | "")) 8 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/coq.lua: -------------------------------------------------------------------------------- 1 | local coq_3p = require 'coq_3p' 2 | 3 | coq_3p { 4 | { src = "nvimlua", short_name = "nLUA" }, 5 | { src = "figlet", short_name = "BIG" } 6 | } 7 | -------------------------------------------------------------------------------- /home/gui/productivity.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | home.packages = with pkgs; [ 3 | pitivi 4 | tenacity 5 | kdenlive 6 | inkscape-with-extensions 7 | #gimp-with-plugins 8 | ]; 9 | } 10 | -------------------------------------------------------------------------------- /home/gui/eww/modules/net.yuck: -------------------------------------------------------------------------------- 1 | (defwidget net [] 2 | (button 3 | :class "module-net module" 4 | :onclick "iwgtk &" 5 | :tooltip {net.essid} 6 | :style "color: ${net.color};" 7 | {net.icon})) 8 | -------------------------------------------------------------------------------- /home/media/default.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ./mpv.nix 4 | ./music.nix 5 | ]; 6 | home.packages = with pkgs; [ 7 | playerctl 8 | pavucontrol 9 | imv 10 | ]; 11 | } 12 | -------------------------------------------------------------------------------- /hosts/impurity-module.nix: -------------------------------------------------------------------------------- 1 | {inputs, impurity, ...}: { 2 | 3 | home-manager.extraSpecialArgs = {inherit impurity;}; 4 | 5 | imports = [inputs.impurity.nixosModules.impurity]; 6 | impurity.configRoot = inputs.self; 7 | } 8 | -------------------------------------------------------------------------------- /secrets/secrets.nix: -------------------------------------------------------------------------------- 1 | let 2 | yavko = [ 3 | "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEDGzxjYoalywVSGUXuU6cBDhuwgIIpElTjkz9fpBIxJ" 4 | ]; 5 | in { 6 | "pass.age".publicKeys = yavko; 7 | "downonspot.age".publicKeys = yavko; 8 | } 9 | -------------------------------------------------------------------------------- /rebuild.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | if [[ $1 == "pure" ]]; then 3 | nixos-rebuild switch --flake .\#envious --use-remote-sudo 4 | else 5 | IMPURITY_PATH=$(pwd) sudo --preserve-env=IMPURITY_PATH nixos-rebuild switch --impure --flake .#envious-impure 6 | fi 7 | -------------------------------------------------------------------------------- /home/gui/eww/modules/bluetooth.yuck: -------------------------------------------------------------------------------- 1 | (defwidget bluetooth [] 2 | (button 3 | :class "module-bt module" 4 | :onclick "blueberry" 5 | :tooltip "${bluetooth.text} ${bluetooth.batt_icon}" 6 | :style "color: ${bluetooth.color};" 7 | {bluetooth.icon})) 8 | -------------------------------------------------------------------------------- /pkgs/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | self, 3 | inputs, 4 | ... 5 | }: { 6 | systems = ["x86_64-linux"]; 7 | 8 | flake.overlays.default = import ./overlays.nix; 9 | 10 | perSystem = {pkgs, ...}: { 11 | packages = self.overlays.default inputs null pkgs; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /home/gui/eww/windows/calendar.yuck: -------------------------------------------------------------------------------- 1 | (defwidget calendar-win [] 2 | (box 3 | :class "calendar-win" 4 | (calendar))) 5 | 6 | (defwindow calendar 7 | :monitor 0 8 | :geometry (geometry 9 | :x "0%" 10 | :y "0%" 11 | :anchor "top right" 12 | :width "0px" 13 | :height "0px") 14 | (calendar-win)) 15 | -------------------------------------------------------------------------------- /home/gui/eww/modules/cpu.yuck: -------------------------------------------------------------------------------- 1 | (defwidget cpu [] 2 | (circular-progress 3 | :value "${EWW_CPU.avg}" 4 | :class "cpubar module" 5 | :thickness 3 6 | (button 7 | :tooltip "using ${round(EWW_CPU.avg,0)}% cpu" 8 | :onclick "${EWW_CMD} open --toggle system-menu" 9 | (label :class "icon-text" :text "")))) 10 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/lualine.lua: -------------------------------------------------------------------------------- 1 | require('lualine').setup { 2 | options = { 3 | --theme = 'dracula-nvim', 4 | theme = 'catppuccin', 5 | component_separators = { left = '', right = '' }, 6 | section_separators = { left = '', right = '' }, 7 | globalstatus = true 8 | }, 9 | extensions = { 'nvim-tree' } 10 | } 11 | -------------------------------------------------------------------------------- /home/gui/eww/modules/mem.yuck: -------------------------------------------------------------------------------- 1 | (defwidget mem [] 2 | (circular-progress 3 | :value {memory.percentage} 4 | :class "membar module" 5 | :thickness 3 6 | (button 7 | :tooltip "using ${round(memory.percentage,0)}% ram" 8 | :onclick "${EWW_CMD} open --toggle system-menu" 9 | (label :class "icon-text" :text "")))) 10 | -------------------------------------------------------------------------------- /home/gui/eww/modules/bright.yuck: -------------------------------------------------------------------------------- 1 | (defwidget bright [] 2 | (box 3 | :class "module" 4 | (eventbox 5 | :onscroll "echo {} | sed -e 's/up/s +10%/g' -e 's/down/s 10%-/g' | xargs brightnessctl" 6 | (label 7 | :text {brightness.icon} 8 | :class "bright-icon" 9 | :tooltip "brightness ${round(brightness.level, 0)}%")))) 10 | -------------------------------------------------------------------------------- /home.nix: -------------------------------------------------------------------------------- 1 | {nix-colors, ...}: { 2 | colorScheme = nix-colors.colorSchemes.catppuccin-mocha; 3 | home.username = "yavor"; 4 | home.homeDirectory = "/home/yavor"; 5 | home.stateVersion = "22.11"; 6 | manual = { 7 | html.enable = false; 8 | json.enable = false; 9 | manpages.enable = false; 10 | }; 11 | programs.home-manager.enable = true; 12 | } 13 | -------------------------------------------------------------------------------- /home/gui/eww/modules/bat.yuck: -------------------------------------------------------------------------------- 1 | (defwidget bat [] 2 | (circular-progress 3 | :value "${EWW_BATTERY["BAT0"].capacity}" 4 | :class "batbar module" 5 | :style "color: ${battery.color};" 6 | :thickness 3 7 | (button 8 | :tooltip "battery on ${EWW_BATTERY["BAT0"].capacity}%" 9 | :onclick "${EWW_CMD} open --toggle system-menu" 10 | (label :class "icon-text" :text "")))) 11 | -------------------------------------------------------------------------------- /home/cli/bat.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | ... 5 | }: { 6 | xdg.configFile."bat/themes".source = pkgs.fetchFromGitHub { 7 | owner = "Catppuccin"; 8 | repo = "bat"; 9 | rev = "ba4d16880d63e656acced2b7d4e034e4a93f74b1"; 10 | sha256 = "sha256-6WVKQErGdaqb++oaXnY3i6/GuH2FhTgK0v4TN4Y0Wbw="; 11 | }; 12 | xdg.configFile."bat/config".text = '' 13 | --theme="Catppuccin-mocha" 14 | ''; 15 | } 16 | -------------------------------------------------------------------------------- /home/gui/eww/modules/workspaces.yuck: -------------------------------------------------------------------------------- 1 | (defwidget workspaces [] 2 | (eventbox 3 | :onscroll "echo {} | sed -e \"s/up/-1/g\" -e \"s/down/+1/g\" | xargs hyprctl dispatch workspace" 4 | (box 5 | :class "module workspaces" 6 | :spacing 5 7 | (for i in workspace 8 | (button 9 | :onclick "hyprctl dispatch workspace ${i.number}" 10 | :class "ws" 11 | :style "color: ${i.color};" 12 | "●"))))) 13 | -------------------------------------------------------------------------------- /home/gui/eww/scripts/brightness: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | icons=("" "" "") 4 | 5 | # initial 6 | icon=${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]} 7 | echo '{ "level": '"$(light)"', "icon": "'"$icon"'" }' 8 | 9 | udevadm monitor | rg --line-buffered "backlight" | while read -r _; do 10 | icon="${icons[$(awk -v n="$(light)" 'BEGIN{print int(n/34)}')]}" 11 | 12 | echo '{ "level": '"$(light)"', "icon": "'"$icon"'" }' 13 | done 14 | -------------------------------------------------------------------------------- /home/gui/eww/modules/volume.yuck: -------------------------------------------------------------------------------- 1 | (defwidget volume-module [] 2 | (box 3 | :class "module" 4 | (eventbox 5 | :onscroll "echo {} | sed -e 's/up/-/g' -e 's/down/+/g' | xargs -I% wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.005%" 6 | :onclick "pavucontrol &" 7 | :onrightclick "scripts/volume mute SINK" 8 | (label 9 | :class "vol-icon" 10 | :tooltip "volume ${volume.percent}" 11 | :text {volume.icon})))) 12 | -------------------------------------------------------------------------------- /home/gui/ironbar/scss-pkg.nix: -------------------------------------------------------------------------------- 1 | { 2 | dart-sass, 3 | stdenvNoCC, 4 | src ? ./styles, 5 | entry ? "main", 6 | }: 7 | stdenvNoCC.mkDerivation { 8 | pname = "built-scss"; 9 | version = "1.0"; 10 | inherit src; 11 | nativeBuildInputs = [dart-sass]; 12 | buildPhase = '' 13 | dart-sass ${entry}.scss > __nix_out__.css.out 14 | ''; 15 | installPhase = '' 16 | mkdir -p $out/ 17 | cp __nix_out__.css.out $out/out.css 18 | ''; 19 | } 20 | -------------------------------------------------------------------------------- /home/cli/ascii.nix: -------------------------------------------------------------------------------- 1 | num: let 2 | # Credit to https://www.asciiart.eu/animals/cats 3 | cat = '' 4 | _._ _,-'""`-._ 5 | (,-.`._,'( |\`-/| 6 | `-.-' \ )-`( , o o) 7 | `- \`_`"'- 8 | 9 | ''; 10 | # Credit to https://github.com/andreasgrafen/pfetch-with-kitties 11 | cat2 = '' 12 | /| 、 13 | (°、 。 7 14 | |、 ~ヽ 15 | じしf_,)〳 16 | 17 | ''; 18 | in 19 | if num == 0 20 | then cat 21 | else cat2 22 | -------------------------------------------------------------------------------- /secrets/home.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | pkgs, 4 | ... 5 | }: { 6 | #imports = [./home-secrets.nix]; 7 | home.packages = with pkgs; [pinentry]; 8 | programs.gpg = { 9 | enable = true; 10 | homedir = "${config.xdg.dataHome}/gnupg"; 11 | }; 12 | services.gpg-agent = { 13 | enable = true; 14 | pinentryFlavor = "gnome3"; 15 | enableSshSupport = true; 16 | sshKeys = ["ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEDGzxjYoalywVSGUXuU6cBDhuwgIIpElTjkz9fpBIxJ"]; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /home/gui/anyrun.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | pkgs, 4 | ... 5 | }: { 6 | programs.anyrun = { 7 | enable = true; 8 | config = { 9 | plugins = [ 10 | inputs.anyrun.packages.${pkgs.system}.applications 11 | ]; 12 | width = {absolute = 800;}; 13 | position = "top"; 14 | verticalOffset = {fraction = 0.3;}; 15 | hideIcons = false; 16 | ignoreExclusiveZones = false; 17 | layer = "overlay"; 18 | hidePluginInfo = true; 19 | }; 20 | extraCss = ""; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /home/gui/eww/css/_calendar.scss: -------------------------------------------------------------------------------- 1 | .calendar-win { 2 | @include window; 3 | background-color: $bg; 4 | border: 1px solid $border; 5 | color: $fg; 6 | padding: .2em; 7 | } 8 | 9 | calendar { 10 | padding: 5px; 11 | 12 | :selected { 13 | color: $mauve; 14 | } 15 | 16 | .header { 17 | color: $subtext1; 18 | } 19 | 20 | .highlight { 21 | color: $maroon; 22 | font-weight: bold; 23 | } 24 | 25 | .button { 26 | color: $sapphire; 27 | } 28 | 29 | :indeterminate { 30 | color: $overlay0; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /home/cli/zellij.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | programs.zellij = { 3 | enable = true; 4 | settings = { 5 | theme = "catppuccin-mocha"; 6 | themes = { 7 | catppuccin-mocha = { 8 | bg = "#585b70"; # Surface2 9 | fg = "#cdd6f4"; 10 | red = "#f38ba8"; 11 | green = "#a6e3a1"; 12 | blue = "#89b4fa"; 13 | yellow = "#f9e2af"; 14 | magenta = "#f5c2e7"; # Pink 15 | orange = "#fab387"; # Peach 16 | cyan = "#89dceb"; # Sky 17 | black = "#181825"; # Mantle 18 | white = "#cdd6f4"; 19 | }; 20 | }; 21 | }; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /pkgs/sway-hidpi.nix: -------------------------------------------------------------------------------- 1 | inputs: prev: let 2 | sway-hidpi = prev.sway.override { 3 | inherit sway-unwrapped; 4 | withGtkWrapper = true; 5 | }; 6 | 7 | sway-unwrapped = 8 | (prev.sway-unwrapped.overrideAttrs (oa: { 9 | src = prev.fetchFromGitHub { 10 | owner = "swaywm"; 11 | repo = "sway"; 12 | rev = "8d8a21c9c321fa41b033caf9b5b62cdd584483c1"; 13 | sha256 = "sha256-WRvJsSvDv2+qirqkpaV2c7fFOgJAT3sXxPtKLure580="; 14 | }; 15 | 16 | buildInputs = oa.buildInputs ++ [prev.pcre2 prev.xorg.xcbutilwm]; 17 | })) 18 | .override {wlroots_0_16 = inputs.hyprland.packages.${prev.system}.wlroots-hyprland;}; 19 | in 20 | sway-hidpi 21 | -------------------------------------------------------------------------------- /home/gui/eww/scripts/memory: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | while true; do 4 | # human-readable 5 | freeH=$(free -h --si | rg "Mem:") 6 | # non-human-readable 7 | freeN=$(free --mega | rg "Mem:") 8 | 9 | total="$(echo "$freeH" | awk '{ print $2 }')" 10 | used="$(echo "$freeH" | awk '{ print $3 }')" 11 | t="$(echo "$freeN" | awk '{ print $2 }')" 12 | u="$(echo "$freeN" | awk '{ print $3 }')" 13 | 14 | free=$(printf '%.1fG' "$(bc -l <<< "($t - $u) / 1000")") 15 | perc=$(printf '%.1f' "$(free -m | rg Mem | awk '{print ($3/$2)*100}')") 16 | 17 | echo '{ "total": "'"$total"'", "used": "'"$used"'", "free": "'"$free"'", "percentage": '"$perc"' }' 18 | 19 | sleep 3 20 | done 21 | -------------------------------------------------------------------------------- /home/cli/cava.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | ... 5 | }: { 6 | home.packages = with pkgs; [cava]; 7 | xdg.configFile."cava/config".text = '' 8 | [general] 9 | bar_width = 10 10 | 11 | [color] 12 | gradient = 1 13 | 14 | gradient_color_1 = '#94e2d5' 15 | gradient_color_2 = '#89dceb' 16 | gradient_color_3 = '#74c7ec' 17 | gradient_color_4 = '#89b4fa' 18 | gradient_color_5 = '#cba6f7' 19 | gradient_color_6 = '#f5c2e7' 20 | gradient_color_7 = '#eba0ac' 21 | gradient_color_8 = '#f38ba8' 22 | 23 | [input] 24 | method = fifo 25 | source = /tmp/mpd.fifo 26 | sample_rate = 44100 27 | sample_bits = 16 28 | ''; 29 | } 30 | -------------------------------------------------------------------------------- /home/gui/eww/scripts/airplane: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | icon() { 4 | if [[ $STATUS == "no" ]]; then 5 | echo "" 6 | else 7 | echo "" 8 | fi 9 | } 10 | 11 | toggle() { 12 | if [[ $STATUS == "no" ]]; then 13 | rfkill block all 14 | notify-send --urgency=normal -i airplane-mode-symbolic "Airplane Mode" "Airplane mode has been turned on!" 15 | else 16 | rfkill unblock all 17 | notify-send --urgency=normal -i airplane-mode-disabled-symbolic "Airplane Mode" "Airplane mode has been turned off!" 18 | fi 19 | } 20 | 21 | if [[ $1 == "toggle" ]]; then 22 | toggle 23 | else 24 | while true; do 25 | STATUS="$(rfkill list | sed -n 2p | awk '{print $3}')" 26 | icon 27 | sleep 3; 28 | done 29 | fi 30 | -------------------------------------------------------------------------------- /pkgs/open-utau/update.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env nix-shell 2 | #!nix-shell -I nixpkgs=../../../. -i bash -p curl jq common-updater-scripts 3 | set -eo pipefail 4 | cd "$(dirname "${BASH_SOURCE[0]}")" 5 | 6 | deps_file="$(realpath "./deps.nix")" 7 | 8 | new_version="$(curl -s "https://api.github.com/repos/stakira/OpenUtau/releases?per_page=1" | jq -r '.[0].name')" 9 | old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)" 10 | if [[ "$new_version" == "$old_version" ]]; then 11 | echo "Up to date" 12 | exit 0 13 | fi 14 | 15 | cd ../../.. 16 | 17 | if [[ "$1" != "--deps-only" ]]; then 18 | update-source-version osu-lazer "$new_version" 19 | fi 20 | 21 | $(nix-build . -A osu-lazer.fetch-deps --no-out-link) "$deps_file" 22 | -------------------------------------------------------------------------------- /home/gui/hpr_scratcher.nix: -------------------------------------------------------------------------------- 1 | {...}: { 2 | programs.hpr_scratcher = { 3 | enable = false; 4 | scratchpads = { 5 | term = { 6 | command = "kitty --class kitty-dropterm"; 7 | animation = "fromTop"; 8 | margin = 50; 9 | unfocus = "hide"; 10 | }; 11 | volume = { 12 | command = "pavucontrol"; 13 | animation = "fromRight"; 14 | }; 15 | }; 16 | binds = { 17 | volume = { 18 | mods = "SUPER"; 19 | key = "P"; 20 | type = "toggle"; 21 | }; 22 | }; 23 | }; 24 | 25 | wayland.windowManager.hyprland.extraConfig = '' 26 | windowrule = float,^(pavucontrol)$ 27 | #windowrule = workspace special silent,^(pavucontrol)$ 28 | ''; 29 | } 30 | -------------------------------------------------------------------------------- /home/gui/eww/modules/clock.yuck: -------------------------------------------------------------------------------- 1 | (defvar date_rev false) 2 | 3 | (defwidget clock_module [] 4 | (eventbox 5 | :onhover "${EWW_CMD} update date_rev=true" 6 | :onhoverlost "${EWW_CMD} update date_rev=false" 7 | (overlay 8 | :class "module" 9 | (box 10 | :space-evenly "false" 11 | (label 12 | :text {time.hour} 13 | :class "clock hour") 14 | (label 15 | :text ":" 16 | :class "clock") 17 | (label 18 | :text {time.minute} 19 | :class "clock minute")) 20 | (revealer 21 | :reveal date_rev 22 | (button 23 | :class "date clock" 24 | :onclick "${EWW_CMD} open --toggle calendar" 25 | {time.date}))))) 26 | -------------------------------------------------------------------------------- /home/gui/eww/css/_colors.scss: -------------------------------------------------------------------------------- 1 | $rosewater: #f5e0dc; 2 | $flamingo: #f2cdcd; 3 | $pink: #f5c2e7; 4 | $mauve: #cba6f7; 5 | $red: #f38ba8; 6 | $maroon: #eba0ac; 7 | $peach: #fab387; 8 | $yellow: #f9e2af; 9 | $green: #a6e3a1; 10 | $teal: #94e2d5; 11 | $sky: #89dceb; 12 | $sapphire: #74c7ec; 13 | $blue: #89b4fa; 14 | $lavender: #b4befe; 15 | 16 | $text: #cdd6f4; 17 | $subtext1: #bac2de; 18 | $subtext0: #a6adc8; 19 | $overlay2: #9399b2; 20 | $overlay1: #7f849c; 21 | $overlay0: #6c7086; 22 | 23 | $surface2: #585b70; 24 | $surface1: #45475a; 25 | $surface0: #313244; 26 | 27 | $base: #1e1e2e; 28 | $mantle: #181825; 29 | $crust: #11111b; 30 | 31 | $fg: $text; 32 | $bg: $base; 33 | $bg1: $surface0; 34 | $border: #28283d; 35 | $shadow: $crust; 36 | -------------------------------------------------------------------------------- /home/gui/wallpaper.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | ... 5 | }: let 6 | wallpkgs = inputs.wallpkgs.packages.${pkgs.system}.catppuccin; 7 | in { 8 | systemd.user.services.hyprpaper = { 9 | Unit = { 10 | Description = "Hyprland wallpaper daemon"; 11 | Requires = ["graphical-session.target"]; 12 | }; 13 | Service = { 14 | Type = "simple"; 15 | ExecStart = "${pkgs.hyprpaper}/bin/hyprpaper"; 16 | Restart = "on-failure"; 17 | }; 18 | Install.WantedBy = ["hyprland-session.target"]; 19 | }; 20 | home.packages = [wallpkgs]; 21 | xdg.configFile."hypr/hyprpaper.conf" = { 22 | text = let 23 | path = "${wallpkgs}/share/wallpapers/catppuccin/05.png"; 24 | in '' 25 | preload=${path} 26 | wallpaper=eDP-1,${path} 27 | splash=true 28 | ipc=off 29 | ''; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/init.lua: -------------------------------------------------------------------------------- 1 | require('plug-conf/lsp') 2 | require('plug-conf/dap') 3 | require('plug-conf/treesitter') 4 | require('plug-conf/bufferline') 5 | require('plug-conf.navic') 6 | require('plug-conf/legendary') 7 | --require('plug-conf/coq') 8 | require('plug-conf/cmp') 9 | require('plug-conf/lualine') 10 | require('plug-conf/nvim-tree') 11 | require('plug-conf/git') 12 | require('plug-conf/toggleterm') 13 | require('plug-conf/alpha') 14 | 15 | -- Misc. Plugin Settings 16 | require("indent_blankline").setup({ 17 | show_current_context = true, 18 | show_current_context_start = true, 19 | show_end_of_line = true, 20 | space_char_blankline = " ", 21 | }) 22 | require("colorizer").setup() 23 | require("cleanfold").setup() 24 | require("scrollview").setup({ 25 | excluded_filetypes = { "NvimTree", "alpha", "Trouble", "Outline" }, 26 | }) -------------------------------------------------------------------------------- /home/gui/ironbar/styles/_colors.scss: -------------------------------------------------------------------------------- 1 | $rosewater: #f5e0dc; 2 | $flamingo: #f2cdcd; 3 | $pink: #f5c2e7; 4 | $mauve: #cba6f7; 5 | $red: #f38ba8; 6 | $maroon: #eba0ac; 7 | $peach: #fab387; 8 | $yellow: #f9e2af; 9 | $green: #a6e3a1; 10 | $teal: #94e2d5; 11 | $sky: #89dceb; 12 | $sapphire: #74c7ec; 13 | $blue: #89b4fa; 14 | $lavender: #b4befe; 15 | 16 | $text: #cdd6f4; 17 | $subtext1: #bac2de; 18 | $subtext0: #a6adc8; 19 | $overlay2: #9399b2; 20 | $overlay1: #7f849c; 21 | $overlay0: #6c7086; 22 | 23 | $surface2: #585b70; 24 | $surface1: #45475a; 25 | $surface0: #313244; 26 | 27 | $base: #1e1e2e; 28 | $mantle: #181825; 29 | $crust: #11111b; 30 | 31 | $fg: $text; 32 | $bg: $base; 33 | $bg1: $surface0; 34 | $border: #28283d; 35 | $shadow: $crust; 36 | -------------------------------------------------------------------------------- /home/gui/eww/modules/music.yuck: -------------------------------------------------------------------------------- 1 | (defwidget music-module [] 2 | (eventbox 3 | :onhover "${EWW_CMD} update music_reveal=true" 4 | :onhoverlost "${EWW_CMD} update music_reveal=false" 5 | (box 6 | :class "module" 7 | :space-evenly "false" 8 | (box 9 | :class "song-cover-art" 10 | :style "background-image: url(\"${music_cover}\");") 11 | (button 12 | :class "module" 13 | :onclick "${EWW_CMD} open --toggle music" 14 | {music.title}) 15 | (revealer 16 | :transition "slideright" 17 | :reveal music_reveal 18 | :duration "350ms" 19 | (box 20 | (button :class "song-button" :onclick "playerctl previous" "") 21 | (button :class "song-button" :onclick "playerctl play-pause" {music.status}) 22 | (button :class "song-button" :onclick "playerctl next" "")))))) 23 | -------------------------------------------------------------------------------- /home/gui/eww/modules/variables.yuck: -------------------------------------------------------------------------------- 1 | (defvar bright_reveal false) 2 | (defvar bt_rev false) 3 | (defvar music_reveal false) 4 | (defvar notif_rev false) 5 | (defvar net_rev false) 6 | (defvar time_rev false) 7 | (defvar vol_reveal false) 8 | 9 | (defpoll time :interval "5s" `date +'{"date": "%-d/%m", "hour": "%-I", "minute": "%M", "day": "%A"}'`) 10 | 11 | (deflisten airplane "scripts/airplane") 12 | (deflisten battery "scripts/battery") 13 | (deflisten bluetooth "scripts/bluetooth") 14 | (deflisten brightness "scripts/brightness") 15 | (deflisten memory "scripts/memory") 16 | (deflisten music "scripts/music") 17 | (deflisten music_cover "scripts/music cover") 18 | (deflisten notifications "scripts/notifications") 19 | (deflisten notif_icons :initial `{"icon": "󰆄", "toggle_icon": ""}` "scripts/notifications icons") 20 | (deflisten net "scripts/net") 21 | (deflisten volume "scripts/volume") 22 | (deflisten workspace "scripts/workspaces") 23 | -------------------------------------------------------------------------------- /modules/booting.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | lib, 5 | ... 6 | }: { 7 | # Bootloader. 8 | boot.plymouth = { 9 | enable = true; 10 | themePackages = [(pkgs.catppuccin-plymouth.override {variant = "mocha";})]; 11 | theme = "catppuccin-mocha"; 12 | #font = "${pkgs.nerdfonts.override {fonts = ["VictorMono"];}}/share/fonts/truetype/NerdFonts/Victor\ Mono\ Regular\ Nerd\ Font\ Complete\ Mono.ttf"; 13 | }; 14 | boot.loader.systemd-boot.enable = lib.mkForce false; 15 | boot.loader.systemd-boot.configurationLimit = 5; 16 | boot.loader.efi.canTouchEfiVariables = true; 17 | boot.loader.efi.efiSysMountPoint = "/boot/efi"; 18 | boot.kernelPackages = pkgs.linuxPackages_xanmod_latest; # inputs.chaotic.packages.${pkgs.hostPlatform.system}.linuxPackages_cachyos; #pkgs.linuxPackages_cachyos; 19 | boot.bootspec.enable = true; 20 | boot.lanzaboote = { 21 | enable = true; 22 | pkiBundle = "/etc/secureboot"; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /home/media/mpv.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | ... 5 | }: { 6 | programs.mpv = { 7 | enable = true; 8 | config = { 9 | sub-auto = "fuzzy"; 10 | sub-bold = "yes"; 11 | 12 | scale = "ewa_lanczossharp"; 13 | cscale = "ewa_lanczossharp"; 14 | video-sync = "display-resample"; 15 | interpolation = true; 16 | tscale = "oversample"; 17 | 18 | osc = false; 19 | border = false; 20 | 21 | slang = "enUS"; 22 | 23 | #ytdl-raw-options="sub-format=srt"; 24 | #ytdl-raw-options="add-metadata="; 25 | #ytdl-raw-options="embed-thumbnail="; 26 | #ytdl-raw-options="external-downloader=aria2c"; 27 | #ytdl-raw-options="external-downloader-args=-c -j 3 -x 3 -s 3 -k 1M"; 28 | 29 | hwdec = "auto-safe"; 30 | vo = "gpu"; 31 | profile = "gpu-hq"; 32 | gpu-context = "wayland"; 33 | }; 34 | scripts = with pkgs.mpvScripts; [mpris thumbnail]; 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /home/develop/editors/helix.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | pkgs, 4 | ... 5 | }: { 6 | programs.helix = { 7 | enable = true; 8 | package = inputs.helix.packages.${pkgs.system}.default; 9 | settings = { 10 | theme = "catppuccin_mocha"; 11 | editor = { 12 | true-color = true; 13 | color-modes = true; 14 | cursorline = true; 15 | cursor-shape = { 16 | insert = "bar"; 17 | normal = "block"; 18 | select = "underline"; 19 | }; 20 | # indent-guides = { 21 | # render = true; 22 | # rainbow = "dim"; 23 | # }; 24 | # rainbow-brackets = true; 25 | }; 26 | keys.normal.space.u = { 27 | f = ":format"; # format using LSP formatter 28 | a = ["select_all" ":pipe alejandra -q"]; # format Nix with Alejandra 29 | w = ":set whitespace.render all"; 30 | W = ":set whitespace.render none"; 31 | }; 32 | }; 33 | }; 34 | } 35 | -------------------------------------------------------------------------------- /home/cli/default.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | ./bat.nix 4 | ./cava.nix 5 | ./macchina.nix 6 | ./zsh.nix 7 | ./btop.nix 8 | ./zellij.nix 9 | ]; 10 | home.packages = with pkgs; [ 11 | trashy 12 | socat 13 | unzip 14 | vivid 15 | ]; 16 | programs.kitty = { 17 | enable = true; 18 | theme = "Catppuccin-Mocha"; 19 | settings = { 20 | confirm_os_window_close = "0"; 21 | }; 22 | }; 23 | programs.zoxide = { 24 | enable = true; 25 | }; 26 | 27 | programs.fzf = { 28 | enable = true; 29 | defaultOptions = [ 30 | "--color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8" 31 | "--color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc" 32 | "--color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8" 33 | ]; 34 | }; 35 | programs.direnv.enable = true; 36 | programs.direnv.nix-direnv.enable = true; 37 | programs.nix-index.enable = true; 38 | programs.command-not-found.enable = false; 39 | } 40 | -------------------------------------------------------------------------------- /home/gui/colors.nix: -------------------------------------------------------------------------------- 1 | rec { 2 | base = { 3 | rosewater = "#f5e0dc"; 4 | flamingo = "#f2cdcd"; 5 | pink = "#f5c2e7"; 6 | mauve = "#cba6f7"; 7 | red = "#f38ba8"; 8 | maroon = "#eba0ac"; 9 | peach = "#fab387"; 10 | yellow = "#f9e2af"; 11 | green = "#a6e3a1"; 12 | teal = "#94e2d5"; 13 | sky = "#89dceb"; 14 | sapphire = "#74c7ec"; 15 | blue = "#89b4fa"; 16 | lavender = "#b4befe"; 17 | 18 | text = "#cdd6f4"; 19 | subtext1 = "#bac2de"; 20 | subtext0 = "#a6adc8"; 21 | overlay2 = "#9399b2"; 22 | overlay1 = "#7f849c"; 23 | overlay0 = "#6c7086"; 24 | 25 | surface2 = "#585b70"; 26 | surface1 = "#45475a"; 27 | surface0 = "#313244"; 28 | 29 | base = "#1e1e2e"; 30 | mantle = "#181825"; 31 | crust = "#11111b"; 32 | 33 | border = "#28283d"; 34 | }; 35 | extra = 36 | { 37 | fg = base.text; 38 | bg = base.base; 39 | bg1 = base.surface0; 40 | shadow = base.crust; 41 | } 42 | // base; 43 | } 44 | -------------------------------------------------------------------------------- /modules/fonts.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | fonts = { 3 | fonts = with pkgs; [ 4 | # icon fonts 5 | material-icons 6 | material-design-icons 7 | font-awesome_5 8 | 9 | # normal fonts 10 | noto-fonts 11 | noto-fonts-cjk 12 | noto-fonts-emoji 13 | roboto 14 | 15 | # nerdfonts 16 | (nerdfonts.override {fonts = ["FiraCode" "JetBrainsMono" "VictorMono"];}) 17 | ]; 18 | 19 | # use fonts specified by user rather than default ones 20 | enableDefaultFonts = false; 21 | 22 | # user defined fonts 23 | # the reason there's Noto Color Emoji everywhere is to override DejaVu's 24 | # B&W emojis that would sometimes show instead of some Color emojis 25 | fontconfig.defaultFonts = { 26 | serif = ["Noto Serif" "Noto Color Emoji"]; 27 | sansSerif = ["Noto Sans" "Noto Color Emoji"]; 28 | monospace = ["JetBrainsMono Nerd Font" "FiraCode Nerd Font" "Noto Color Emoji"]; 29 | emoji = ["Noto Color Emoji"]; 30 | }; 31 | }; 32 | } 33 | -------------------------------------------------------------------------------- /home/gaming/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | ... 5 | }: let 6 | patched-glfw = with pkgs; let 7 | mcWaylandPatchRepo = fetchFromGitHub { 8 | owner = "Admicos"; 9 | repo = "minecraft-wayland"; 10 | rev = "370ce5b95e3ae9bc4618fb45113bc641fbb13867"; 11 | sha256 = "sha256-RPRg6Gd7N8yyb305V607NTC1kUzvyKiWsh6QlfHW+JE="; 12 | }; 13 | mcWaylandPatches = 14 | map (name: "${mcWaylandPatchRepo}/${name}") 15 | (lib.naturalSort (builtins.attrNames (lib.filterAttrs 16 | (name: type: 17 | type == "regular" && lib.hasSuffix ".patch" name) 18 | (builtins.readDir mcWaylandPatchRepo)))); 19 | in 20 | glfw-wayland.overrideAttrs (previousAttrs: { 21 | patches = previousAttrs.patches ++ mcWaylandPatches; 22 | }); 23 | prism = inputs.prismlauncher.packages.${pkgs.hostPlatform.system}.prismlauncher-qt5; 24 | in { 25 | home.packages = with pkgs; [ 26 | #patched-glfw 27 | grapejuice 28 | prism 29 | piper 30 | osu-lazer-bin 31 | ]; 32 | } 33 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/extra.lua: -------------------------------------------------------------------------------- 1 | local M = {} 2 | 3 | M.ascii_art = { 4 | { 5 | [[ _ ]], 6 | [[ (_) ]], 7 | [[ _ __ ___ _____ ___ _ __ ___ ]], 8 | [[ | '_ \ / _ \/ _ \ \ / / | '_ ` _ \ ]], 9 | [[ | | | | __/ (_) \ V /| | | | | | |]], 10 | [[ |_| |_|\___|\___/ \_/ |_|_| |_| |_|]] 11 | }, 12 | { 13 | [[╭╮╭┬─╮╭─╮┬ ┬┬╭┬╮]], 14 | [[│││├┤ │ │╰┐┌╯││││]], 15 | [[╯╰╯╰─╯╰─╯ ╰╯ ┴┴ ┴]] 16 | }, 17 | { 18 | [[┌┐┌┬─┐┌─┐┬ ┬┬┌┬┐]], 19 | [[│││├┤ │ │└┐┌┘││││]], 20 | [[┘└┘└─┘└─┘ └┘ ┴┴ ┴]] 21 | }, 22 | { 23 | [[ __ ]], 24 | [[ ___ ___ ___ __ __ /\_\ ___ ___ ]], 25 | [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]], 26 | [[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]], 27 | [[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]], 28 | [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]] 29 | }, 30 | } 31 | 32 | return M 33 | -------------------------------------------------------------------------------- /home/profiles/default.nix: -------------------------------------------------------------------------------- 1 | self: { 2 | hm, 3 | nixpkgs, 4 | ... 5 | } @ inputs: let 6 | inherit (self) lib; 7 | sharedModules = [ 8 | inputs.nix-colors.homeManagerModule 9 | inputs.nix-index-database.hmModules.nix-index 10 | inputs.neovim-flake.homeManagerModules.default 11 | ../../secrets/home.nix 12 | ../../home.nix 13 | ]; 14 | graphicalModules = with inputs; [ 15 | hyprland.homeManagerModules.default 16 | ironbar.homeManagerModules.default 17 | hpr_scratcher.homeManagerModules.default 18 | anyrun.homeManagerModules.default 19 | ]; 20 | homeImports = { 21 | "yavor@envious" = sharedModules ++ graphicalModules ++ [./envious/yavor.nix]; 22 | }; 23 | extraSpecialArgs = lib.hmExtraSpecialArgs; 24 | in { 25 | inherit homeImports extraSpecialArgs; 26 | homeConfigurations = { 27 | "yavor@envious" = hm.lib.homeManagerConfiguration { 28 | pkgs = nixpkgs.legacyPackages.x86_64-linux; 29 | modules = homeImports."yavor@envious"; 30 | extraSpecialArgs = lib.mkExtraSpecialArgs {}; 31 | }; 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /home/gui/eww/scripts/net: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | toggle() { 4 | status=$(rfkill -J | gojq -r '.rfkilldevices[] | select(.type == "wlan") | .soft' | head -1) 5 | 6 | if [ "$status" = "unblocked" ]; then 7 | rfkill block wlan 8 | else 9 | rfkill unblock wlan 10 | fi 11 | } 12 | 13 | if [ "$1" = "toggle" ]; then 14 | toggle 15 | else 16 | while true; do 17 | status=$(nmcli g | tail -n 1 | awk '{print $1}') 18 | signal=$(nmcli -f in-use,signal dev wifi | rg "\*" | awk '{ print $2 }') 19 | essid=$(nmcli -t -f NAME connection show --active | head -n1) 20 | 21 | icons=("󰤯" "󰤟" "󰤢" "󰤥" "󰤨") 22 | 23 | if [ "$status" = "disconnected" ] ; then 24 | icon="" 25 | color="#988ba2" 26 | else 27 | level=$(awk -v n="$signal" 'BEGIN{print int((n-1)/20)}') 28 | if [ "$level" -gt 4 ]; then 29 | level=4 30 | fi 31 | 32 | icon=${icons[$level]} 33 | color="#cba6f7" 34 | fi 35 | 36 | echo '{ "essid": "'"$essid"'", "icon": "'"$icon"'", "color": "'"$color"'" }' 37 | 38 | sleep 3 39 | done 40 | fi 41 | -------------------------------------------------------------------------------- /home/gui/gtk.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | ... 5 | }: rec { 6 | home.packages = [ 7 | home.pointerCursor.package 8 | gtk.theme.package 9 | gtk.iconTheme.package 10 | ]; 11 | gtk = { 12 | enable = true; 13 | 14 | font = { 15 | name = "Roboto"; 16 | package = pkgs.roboto; 17 | }; 18 | 19 | gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc"; 20 | 21 | iconTheme = { 22 | name = "Papirus-Dark"; 23 | package = pkgs.catppuccin-papirus-folders.override { 24 | flavor = "mocha"; 25 | accent = "peach"; 26 | }; 27 | }; 28 | 29 | theme = { 30 | name = "Catppuccin-Mocha-Compact-Peach-dark"; 31 | package = pkgs.catppuccin-gtk.override { 32 | size = "compact"; 33 | accents = ["peach"]; 34 | variant = "mocha"; 35 | }; 36 | }; 37 | }; 38 | home.pointerCursor = { 39 | package = pkgs.catppuccin-cursors.mochaDark; 40 | name = "Catppuccin-Mocha-Dark-Cursors"; 41 | size = 24; 42 | gtk.enable = true; 43 | x11.enable = true; 44 | }; 45 | } 46 | -------------------------------------------------------------------------------- /home/gui/eww/css/_notification.scss: -------------------------------------------------------------------------------- 1 | .notifications-box { 2 | @include window; 3 | background: $bg; 4 | padding: 1rem; 5 | } 6 | 7 | .notification { 8 | background-color: $surface0; 9 | border-bottom: 1px solid $bg; 10 | padding: .5rem; 11 | 12 | box { margin-bottom: .5rem; } 13 | 14 | label { font-size: 1rem; } 15 | 16 | &:hover { 17 | border: 1px solid $border; 18 | } 19 | 20 | .appname { 21 | color: $peach; 22 | font-weight: bold; 23 | } 24 | 25 | .summary { 26 | color: $text; 27 | font-weight: bold; 28 | } 29 | 30 | .body { color: $text; } 31 | } 32 | 33 | .container { 34 | &:first-child { border-radius: 8px 8px 0 0; }; 35 | &:last-child { border-radius: 0 0 8px 8px; }; 36 | } 37 | 38 | .notification-header { 39 | margin-bottom: 1rem; 40 | } 41 | 42 | .notification-label { 43 | color: $blue; 44 | font-size: 1.5rem; 45 | } 46 | 47 | .notification-action { 48 | border-radius: 50%; 49 | padding: .3rem; 50 | 51 | label { 52 | color: $text; 53 | font-size: 1.2rem; 54 | } 55 | 56 | &:hover { 57 | background: $surface0; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/default.nix: -------------------------------------------------------------------------------- 1 | {...}: let 2 | plugConfRequire = module: 3 | builtins.readFile (builtins.toString ./. + "/${module}.lua"); 4 | plugConfig = builtins.concatStringsSep "\n" (map plugConfRequire [ 5 | "lsp" 6 | "dap" 7 | "treesitter" 8 | "bufferline" 9 | "navic" 10 | "cmp" 11 | "lualine" 12 | "nvim-tree" 13 | "git" 14 | "toggleterm" 15 | "alpha" 16 | ]); 17 | in '' 18 | require("indent_blankline").setup({ 19 | show_current_context = true, 20 | show_current_context_start = true, 21 | show_end_of_line = true, 22 | space_char_blankline = " ", 23 | char_highlight_list = { 24 | "IndentBlanklineIndent1", 25 | "IndentBlanklineIndent2", 26 | "IndentBlanklineIndent3", 27 | "IndentBlanklineIndent4", 28 | "IndentBlanklineIndent5", 29 | "IndentBlanklineIndent6", 30 | }, 31 | }) 32 | require("colorizer").setup() 33 | require("cleanfold").setup() 34 | require("scrollview").setup({ 35 | excluded_filetypes = { "NvimTree", "alpha", "Trouble", "Outline" }, 36 | }) 37 | ${plugConfig} 38 | '' 39 | -------------------------------------------------------------------------------- /home/gui/eww/css/_system.scss: -------------------------------------------------------------------------------- 1 | .membar { 2 | color: $peach; 3 | } 4 | 5 | .cpubar { 6 | color: $blue; 7 | } 8 | 9 | .batbar { 10 | color: $green; 11 | } 12 | 13 | .membar, 14 | .cpubar, 15 | .batbar { 16 | background-color: $bg1; 17 | } 18 | 19 | .iconmem { 20 | color: $peach; 21 | } 22 | 23 | .iconcpu { 24 | color: $blue; 25 | } 26 | 27 | .icon-text { 28 | font-size: 3rem; 29 | padding: .7rem; 30 | } 31 | 32 | .sys-text-sub { 33 | color: $text; 34 | } 35 | 36 | .sys-text-mem, 37 | .sys-text-cpu { 38 | font-size: 1rem; 39 | font-weight: bold; 40 | } 41 | 42 | .sys-icon-mem, 43 | .sys-icon-cpu { 44 | font-size: 1.5rem; 45 | margin: 1.5rem; 46 | } 47 | 48 | .system-info-box { 49 | @include rounding; 50 | background-color: $surface0; 51 | margin: .5rem 1rem; 52 | padding: .5rem; 53 | } 54 | 55 | .sys-mem, 56 | .sys-cpu { 57 | background-color: $bg; 58 | } 59 | 60 | .sys-icon-mem, 61 | .sys-text-mem, 62 | .sys-mem { 63 | color: $peach; 64 | } 65 | 66 | .sys-icon-cpu, 67 | .sys-text-cpu, 68 | .sys-cpu { 69 | color: $blue; 70 | } 71 | 72 | .sys-box { 73 | margin: .3em; 74 | 75 | box { margin-left: 1rem; } 76 | } 77 | -------------------------------------------------------------------------------- /modules/compat.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | ... 5 | }: { 6 | environment.systemPackages = [(inputs.nix-alien.packages.${pkgs.system}.nix-alien)]; 7 | programs.nix-ld.enable = true; 8 | programs.nix-ld.libraries = with pkgs; [ 9 | stdenv.cc.cc 10 | fuse3 11 | alsa-lib 12 | at-spi2-atk 13 | at-spi2-core 14 | atk 15 | cairo 16 | cups 17 | curl 18 | dbus 19 | expat 20 | fontconfig 21 | freetype 22 | gdk-pixbuf 23 | glib 24 | gtk3 25 | libGL 26 | libappindicator-gtk3 27 | libdrm 28 | libnotify 29 | libpulseaudio 30 | libuuid 31 | libusb1 32 | xorg.libxcb 33 | libxkbcommon 34 | mesa 35 | nspr 36 | nss 37 | pango 38 | pipewire 39 | systemd 40 | icu 41 | openssl 42 | xorg.libX11 43 | xorg.libXScrnSaver 44 | xorg.libXcomposite 45 | xorg.libXcursor 46 | xorg.libXdamage 47 | xorg.libXext 48 | xorg.libXfixes 49 | xorg.libXi 50 | xorg.libXrandr 51 | xorg.libXrender 52 | xorg.libXtst 53 | xorg.libxkbfile 54 | xorg.libxshmfence 55 | zlib 56 | ]; 57 | programs.nix-index.enable = true; 58 | programs.command-not-found.enable = false; # needed cuz above :p 59 | } 60 | -------------------------------------------------------------------------------- /home/gui/eww/css/_music.scss: -------------------------------------------------------------------------------- 1 | .song-cover-art { 2 | @include rounding; 3 | background-position: center; 4 | background-size: cover; 5 | margin: 4px 5px 4px 0; 6 | min-height: 24px; 7 | min-width: 24px; 8 | } 9 | 10 | .music-window { 11 | @include window; 12 | background-color: $bg; 13 | border: 1px solid $border; 14 | color: $fg; 15 | } 16 | 17 | .music-cover-art { 18 | background-position: center; 19 | background-size: cover; 20 | border-radius: 8px; 21 | margin: 1em; 22 | min-height: 170px; 23 | min-width: 170px; 24 | } 25 | 26 | .music-box { 27 | margin: 1rem 1rem 1rem 0; 28 | } 29 | 30 | .music-title { 31 | font-weight: bold; 32 | font-size: 1.1rem; 33 | } 34 | 35 | .music-artist { 36 | color: $subtext1; 37 | } 38 | 39 | .music-button label { 40 | color: $subtext1; 41 | font-size: 2rem; 42 | } 43 | 44 | .music-time { 45 | color: $subtext1; 46 | margin: 0 1rem; 47 | } 48 | 49 | .music-bar scale { 50 | highlight { 51 | background-image: linear-gradient(to right, $teal 30%, $sky 100%); 52 | border-radius: 24px; 53 | } 54 | 55 | trough { 56 | background-color: $bg1; 57 | border-radius: 24px; 58 | margin-top: 0; 59 | min-height: 10px; 60 | min-width: 170px; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /home/develop/default.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | imports = [ 3 | # ./editors 4 | ./neovim-flake.nix 5 | ]; 6 | 7 | home.packages = with pkgs; [ 8 | rust-bin.nightly.latest.default 9 | cargo-generate 10 | neovide 11 | gh 12 | ]; 13 | programs.ssh = { 14 | enable = true; 15 | # extraConfig = '' 16 | # IdentityAgent ${config.home.homeDirectory}/.1password/agent.sock 17 | # ''; 18 | }; 19 | programs.git = { 20 | enable = true; 21 | difftastic = { 22 | enable = true; 23 | }; 24 | extraConfig = { 25 | diff.colorMoved = "default"; 26 | merge.conflictstyle = "diff3"; 27 | url = { 28 | "https://github.com/" = {insteadOf = "gh:";}; 29 | "git@github.com:" = {insteadOf = "gh:";}; 30 | }; 31 | #gpg.ssh.program = "${pkgs._1password-gui}/share/1password/op-ssh-sign"; 32 | #gpg.format = "ssh"; 33 | }; 34 | aliases = {}; 35 | ignores = ["*~" "*.swp" "*result*" ".direnv" "node_modules"]; 36 | signing = { 37 | key = "F07D19A32407F857"; 38 | #key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEDGzxjYoalywVSGUXuU6cBDhuwgIIpElTjkz9fpBIxJ"; 39 | signByDefault = true; 40 | }; 41 | userEmail = "yavornkolev@gmail.com"; 42 | userName = "yavko"; 43 | }; 44 | } 45 | -------------------------------------------------------------------------------- /lib.nix: -------------------------------------------------------------------------------- 1 | inputs: let 2 | inherit (inputs.nixpkgs) lib; 3 | inherit (inputs) self; 4 | slib = inputs.nix-std.lib; 5 | defaultArgs = { 6 | inherit inputs; 7 | inherit (inputs) nix-colors; 8 | }; 9 | mkExtraSpecialArgs = args: (defaultArgs // args); 10 | in 11 | slib 12 | // lib 13 | // { 14 | inherit mkExtraSpecialArgs; 15 | nixosExtraSpecialArgs = mkExtraSpecialArgs { 16 | inherit (self) lib; 17 | }; 18 | hmExtraSpecialArgs = mkExtraSpecialArgs { 19 | std = slib; 20 | }; 21 | genSystems = lib.genAttrs ["x86_64-linux"]; 22 | nixpkgsConfig = {...}: { 23 | nixpkgs.overlays = with inputs; [ 24 | rust-overlay.overlays.default 25 | hyprpicker.overlays.default 26 | hyprpaper.overlays.default 27 | hyprland-contrib.overlays.default 28 | hyprland.overlays.default 29 | #aagl.overlays.default 30 | neovim-nightly-overlay.overlay 31 | #prismlauncher.overlays.default 32 | #hpr_scratcher.overlay.default 33 | #anyrun.overlay 34 | alejandra.overlay 35 | #nil.overlays.default 36 | ]; 37 | nixpkgs.config.allowUnfreePredicate = pkg: true; 38 | nixpkgs.config = { 39 | allowUnfree = true; 40 | allowBroken = false; 41 | allowUnsupportedSystems = true; 42 | }; 43 | }; 44 | } 45 | -------------------------------------------------------------------------------- /home/gui/eww/README.md: -------------------------------------------------------------------------------- 1 | # Eww configuration 2 | 3 | This configuration aims to provide a fully working shell replacement for 4 | compositors/window managers. Features constantly get added and existing ones 5 | get improved. 6 | 7 | ## 🗃️ Components 8 | 9 | The same daemon runs multiple windows which interact with each other: 10 | 11 | ### bar 12 | 13 | ![bar](https://user-images.githubusercontent.com/36706276/192146060-9913d571-abee-4683-9f77-ea1951680cc1.gif) 14 | 15 | ### music window 16 | 17 | ![music](https://user-images.githubusercontent.com/36706276/192146077-f8da4691-9a0c-487f-9805-3fd4d55551e9.gif) 18 | 19 | ### calendar 20 | 21 | ![calendar](https://user-images.githubusercontent.com/36706276/192146093-217f68ac-fde9-400e-ade1-e9078139d327.png) 22 | 23 | ### system info 24 | 25 | ![system](https://user-images.githubusercontent.com/36706276/192146100-133b195c-d348-4fe4-a29b-ad8fc39f3b0b.png) 26 | 27 | ### volume control 28 | 29 | ![volume](https://user-images.githubusercontent.com/36706276/192146111-77d7c92d-defd-4cfa-9d26-7e6fb6b40f86.png) 30 | 31 | ## ❔ Usage 32 | 33 | To quickly install this config, grab all the files in this directory and put 34 | them in `~/.config/eww`. Then run `eww daemon` and `eww open bar`. Enjoy! 35 | 36 | ## 🎨 Theme 37 | 38 | The theme colors can be changed in `css/_colors.scss`. Currently the theme used 39 | is [Catppuccin Mocha](https://github.com/catppuccin/catppuccin). 40 | -------------------------------------------------------------------------------- /home/gui/eww/scripts/bluetooth: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | declare -A baticon=([10]="󰤾" [20]="󰤿" [30]="󰥀" [40]="󰥁" [50]="󰥂" [60]="󰥃" [70]="󰥄" [80]="󰥅" [90]="󰥆" [100]="󰥈") 4 | 5 | toggle() { 6 | status=$(rfkill -J | gojq -r '.rfkilldevices[] | select(.type == "bluetooth") | .soft' | head -1) 7 | 8 | if [ "$status" = "unblocked" ]; then 9 | rfkill block bluetooth 10 | else 11 | rfkill unblock bluetooth 12 | fi 13 | } 14 | 15 | if [ "$1" = "toggle" ]; then 16 | toggle 17 | else 18 | while true; do 19 | powered=$(bluetoothctl show | rg Powered | cut -f 2- -d ' ') 20 | status=$(bluetoothctl info) 21 | name=$(echo "$status" | rg Name | cut -f 2- -d ' ') 22 | mac=$(echo "$status" | head -1 | awk '{print $2}' | tr ':' '_') 23 | 24 | if [[ "$(echo "$status" | rg Percentage)" != "" ]]; then 25 | battery=$(upower -i /org/freedesktop/UPower/devices/headset_dev_"$mac" | rg percentage | awk '{print $2}' | cut -f 1 -d '%') 26 | batt_icon=${baticon[$battery]} 27 | else 28 | batt_icon="" 29 | fi 30 | 31 | if [ "$powered" = "yes" ]; then 32 | if [ "$status" != "Missing device address argument" ]; then 33 | text="$name" 34 | icon="" 35 | color="#b4befe" 36 | else 37 | icon="" 38 | text="Disconnected" 39 | color="#45475a" 40 | fi 41 | else 42 | icon="" 43 | text="Bluetooth off" 44 | color="#45475a" 45 | fi 46 | 47 | echo '{ "icon": "'"$icon"'", "batt_icon": "'"$batt_icon"'", "text": "'"$text"'", "color": "'"$color"'" }' 48 | 49 | sleep 3 50 | done 51 | fi 52 | -------------------------------------------------------------------------------- /home/gui/eww/windows/music.yuck: -------------------------------------------------------------------------------- 1 | (defwidget music [] 2 | (box 3 | :class "music-window" 4 | :space-evenly false 5 | (box 6 | :class "music-cover-art" 7 | :style "background-image: url(\"${music_cover}\");") 8 | (box 9 | :orientation "v" 10 | :class "music-box" 11 | (label 12 | :class "music-title" 13 | :wrap true 14 | :text {music.title}) 15 | (label 16 | :class "music-artist" 17 | :wrap true 18 | :text {music.artist}) 19 | (centerbox 20 | :halign "center" 21 | :class "music-button-box" 22 | (button :class "music-button" :onclick "playerctl previous" "") 23 | (button :class "music-button" :onclick "playerctl play-pause" {music.status}) 24 | (button :class "music-button" :onclick "playerctl next" "")) 25 | (box 26 | :orientation "v" 27 | (box 28 | (label 29 | :xalign 0 30 | :class "music-time" 31 | :text {music.position_time}) 32 | (label 33 | :xalign 1 34 | :class "music-time" 35 | :text {music.length})) 36 | (box 37 | :class "music-bar" 38 | (scale 39 | :onchange "playerctl position `bc <<< \"{} * $(playerctl metadata mpris:length) / 1000000 / 100\"`" 40 | :value {music.position})))))) 41 | 42 | (defwindow music 43 | :stacking "fg" 44 | :focusable "false" 45 | :monitor 0 46 | :geometry (geometry 47 | :x "0%" 48 | :y "0%" 49 | :width "0%" 50 | :height "0%" 51 | :anchor "top center") 52 | (music)) 53 | -------------------------------------------------------------------------------- /home/gui/eww/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | pkgs, 4 | inputs, 5 | lib, 6 | ... 7 | }: let 8 | dependencies = with pkgs; [ 9 | config.wayland.windowManager.hyprland.package 10 | config.programs.eww.package 11 | bash 12 | bc 13 | blueberry 14 | bluez 15 | coreutils 16 | dbus 17 | dunst 18 | findutils 19 | gawk 20 | gnused 21 | gojq 22 | iwgtk 23 | light 24 | networkmanager 25 | networkmanagerapplet 26 | pavucontrol 27 | playerctl 28 | procps 29 | pulseaudio 30 | ripgrep 31 | socat 32 | udev 33 | upower 34 | util-linux 35 | wget 36 | wireplumber 37 | wlogout 38 | wofi 39 | ]; 40 | in { 41 | programs.eww = { 42 | enable = true; 43 | package = inputs.eww.packages.${pkgs.system}.eww-wayland; 44 | # remove nix files 45 | configDir = lib.cleanSourceWith { 46 | filter = name: _type: let 47 | baseName = baseNameOf (toString name); 48 | in 49 | !(lib.hasSuffix ".nix" baseName); 50 | src = lib.cleanSource ./.; 51 | }; 52 | }; 53 | 54 | systemd.user.services.eww = { 55 | Unit = { 56 | Description = "Eww Daemon"; 57 | # not yet implemented 58 | # PartOf = ["tray.target"]; 59 | PartOf = ["graphical-session.target"]; 60 | }; 61 | Service = { 62 | Environment = "PATH=/run/wrappers/bin:${lib.makeBinPath dependencies}"; 63 | ExecStart = "${config.programs.eww.package}/bin/eww daemon --no-daemonize"; 64 | Restart = "on-failure"; 65 | }; 66 | Install.WantedBy = ["graphical-session.target"]; 67 | }; 68 | } 69 | -------------------------------------------------------------------------------- /home/gui/xdg.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | ... 5 | }: let 6 | browser = ["firefox.desktop"]; 7 | fm = ["pcmanfm.desktop"]; 8 | # XDG MIME types 9 | associations = { 10 | "application/x-extension-htm" = browser; 11 | "application/x-extension-html" = browser; 12 | "application/x-extension-shtml" = browser; 13 | "application/x-extension-xht" = browser; 14 | "application/x-extension-xhtml" = browser; 15 | "application/xhtml+xml" = browser; 16 | "text/html" = browser; 17 | "x-scheme-handler/about" = browser; 18 | #"x-scheme-handler/chrome" = ["chromium-browser.desktop"]; 19 | "x-scheme-handler/ftp" = browser; 20 | "x-scheme-handler/http" = browser; 21 | "x-scheme-handler/https" = browser; 22 | "x-scheme-handler/unknown" = browser; 23 | 24 | # File manager 25 | "inode/directory" = fm; 26 | "application/x-gnome-saved-search" = fm; 27 | 28 | "audio/*" = ["mpv.desktop"]; 29 | "video/*" = ["mpv.dekstop"]; 30 | "image/*" = ["imv.desktop"]; 31 | "application/json" = browser; 32 | "application/pdf" = ["org.pwmt.zathura.desktop.desktop"]; 33 | }; 34 | h = config.home.homeDirectory; 35 | in { 36 | home.packages = with pkgs; [xdg-utils]; 37 | xdg = { 38 | enable = true; 39 | cacheHome = h + "/.local/cache"; 40 | userDirs = { 41 | enable = true; 42 | createDirectories = true; 43 | extraConfig = { 44 | XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots"; 45 | }; 46 | }; 47 | mimeApps = { 48 | enable = true; 49 | defaultApplications = associations; 50 | }; 51 | }; 52 | } 53 | -------------------------------------------------------------------------------- /home/cli/btop.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | home.packages = with pkgs; [btop]; 3 | xdg.configFile."btop/themes/catppuccin_mocha.theme".text = '' 4 | theme[main_bg]="#1E1E2E" 5 | theme[main_fg]="#CDD6F4" 6 | theme[title]="#CDD6F4" 7 | theme[hi_fg]="#89B4FA" 8 | theme[selected_bg]="#45475A" 9 | theme[selected_fg]="#89B4FA" 10 | theme[inactive_fg]="#7F849C" 11 | theme[graph_text]="#F5E0DC" 12 | theme[meter_bg]="#45475A" 13 | theme[proc_misc]="#F5E0DC" 14 | theme[cpu_box]="#74C7EC" 15 | theme[mem_box]="#A6E3A1" 16 | theme[net_box]="#CBA6F7" 17 | theme[proc_box]="#F2CDCD" 18 | theme[div_line]="#6C7086" 19 | theme[temp_start]="#F9E2AF" 20 | theme[temp_mid]="#FAB387" 21 | theme[temp_end]="#F38BA8" 22 | theme[cpu_start]="#74C7EC" 23 | theme[cpu_mid]="#89DCEB" 24 | theme[cpu_end]="#94E2D5" 25 | theme[free_start]="#94E2D5" 26 | theme[free_mid]="#94E2D5" 27 | theme[free_end]="#A6E3A1" 28 | theme[cached_start]="#F5C2E7" 29 | theme[cached_mid]="#F5C2E7" 30 | theme[cached_end]="#CBA6F7" 31 | theme[available_start]="#F5E0DC" 32 | theme[available_mid]="#F2CDCD" 33 | theme[available_end]="#F2CDCD" 34 | theme[used_start]="#FAB387" 35 | theme[used_mid]="#FAB387" 36 | theme[used_end]="#F38BA8" 37 | theme[download_start]="#B4BEFE" 38 | theme[download_mid]="#B4BEFE" 39 | theme[download_end]="#CBA6F7" 40 | theme[upload_start]="#B4BEFE" 41 | theme[upload_mid]="#B4BEFE" 42 | theme[upload_end]="#CBA6F7" 43 | theme[process_start]="#74C7EC" 44 | theme[process_mid]="#89DCEB" 45 | theme[process_end]="#94E2D5" 46 | ''; 47 | } 48 | -------------------------------------------------------------------------------- /hosts/envious/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 | { 5 | config, 6 | lib, 7 | modulesPath, 8 | ... 9 | }: { 10 | imports = [ 11 | (modulesPath + "/installer/scan/not-detected.nix") 12 | ]; 13 | 14 | boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc"]; 15 | boot.initrd.kernelModules = []; 16 | boot.kernelModules = ["kvm-intel"]; 17 | boot.extraModulePackages = []; 18 | 19 | fileSystems."/" = { 20 | device = "/dev/disk/by-uuid/c9534db6-f555-4b45-b6e5-0ef16f3be7a8"; 21 | fsType = "ext4"; 22 | }; 23 | 24 | fileSystems."/boot/efi" = { 25 | device = "/dev/disk/by-uuid/8EC0-E34A"; 26 | fsType = "vfat"; 27 | }; 28 | 29 | swapDevices = []; 30 | 31 | # Enables DHCP on each ethernet and wireless interface. In case of scripted networking 32 | # (the default) this is the recommended approach. When using systemd-networkd it's 33 | # still possible to use this option, but it's recommended to use it in conjunction 34 | # with explicit per-interface declarations with `networking.interfaces..useDHCP`. 35 | networking.useDHCP = lib.mkDefault true; 36 | # networking.interfaces.wlo1.useDHCP = lib.mkDefault true; 37 | 38 | powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; 39 | hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; 40 | # high-resolution display 41 | #hardware.video.hidpi.enable = lib.mkDefault true; 42 | } 43 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/options.lua: -------------------------------------------------------------------------------- 1 | vim.g.minimap_width = 10 2 | vim.g.minimap_auto_start = 0 3 | vim.g.minimap_auto_start_win_enter = 0 4 | vim.g.mapleader = ";" 5 | vim.g.dracula_transparent_bg = true 6 | vim.g.dracula_show_end_of_buffer = false 7 | vim.g.do_filetype_lua = 1 8 | vim.g.cursorword_disable_filetypes = { "NvimTree", "alpha", "Trouble", "Outline" } 9 | vim.opt.laststatus = 3 10 | vim.opt.clipboard = "unnamedplus" 11 | vim.opt.termguicolors = true 12 | vim.opt.spell = true 13 | vim.opt.spelllang = { "en", "programming", "fr", "bg" } 14 | vim.opt.mouse = "a" 15 | vim.opt.relativenumber = true 16 | vim.opt.number = true 17 | vim.opt.list = true 18 | vim.opt.scrolloff = 1 19 | vim.opt.splitright = true 20 | vim.opt.splitbelow = true 21 | vim.go.listchars = "eol:↴,tab:⇥ ,space:·" 22 | vim.wo.fillchars = 'eob: ' 23 | vim.opt.whichwrap:append("<,>,[,]") 24 | vim.opt.showbreak = "↪ " 25 | vim.opt.undofile = true 26 | vim.opt.tabstop = 2 27 | vim.opt.shiftwidth = 2 28 | vim.opt.autoindent = true 29 | vim.opt.smarttab = true 30 | vim.opt.wrap = true 31 | vim.opt.guifont = "JetBrainsMono Nerd Font Mono Regular:h13" 32 | vim.opt.foldmethod = "expr" 33 | vim.opt.foldexpr = "nvim_treesitter#foldexpr()" 34 | vim.opt.foldenable = true 35 | vim.opt.foldlevel = 1000 36 | vim.opt.hidden = true 37 | vim.diagnostic.config({ 38 | virtual_text = false, 39 | virtual_lines = true 40 | }) 41 | vim.g.coq_settings = { 42 | auto_start = 'shut-up', 43 | display = { 44 | pum = { 45 | fast_close = true 46 | } 47 | } 48 | } 49 | 50 | 51 | vim.filetype.add({ 52 | extension = { 53 | mcmeta = "json", 54 | astro = "astro", 55 | njk = "html", 56 | v = "v" 57 | } 58 | }) 59 | -------------------------------------------------------------------------------- /hosts/default.nix: -------------------------------------------------------------------------------- 1 | inputs: let 2 | inherit (inputs) self; 3 | inherit (self.lib) nixosSystem nixosExtraSpecialArgs hmExtraSpecialArgs nixpkgsConfig; 4 | inherit (import "${self}/home/profiles" self inputs) homeImports; 5 | 6 | sharedModules = with inputs; [ 7 | { 8 | _module.args = { 9 | inherit inputs; 10 | inherit (self.lib) default; 11 | }; 12 | } 13 | hm.nixosModule 14 | agenix.nixosModules.default 15 | nur.nixosModules.nur 16 | nix-index-database.nixosModules.nix-index 17 | envfs.nixosModules.envfs 18 | ../modules/booting.nix 19 | ../modules/security.nix 20 | ../modules/compat.nix 21 | ../modules/network 22 | ../modules/nix-daemon.nix 23 | ./impurity-module.nix 24 | { 25 | home-manager = { 26 | useGlobalPkgs = true; 27 | extraSpecialArgs = hmExtraSpecialArgs; 28 | }; 29 | } 30 | nixpkgsConfig 31 | ]; 32 | graphicalModules = with inputs; [ 33 | hyprland.nixosModules.default 34 | ../modules/fonts.nix 35 | ../modules/greetd.nix 36 | ../modules/firefox.nix 37 | aagl.nixosModules.default 38 | chaotic.nixosModules.default 39 | ]; 40 | specialArgs = nixosExtraSpecialArgs; 41 | in rec { 42 | envious = nixosSystem { 43 | modules = 44 | [ 45 | ./envious 46 | inputs.lanzaboote.nixosModules.lanzaboote 47 | {home-manager.users.yavor.imports = homeImports."yavor@envious";} 48 | ] 49 | ++ sharedModules 50 | ++ graphicalModules; 51 | system = "x86_64-linux"; 52 | inherit specialArgs; 53 | }; 54 | envious-impure = envious.extendModules {modules = [{impurity.enable = true;}];}; 55 | } 56 | -------------------------------------------------------------------------------- /home/gui/eww/scripts/volume: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | volicons=("󰕿" "󰖀" "󰕾") 4 | 5 | vol() { 6 | wpctl get-volume @DEFAULT_AUDIO_"$1"@ | awk '{print int($2*100)}' 7 | } 8 | ismuted() { 9 | wpctl get-volume @DEFAULT_AUDIO_"$1"@ | rg -i muted 10 | echo $? 11 | } 12 | setvol() { 13 | wpctl set-volume @DEFAULT_AUDIO_"$1"@ "$(awk -v n="$2" 'BEGIN{print (n / 100)}')" 14 | } 15 | setmute() { 16 | wpctl set-mute @DEFAULT_AUDIO_"$1"@ toggle 17 | } 18 | 19 | if [ "$1" = "mute" ]; then 20 | if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then 21 | echo "Can only mute SINK or SOURCE"; exit 1 22 | fi 23 | setmute "$2" 24 | elif [ "$1" = "setvol" ]; then 25 | if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then 26 | echo "Can only set volume for SINK or SOURCE"; exit 1 27 | elif [ "$3" -lt 1 ] || [ "$3" -gt 100 ]; then 28 | echo "Volume must be between 1 and 100"; exit 1 29 | fi 30 | setvol "$2" "$3" 31 | else 32 | # initial values 33 | lvl=$(awk -v n="$(vol "SINK")" 'BEGIN{print int(n/34)}') 34 | ismuted=$(ismuted "SINK") 35 | 36 | if [ "$ismuted" = 1 ]; then 37 | icon="${volicons[$lvl]}" 38 | else 39 | icon="" 40 | fi 41 | echo '{ "icon": "'"$icon"'", "percent": "'"$(vol "SINK")"'", "microphone": "'"$(vol "SOURCE")"'" }' 42 | 43 | # event loop 44 | pactl subscribe | rg --line-buffered "change" | while read -r _; do 45 | lvl=$(awk -v n="$(vol "SINK")" 'BEGIN{print int(n/34)}') 46 | ismuted=$(ismuted "SINK") 47 | 48 | if [ "$ismuted" = 1 ]; then 49 | icon="${volicons[$lvl]}" 50 | else 51 | icon="" 52 | fi 53 | echo '{ "icon": "'"$icon"'", "percent": "'"$(vol "SINK")"'", "microphone": "'"$(vol "SOURCE")"'" }' 54 | done 55 | fi 56 | -------------------------------------------------------------------------------- /home/gui/kvantum.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | # some stuff from raf's nyx :) 3 | xdg.configFile."kdeglobals".source = "${(pkgs.catppuccin-kde.override { 4 | flavour = ["mocha"]; 5 | accents = ["peach"]; 6 | winDecStyles = ["modern"]; 7 | })}/share/color-schemes/CatppuccinMochaPeach.colors"; 8 | qt = { 9 | enable = true; 10 | # platformTheme = "gtk"; # just an override for QT_QPA_PLATFORMTHEME, takes "gtk" or "gnome" 11 | style = { 12 | package = pkgs.catppuccin-kde; 13 | name = "Catppuccin-Mocha-Dark"; 14 | }; 15 | }; 16 | 17 | home.packages = with pkgs; [ 18 | qt5.qttools 19 | qt6Packages.qtstyleplugin-kvantum 20 | libsForQt5.qtstyleplugin-kvantum 21 | qtstyleplugin-kvantum-qt4 22 | ]; 23 | home.sessionVariables = { 24 | QT_AUTO_SCREEN_SCALE_FACTOR = "1"; 25 | QT_QPA_PLATFORM = "wayland;xcb"; 26 | QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; 27 | DISABLE_QT5_COMPAT = "0"; 28 | QT_STYLE_OVERRIDE = "kvantum"; 29 | CALIBRE_USE_DARK_PALETTE = "1"; 30 | }; 31 | xdg.configFile."Kvantum/catppuccin/catppuccin.kvconfig".source = builtins.fetchurl { 32 | url = "https://raw.githubusercontent.com/catppuccin/Kvantum/main/src/Catppuccin-Mocha-Peach/Catppuccin-Mocha-Peach.kvconfig"; 33 | sha256 = "bf6e3ad5df044e7efd12c8bf707a67a69dd42c9effe36abc7eaa5eac12cd0a3c"; 34 | }; 35 | xdg.configFile."Kvantum/catppuccin/catppuccin.svg".source = builtins.fetchurl { 36 | url = "https://raw.githubusercontent.com/catppuccin/Kvantum/main/src/Catppuccin-Mocha-Peach/Catppuccin-Mocha-Peach.svg"; 37 | sha256 = "fbd5c968afdd08812f55cfb5ad9eafb526a09d8c027e6c4378e16679e5ae44ae"; 38 | }; 39 | xdg.configFile."Kvantum/kvantum.kvconfig".text = "theme=catppuccin"; 40 | } 41 | -------------------------------------------------------------------------------- /home/gui/dunst.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | nix-colors, 5 | ... 6 | }: let 7 | x = config.colorScheme.colors; 8 | in { 9 | # notification daemon 10 | services.dunst = { 11 | enable = true; 12 | iconTheme = { 13 | name = "Papirus-Dark"; 14 | package = pkgs.papirus-icon-theme; 15 | }; 16 | settings = { 17 | global = { 18 | alignment = "center"; 19 | corner_radius = 16; 20 | follow = "mouse"; 21 | font = "Roboto 10"; 22 | format = "%s\\n%b"; 23 | frame_width = 1; 24 | offset = "5x5"; 25 | horizontal_padding = 8; 26 | icon_position = "left"; 27 | indicate_hidden = "yes"; 28 | markup = "yes"; 29 | max_icon_size = 64; 30 | mouse_left_click = "do_action"; 31 | mouse_middle_click = "close_all"; 32 | mouse_right_click = "close_current"; 33 | padding = 8; 34 | plain_text = "no"; 35 | separator_color = "auto"; 36 | separator_height = 1; 37 | show_indicators = false; 38 | shrink = "no"; 39 | word_wrap = "yes"; 40 | }; 41 | 42 | fullscreen_delay_everything = {fullscreen = "delay";}; 43 | 44 | urgency_critical = { 45 | background = "#${x.base00}"; 46 | foreground = "#${x.base06}"; 47 | frame_color = "#${x.base08}"; 48 | }; 49 | urgency_low = { 50 | background = "#${x.base00}"; 51 | foreground = "#${x.base06}"; 52 | frame_color = "#${x.base05}"; 53 | }; 54 | urgency_normal = { 55 | background = "#${x.base00}"; 56 | foreground = "#${x.base06}"; 57 | frame_color = "#${x.base06}"; 58 | }; 59 | }; 60 | }; 61 | } 62 | -------------------------------------------------------------------------------- /home/gui/eww/eww.scss: -------------------------------------------------------------------------------- 1 | @import 'css/colors'; 2 | 3 | @mixin rounding { 4 | border-radius: 16px; 5 | } 6 | 7 | @mixin window { 8 | border: 1px solid $border; 9 | box-shadow: 0 2px 3px $shadow; 10 | margin: 5px 5px 10px; 11 | @include rounding; 12 | } 13 | 14 | * { 15 | all: unset; 16 | transition: 200ms ease; 17 | font-family: Product Sans, Roboto, sans-serif; 18 | } 19 | 20 | @import 'css/calendar'; 21 | @import 'css/music'; 22 | @import 'css/notification'; 23 | @import 'css/sidebar'; 24 | @import 'css/system'; 25 | @import 'css/volume'; 26 | 27 | .bar { 28 | background-color: $bg; 29 | color: $fg; 30 | 31 | label { 32 | font-size: 1.2rem; 33 | } 34 | } 35 | 36 | tooltip { 37 | background: $bg; 38 | border: 1px solid $border; 39 | border-radius: 8px; 40 | 41 | label { 42 | font-size: 1rem; 43 | } 44 | } 45 | 46 | .module { margin: 0 5px; } 47 | .hour { font-weight: bold; } 48 | .date { 49 | background: $bg; 50 | color: $flamingo; 51 | margin-left: -1.15rem; 52 | padding: 0 1rem; 53 | 54 | label { 55 | font-size: 1.2rem; 56 | } 57 | } 58 | 59 | .bright-icon { color: $yellow; } 60 | 61 | .module-ssid, 62 | .module-net { color: $lavender; } 63 | 64 | .module-bt { font-size: 1.2rem; } 65 | 66 | .separ { 67 | color: $surface0; 68 | font-size: 1.5rem; 69 | padding-bottom: 2px; 70 | } 71 | 72 | scale trough { 73 | background-color: $bg1; 74 | border-radius: 24px; 75 | margin: 0 1rem; 76 | min-height: 10px; 77 | min-width: 70px; 78 | } 79 | 80 | .workspaces { margin-left: 10px; } 81 | 82 | .launcher label { 83 | background-color: $blue; 84 | color: $bg; 85 | font-family: monospace; 86 | font-size: 1.5rem; 87 | padding: 0 1.1rem 0 .5rem; 88 | } 89 | 90 | .notif-toggle { 91 | padding: 0 5px; 92 | } 93 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/theme.lua: -------------------------------------------------------------------------------- 1 | require("catppuccin").setup({ 2 | flavour = "mocha", -- latte, frappe, macchiato, mocha 3 | background = { 4 | -- :h background 5 | light = "latte", 6 | dark = "mocha", 7 | }, 8 | compile_path = vim.fn.stdpath("cache") .. "/catppuccin", 9 | transparent_background = false, 10 | term_colors = false, 11 | dim_inactive = { 12 | enabled = false, 13 | shade = "dark", 14 | percentage = 0.15, 15 | }, 16 | styles = { 17 | comments = { "italic" }, 18 | conditionals = { "italic" }, 19 | loops = {}, 20 | functions = {}, 21 | keywords = {}, 22 | strings = {}, 23 | variables = {}, 24 | numbers = {}, 25 | booleans = {}, 26 | properties = {}, 27 | types = {}, 28 | operators = {}, 29 | }, 30 | color_overrides = {}, 31 | custom_highlights = {}, 32 | integrations = { 33 | cmp = true, 34 | gitsigns = true, 35 | nvimtree = true, 36 | telescope = true, 37 | treesitter = true, 38 | treesitter_context = true, 39 | fidget = true, 40 | navic = { 41 | enabled = true, 42 | }, 43 | aerial = true, 44 | alpha = true, 45 | which_key = true, 46 | lsp_trouble = true, 47 | indent_blankline = { 48 | enabled = true, 49 | colored_indent_levels = false, 50 | }, 51 | native_lsp = { 52 | enabled = true, 53 | virtual_text = { 54 | errors = { "italic" }, 55 | hints = { "italic" }, 56 | warnings = { "italic" }, 57 | information = { "italic" }, 58 | }, 59 | underlines = { 60 | errors = { "underline" }, 61 | hints = { "underline" }, 62 | warnings = { "underline" }, 63 | information = { "underline" }, 64 | }, 65 | }, 66 | -- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations) 67 | }, 68 | }) 69 | 70 | vim.cmd.colorscheme("catppuccin") 71 | 72 | -------------------------------------------------------------------------------- /home/gui/eww/scripts/battery: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | icons=("󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹") 4 | icons_charging=("󰂆" "󰂇" "󰂈" "󰂉" "󰂅") 5 | 6 | # declare -A baticon=([10]="󰁺" [20]="󰁻" [30]="󰁼" [40]="󰁽" [50]="󰁾" [60]="󰁿" [70]="󰂀" [80]="󰂁" [90]="󰂂" [100]="󰁹") 7 | 8 | geticon() { 9 | if [ "$STATE" = "Charging" ]; then 10 | level=$(awk -v n="$CAPACITY" 'BEGIN{print int((n-1)/20)}') 11 | echo "${icons_charging[$level]}" 12 | else 13 | level=$(awk -v n="$CAPACITY" 'BEGIN{print int((n-1)/10)}') 14 | echo "${icons[$level]}" 15 | fi 16 | } 17 | 18 | status() { 19 | if [ "$STATE" = "Charging" ]; then 20 | echo -n "charging" 21 | 22 | if [ "$RATE" -gt 0 ]; then 23 | echo ", $(gettime) left" 24 | else 25 | echo "" 26 | fi 27 | elif [ "$STATE" = "Discharging" ]; then 28 | echo "$(gettime)h left" 29 | else 30 | echo "fully charged" 31 | fi 32 | } 33 | 34 | color() { 35 | if [ "$CAPACITY" -le 20 ]; then 36 | echo '#f38ba8' 37 | else 38 | echo '#a6e3a1' 39 | fi 40 | } 41 | 42 | wattage() { 43 | echo "$(bc -l <<< "scale=1; $RATE / 1000000") W" 44 | } 45 | 46 | gettime() { 47 | FULL=$(cat /sys/class/power_supply/BAT0/energy_full) 48 | NOW=$(cat /sys/class/power_supply/BAT0/energy_now) 49 | 50 | if [ "$RATE" -gt 0 ]; then 51 | if [ "$STATE" = "Discharging" ]; then 52 | EX="$NOW / $RATE" 53 | else 54 | EX="($FULL - $NOW) / $RATE" 55 | fi 56 | date -u -d@"$(bc -l <<< "$EX * 3600")" +%H:%M 57 | fi 58 | } 59 | 60 | while true; do 61 | RATE=$(cat /sys/class/power_supply/BAT0/power_now) 62 | CAPACITY=$(cat /sys/class/power_supply/BAT0/capacity) 63 | STATE=$(cat /sys/class/power_supply/BAT0/status) 64 | 65 | echo '{ "icon": "'"$(geticon)"'", "percentage": '"$CAPACITY"', "wattage": "'"$(wattage)"'", "status": "'"$(status)"'", "color": "'"$(color)"'" }' 66 | sleep 3 67 | done -------------------------------------------------------------------------------- /home/gui/eww/eww.yuck: -------------------------------------------------------------------------------- 1 | (include "./modules/bat.yuck") 2 | (include "./modules/bluetooth.yuck") 3 | (include "./modules/bright.yuck") 4 | (include "./modules/clock.yuck") 5 | (include "./modules/cpu.yuck") 6 | (include "./modules/launcher.yuck") 7 | (include "./modules/mem.yuck") 8 | (include "./modules/music.yuck") 9 | (include "./modules/net.yuck") 10 | (include "./modules/variables.yuck") 11 | (include "./modules/volume.yuck") 12 | (include "./modules/workspaces.yuck") 13 | 14 | (include "./windows/calendar.yuck") 15 | (include "./windows/music.yuck") 16 | (include "./windows/notifications.yuck") 17 | (include "./windows/sidebar.yuck") 18 | 19 | (defwidget sep [] 20 | (label :class "separ module" :text "|")) 21 | 22 | (defwidget notif-toggle [] 23 | (button 24 | :class "notif-toggle module" 25 | :onclick "${EWW_CMD} open --toggle notifications"; 26 | {notif_icons.icon})) 27 | 28 | ; clipboard 󰅌 󰅍 󰄷 29 | 30 | (defwidget left [] 31 | (box 32 | :space-evenly false 33 | :halign "start" 34 | (launcher) 35 | (workspaces))) 36 | 37 | (defwidget right [] 38 | (box 39 | :space-evenly false 40 | :halign "end" 41 | (bright) 42 | (volume-module) 43 | (net) 44 | (bluetooth) 45 | (sep) 46 | (cpu) 47 | (mem) 48 | (bat) 49 | (sep) 50 | (clock_module) 51 | (notif-toggle))) 52 | 53 | (defwidget center [] 54 | (box 55 | :space-evenly false 56 | :halign "center" 57 | (music-module))) 58 | 59 | (defwidget bar [] 60 | (centerbox 61 | :class "bar" 62 | (left) 63 | (center) 64 | (right))) 65 | 66 | (defwindow bar 67 | :monitor 0 68 | :geometry (geometry :x "0%" 69 | :y "0%" 70 | :width "100%" 71 | :height "32px" 72 | :anchor "top center") 73 | :stacking "fg" 74 | :windowtype "dock" 75 | :exclusive true 76 | :wm-ignore false 77 | (bar)) 78 | -------------------------------------------------------------------------------- /home/gui/wl-screenrec.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | ... 5 | }: { 6 | home.packages = [ 7 | (pkgs.rustPlatform.buildRustPackage { 8 | pname = "wl-screenrec"; 9 | version = (builtins.fromTOML (builtins.readFile (inputs.wl-screenrec + "/Cargo.toml"))).package.version; 10 | src = inputs.wl-screenrec; 11 | cargoDeps = pkgs.rustPlatform.importCargoLock {lockFile = inputs.wl-screenrec + "/Cargo.lock";}; 12 | cargoLock.lockFile = inputs.wl-screenrec + "/Cargo.lock"; 13 | nativeBuildInputs = with pkgs; [pkg-config wayland-scanner clang clang.cc.lib]; 14 | LIBCLANG_PATH = "${pkgs.clang.cc.lib}/lib"; 15 | preConfigure = '' 16 | export LIBCLANG_PATH="${pkgs.clang.cc.lib}/lib" 17 | ''; 18 | nativeCheckInputs = [pkgs.clang]; 19 | passthru = {inherit (pkgs) clang;}; 20 | preBuild = let 21 | inherit (pkgs) stdenv lib; 22 | in '' 23 | export BINDGEN_EXTRA_CLANG_ARGS="$(< ${stdenv.cc}/nix-support/libc-crt1-cflags) \ 24 | $(< ${stdenv.cc}/nix-support/libc-cflags) \ 25 | $(< ${stdenv.cc}/nix-support/cc-cflags) \ 26 | $(< ${stdenv.cc}/nix-support/libcxx-cxxflags) \ 27 | ${lib.optionalString stdenv.cc.isClang "-idirafter ${stdenv.cc.cc}/lib/clang/${lib.getVersion stdenv.cc.cc}/include"} \ 28 | ${lib.optionalString stdenv.cc.isGNU "-isystem ${stdenv.cc.cc}/include/c++/${lib.getVersion stdenv.cc.cc} -isystem ${stdenv.cc.cc}/include/c++/${lib.getVersion stdenv.cc.cc}/${stdenv.hostPlatform.config} -idirafter ${stdenv.cc.cc}/lib/gcc/${stdenv.hostPlatform.config}/${lib.getVersion stdenv.cc.cc}/include"} \ 29 | " 30 | ''; 31 | buildInputs = with pkgs; [ 32 | wayland 33 | wayland-protocols 34 | ffmpeg 35 | x264 36 | libpulseaudio 37 | ocl-icd 38 | opencl-headers 39 | clang.cc.lib 40 | ]; 41 | }) 42 | ]; 43 | } 44 | -------------------------------------------------------------------------------- /home/gui/nwg-stuff.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | ... 5 | }: { 6 | home.packages = [pkgs.nwg-bar]; 7 | xdg.configFile."nwg-bar/bar.json".text = builtins.toJSON [ 8 | #{ 9 | # label = "Lock"; 10 | # exec = "swaylock -f -c 000000"; 11 | # icon = "/nix/store/wngcj1y46w7lhhf2mx74yvak148yz2pp-nwg-bar-0.1.3/share/nwg-bar/images/system-lock-screen.svg"; 12 | #} 13 | { 14 | label = "Logout"; 15 | exec = "hyprctl dispatch exit"; 16 | icon = "${config.gtk.iconTheme.package}/share/icons/Papirus-Dark/symbolic/actions/system-log-out-symbolic.svg"; 17 | } 18 | { 19 | label = "Reboot"; 20 | exec = "systemctl reboot"; 21 | icon = "${config.gtk.iconTheme.package}/share/icons/Papirus-Dark/symbolic/actions/system-reboot-symbolic.svg"; 22 | } 23 | { 24 | label = "Shutdown"; 25 | exec = "systemctl -i poweroff"; 26 | icon = "${config.gtk.iconTheme.package}/share/icons/Papirus-Dark/symbolic/actions/system-shutdown-symbolic.svg"; 27 | } 28 | ]; 29 | xdg.configFile."nwg-bar/style.css".text = let 30 | inherit (import ./colors.nix) bg fg overlay0; 31 | in '' 32 | window { 33 | background-color: ${bg}; 34 | } 35 | 36 | /* Outer bar container, takes all the window width/height */ 37 | #outer-box { 38 | margin: 0px; 39 | } 40 | 41 | /* Inner bar container, surrounds buttons */ 42 | #inner-box { 43 | background-color: ${bg}55; 44 | border-radius: 10px; 45 | border-style: none; 46 | border-width: 1px; 47 | border-color: ${overlay0}46; 48 | padding: 5px; 49 | margin: 5px; 50 | } 51 | 52 | button, image { 53 | background: none; 54 | border: none; 55 | box-shadow: none; 56 | } 57 | 58 | button { 59 | padding-left: 10px; 60 | padding-right: 10px; 61 | margin: 5px; 62 | } 63 | 64 | button:hover { 65 | background-color: ${fg}0A; 66 | } 67 | ''; 68 | } 69 | -------------------------------------------------------------------------------- /home/gui/eww/scripts/music: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | get_status() { 4 | s=$1 5 | if [ "$s" = "Playing" ]; then 6 | echo "" 7 | else 8 | echo "" 9 | fi 10 | } 11 | 12 | get_length_sec() { 13 | len=$1 14 | if [ -z "$len" ]; then 15 | echo 0 16 | else 17 | bc <<< "$len / 1000000" 18 | fi 19 | } 20 | 21 | get_length_time() { 22 | len=$1 23 | if [ -n "$len" ]; then 24 | len=$(bc <<< "$len / 1000000 + 1") 25 | date -d@"$len" +%M:%S 26 | else 27 | echo "" 28 | fi 29 | } 30 | 31 | get_position() { 32 | pos=$1 33 | len=$2 34 | if [ -n "$pos" ]; then 35 | bc -l <<< "$pos / $len * 100" 36 | else 37 | echo 0 38 | fi 39 | } 40 | 41 | get_position_time() { 42 | pos=$1 43 | len=$2 44 | if [ -n "$pos" ]; then 45 | date -d@"$(bc <<< "$pos / 1000000")" +%M:%S 46 | else 47 | echo "" 48 | fi 49 | } 50 | 51 | get_cover() { 52 | # COVER_URL=$1 53 | mkdir -p "$XDG_CACHE_HOME/eww_covers" 54 | cd "$XDG_CACHE_HOME/eww_covers" || exit 55 | 56 | IMGPATH="$XDG_CACHE_HOME/eww_covers/cover_art.png" 57 | 58 | playerctl -F metadata mpris:artUrl 2>/dev/null | while read -r COVER_URL; do 59 | if [[ "$COVER_URL" = https* ]]; then 60 | if [ ! -e "$XDG_CACHE_HOME/eww_covers/$(basename "$COVER_URL")" ]; then 61 | wget -N "$COVER_URL" -o /dev/null 62 | fi 63 | 64 | rm "$IMGPATH" 65 | ln -s "$(basename "$COVER_URL")" "$IMGPATH" 66 | 67 | echo "$IMGPATH" 68 | elif [ "$COVER_URL" = "" ]; then 69 | echo "" 70 | else 71 | echo "$COVER_URL" 72 | fi 73 | done 74 | } 75 | 76 | if [ "$1" = "cover" ]; then 77 | get_cover 78 | else 79 | playerctl -F metadata -f '{{title}}\{{artist}}\{{status}}\{{position}}\{{mpris:length}}' 2>/dev/null | while IFS="$(printf '\\')" read -r title artist status position len; do 80 | echo '{"artist": "'"$artist"'", "title": "'"$title"'", "status": "'"$(get_status "$status")"'", "position": "'"$(get_position "$position" "$len")"'", "position_time": "'"$(get_position_time "$position" "$len")"'", "length": "'"$(get_length_time "$len")"'"}' #, "cover": "'"$(get_cover $art)"'" 81 | done 82 | fi 83 | -------------------------------------------------------------------------------- /home/cli/macchina.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | inputs, 5 | std, 6 | ... 7 | }: let 8 | cat = import ./ascii.nix 1; 9 | cat-file = pkgs.writeTextFile { 10 | name = "cat-ascii"; 11 | text = "\n\n${cat}"; 12 | }; 13 | in { 14 | home.packages = with pkgs; [macchina]; 15 | 16 | xdg.configFile."macchina/macchina.toml".text = std.serde.toTOML { 17 | theme = "custom"; 18 | show = [ 19 | "Host" 20 | "Distribution" 21 | "DesktopEnvironment" 22 | "Shell" 23 | "Terminal" 24 | "Uptime" 25 | #"Packages" 26 | ]; 27 | }; 28 | 29 | xdg.configFile."macchina/themes/custom.toml".text = std.serde.toTOML { 30 | # Hydrogen 31 | spacing = 2; 32 | padding = 0; 33 | hide_ascii = false; 34 | separator = "->"; 35 | key_color = "Cyan"; 36 | separator_color = "White"; 37 | 38 | custom_ascii = { 39 | path = "${cat-file}"; 40 | color = "Cyan"; 41 | }; 42 | 43 | palette = { 44 | type = "Full"; 45 | visible = false; 46 | }; 47 | bar = { 48 | glyph = "ߋ"; 49 | symbol_open = "["; 50 | symbol_close = "]"; 51 | hide_delimiters = true; 52 | visible = true; 53 | }; 54 | box = { 55 | border = "rounded"; 56 | visible = true; 57 | inner_margin = { 58 | x = 1; 59 | y = 0; 60 | }; 61 | }; 62 | 63 | randomize = { 64 | key_color = false; 65 | separator_color = false; 66 | }; 67 | 68 | keys = { 69 | host = "Host"; 70 | kernel = "Kernel"; 71 | battery = "Battery"; 72 | os = "OS"; 73 | de = "Compositor"; 74 | wm = "WM"; 75 | distro = "Distro"; 76 | terminal = "Terminal"; 77 | shell = "Shell"; 78 | packages = "Packages"; 79 | uptime = "Uptime"; 80 | memory = "Memory"; 81 | machine = "Machine"; 82 | local_ip = "Local IP"; 83 | backlight = "Brightness"; 84 | resolution = "Resolution"; 85 | cpu_load = "CPU Load"; 86 | cpu = "CPU"; 87 | }; 88 | }; 89 | } 90 | -------------------------------------------------------------------------------- /home/gui/eww/scripts/notifications: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | tmp=$XDG_CACHE_HOME/dunst-history.json 4 | lock="$XDG_CACHE_HOME/dunst-toggle.lock" 5 | lockinfo="$XDG_CACHE_HOME/dunst-lock-info" 6 | 7 | touch $lockinfo 8 | 9 | declare ids 10 | export toggle_icon="" 11 | 12 | get_ids() { 13 | mapfile -t ids < <(dunstctl history | gojq -r ".data[] | .[] | select(.appname.data != \"Spotify\") | .id.data") 14 | } 15 | 16 | get_notif() { 17 | echo -n '[' 18 | 19 | for id in "${ids[@]}"; do 20 | mapfile -t n < <(gojq -r ".data[] | .[] | select(.id.data == $id) | .appname.data, .summary.data, .body.data" "$tmp" | sed -r '/^\s*$/d' | sed -e 's/\%/ percent/g') 21 | echo -n ''$([ $id -eq ${ids[0]} ] || echo ,)' { ' 22 | echo -n '"id": "'"$id"'", "appname": "'"${n[0]}"'", "summary": "'"${n[1]}"'", "body": "'"${n[2]}"'"' 23 | echo -n '}' 24 | done 25 | 26 | echo ']' 27 | } 28 | 29 | toggle() { 30 | dunstctl set-paused toggle 31 | 32 | if [ ! -f "$lock" ]; then 33 | export toggle_icon="" 34 | touch "$lock" 35 | else 36 | export toggle_icon="" 37 | rm "$lock" 38 | fi 39 | 40 | echo "icon_change" > $lockinfo 41 | } 42 | 43 | clear() { 44 | systemctl --user restart dunst 45 | echo "icon_change" > $lockinfo 46 | } 47 | 48 | get_icon() { 49 | if [ ${#ids[@]} -eq 0 ]; then 50 | echo "󰆂" 51 | else 52 | echo "󰆄" 53 | fi 54 | } 55 | 56 | if [ "$1" == "toggle" ]; then 57 | toggle 58 | dunstctl history > "$tmp" 59 | elif [ "$1" == "clear" ]; then 60 | clear 61 | dunstctl history > "$tmp" 62 | elif [ "$1" == "icons" ]; then 63 | dunstctl history > "$tmp" 64 | get_ids 65 | echo '{"toggle_icon": "'"$toggle_icon"'", "icon": "'"$(get_icon)"'"}' 66 | tail -f "$lockinfo" | while read -r; do 67 | get_ids 68 | echo '{"toggle_icon": "'"$toggle_icon"'", "icon": "'"$(get_icon)"'"}' 69 | done 70 | else 71 | dunstctl history > "$tmp" 72 | get_ids 73 | get_notif 74 | tail -f "$tmp" 2>/dev/null | rg --line-buffered "aa\{sv\}" | while read -r; do 75 | get_ids 76 | get_notif 77 | done 78 | fi 79 | -------------------------------------------------------------------------------- /home/gui/eww/scripts/workspaces: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | colors=("#f38ba8" "#a6e3a1" "#89b4fa" "#fab387") 4 | dimmed=("#794554" "#537150" "#445a7d" "#7d5943") 5 | empty="#302d41" 6 | 7 | focusedws=1 8 | 9 | declare -A o=([1]=0 [2]=0 [3]=0 [4]=0 [5]=0 [6]=0 [7]=0 [8]=0 [9]=0 [10]=0) 10 | declare -A monitormap 11 | declare -A workspaces 12 | 13 | # sets color 14 | status() { 15 | if [ "${o[$1]}" -eq 1 ]; then 16 | mon=${monitormap[${workspaces[$1]}]} 17 | 18 | if [ $focusedws -eq "$1" ]; then 19 | echo -n "${colors[$mon]}" 20 | else 21 | echo -n "${dimmed[$mon]}" 22 | fi 23 | else 24 | echo -n "$empty" 25 | fi 26 | } 27 | 28 | # handles workspace create/destroy 29 | workspace_event() { 30 | o[$1]=$2 31 | while read -r k v; do workspaces[$k]="$v"; done < <(hyprctl -j workspaces | gojq -r '.[]|"\(.id) \(.monitor)"') 32 | } 33 | # handles monitor (dis)connects 34 | monitor_event() { 35 | while read -r k v; do monitormap["$k"]=$v; done < <(hyprctl -j monitors | gojq -r '.[]|"\(.name) \(.id) "') 36 | } 37 | 38 | # generates the eww widget 39 | generate() { 40 | echo -n '[' 41 | 42 | for i in {1..10}; do 43 | echo -n ''$([ $i -eq 1 ] || echo ,) '{ "number": "'"$i"'", "color": "'$(status "$i")'" }' 44 | done 45 | 46 | echo ']' 47 | } 48 | 49 | # setup 50 | # add monitors 51 | monitor_event 52 | # add workspaces 53 | workspace_event 1 1 54 | # check occupied workspaces 55 | for num in "${!workspaces[@]}"; do 56 | o[$num]=1 57 | done 58 | # generate initial widget 59 | generate 60 | 61 | # main loop 62 | socat -u UNIX-CONNECT:/tmp/hypr/"$HYPRLAND_INSTANCE_SIGNATURE"/.socket2.sock - | while read -r line; do 63 | case ${line%>>*} in 64 | "workspace") 65 | focusedws=${line#*>>} 66 | ;; 67 | "focusedmon") 68 | focusedws=${line#*,} 69 | ;; 70 | "createworkspace") 71 | workspace_event "${line#*>>}" 1 72 | ;; 73 | "destroyworkspace") 74 | workspace_event "${line#*>>}" 0 75 | ;; 76 | "monitor"*) 77 | monitor_event 78 | ;; 79 | esac 80 | generate 81 | done 82 | -------------------------------------------------------------------------------- /secrets/home-secrets.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | pkgs, 4 | lib, 5 | ... 6 | }: let 7 | # Works very well, if using home-manager separately, well sadly, 8 | # I don't anymore, so I just use agenix, but this is still pretty nifty 9 | decrypt = with builtins; 10 | { 11 | secret, 12 | key, 13 | finalPathDir, 14 | finalPathFile, 15 | prefix ? "", 16 | suffix ? "", 17 | name ? "", 18 | }: let 19 | finalPathStr = "${toString finalPathDir}/${toString finalPathFile}"; 20 | pre = 21 | if prefix == "" 22 | then "" 23 | else "'${prefix}'"; 24 | suf = 25 | if suffix == "" 26 | then "" 27 | else "'${suffix}'"; 28 | in '' 29 | decrypt_and_write() { 30 | local hash=$(nix-hash --flat ${toString secret}) 31 | if [[ -f ${finalPathStr}}.hash ]] && [[ hash == ${finalPathStr}.hash ]]; then 32 | ${ 33 | if name != "" 34 | then "echo 'Secret ${name} hasn't changed" 35 | else "echo 'Secret located at ${finalPathStr} hasn't changed" 36 | } 37 | return 0 38 | fi 39 | if [[ ! -d ${toString finalPathDir} ]]; then 40 | mkdir -p ${toString finalPathDir} 41 | fi 42 | [[ -f ${finalPathStr} ]] && rm ${finalPathStr} 43 | local secret="$(${pkgs.rage}/bin/rage -d ${toString secret} -i ${toString key})" 44 | echo ${pre}"$secret"${suf} > ${finalPathStr} 45 | ${ 46 | if name != "" 47 | then "echo 'Updated secret ${name}'" 48 | else "echo 'Updated secret located at ${finalPathStr}'" 49 | } 50 | touch ${finalPathStr}.hash 51 | rm ${finalPathStr}.hash 52 | nix-hash --flat ${toString secret} > ${finalPathStr}.hash 53 | } 54 | decrypt_and_write 55 | ''; 56 | h = config.home.homeDirectory; 57 | in { 58 | home.activation.updateSecrets = lib.hm.dag.entryAfter ["writeBoundary"] (decrypt { 59 | secret = ./downonspot.age; 60 | key = "${h}/.ssh/id_ed25519"; 61 | finalPathDir = "${h}/music-downloads"; 62 | finalPathFile = "settings.json"; 63 | name = "downonspot"; 64 | }); 65 | } 66 | -------------------------------------------------------------------------------- /modules/greetd.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | lib, 5 | config, 6 | ... 7 | }: let 8 | wallpkgs = inputs.wallpkgs.packages.${pkgs.system}.catppuccin; 9 | 10 | path = "${wallpkgs}/share/wallpapers/catppuccin/05.png"; 11 | greetdSwayConfig = pkgs.writeText "greetd-sway-config" '' 12 | exec "dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK XDG_CURRENT_DESKTOP" 13 | input "type:touchpad" { 14 | tap enabled 15 | } 16 | seat seat0 xcursor_theme Bibata-Modern-Classic 24 17 | 18 | xwayland disable 19 | 20 | bindsym XF86MonBrightnessUp exec light -A 5 21 | bindsym XF86MonBrightnessDown exec light -U 5 22 | bindsym Print exec ${lib.getExe pkgs.grim} /tmp/regreet.png 23 | bindsym Mod4+shift+e exec swaynag \ 24 | -t warning \ 25 | -m 'What do you want to do?' \ 26 | -b 'Poweroff' 'systemctl poweroff' \ 27 | -b 'Reboot' 'systemctl reboot' 28 | 29 | exec "${lib.getExe config.programs.regreet.package} -l debug; swaymsg exit" 30 | ''; 31 | in { 32 | environment.systemPackages = with pkgs; [ 33 | (catppuccin-gtk.override { 34 | size = "compact"; 35 | accents = ["peach"]; 36 | variant = "mocha"; 37 | }) 38 | catppuccin-cursors.mochaDark 39 | ( 40 | catppuccin-papirus-folders.override { 41 | flavor = "mocha"; 42 | accent = "peach"; 43 | } 44 | ) 45 | #cage 46 | #greetd.gtkgreet 47 | ]; 48 | 49 | programs.regreet = { 50 | enable = true; 51 | settings = { 52 | background = { 53 | inherit path; 54 | fit = "Cover"; 55 | }; 56 | GTK = { 57 | cursor_theme_name = "Catppuccin-Mocha-Dark-Cursors"; 58 | font_name = "Roboto 12"; 59 | icon_theme_name = "Papirus-Dark"; 60 | theme_name = "Catppuccin-Mocha-Compact-Peach-dark"; 61 | }; 62 | }; 63 | }; 64 | 65 | services.greetd.settings.default_session.command = "${config.programs.sway.package}/bin/sway --config ${greetdSwayConfig}"; 66 | 67 | security.pam.services = { 68 | greetd.enableGnomeKeyring = true; 69 | greetd.enableKwallet = true; 70 | greetd.gnupg.enable = true; 71 | }; 72 | } 73 | -------------------------------------------------------------------------------- /home/gui/eww/css/_sidebar.scss: -------------------------------------------------------------------------------- 1 | .system-menu-box { 2 | @include window; 3 | background-color: $bg; 4 | border: 1px solid $border; 5 | color: $text; 6 | } 7 | 8 | .separator { 9 | font-size: 1rem; 10 | } 11 | 12 | .top-row { 13 | margin: 1rem 1.5rem 0; 14 | 15 | .time { font-size: 2rem; } 16 | 17 | .date-box { 18 | margin: 0 1rem; 19 | 20 | label { font-size: 1.1rem; } 21 | 22 | .date { 23 | background: unset; 24 | margin: 0 .5rem 0 0; 25 | padding: 0; 26 | } 27 | } 28 | } 29 | 30 | .system-row { 31 | margin: .5rem .7rem; 32 | 33 | .wifi-box label { 34 | // font issue 35 | margin-top: -.1rem; 36 | } 37 | 38 | .airplane-box button { 39 | padding: 1rem 3rem; 40 | } 41 | 42 | label { 43 | font-size: 1rem; 44 | margin: 0 .1rem; 45 | } 46 | } 47 | 48 | .element { 49 | @include rounding; 50 | background: $surface0; 51 | margin: .3rem; 52 | 53 | button { 54 | @include rounding; 55 | padding: 1rem; 56 | 57 | label { 58 | font-size: 1.5rem; 59 | } 60 | 61 | &:hover { 62 | background: $overlay0; 63 | } 64 | } 65 | } 66 | 67 | .sliders { 68 | @include rounding; 69 | background-color: $surface0; 70 | margin: .5rem 1rem; 71 | padding: .6rem 1rem; 72 | 73 | scale { 74 | margin-right: -1rem; 75 | min-width: 21.5rem; 76 | } 77 | 78 | box { margin: .2rem 0; } 79 | 80 | label { font-size: 1.2rem; } 81 | } 82 | 83 | .volume-bar highlight { 84 | @include rounding; 85 | background-image: linear-gradient(to right, $teal 30%, $sky 100%); 86 | } 87 | 88 | .brightness-slider-box scale highlight { 89 | @include rounding; 90 | background-image: linear-gradient(to right, $yellow 30%, $peach 100%); 91 | } 92 | 93 | .bottom-row { 94 | margin: .5rem 1rem; 95 | 96 | .battery-icon { font-size: 2rem; } 97 | .battery-wattage { color: $mauve; } 98 | 99 | .battery-status { 100 | color: $subtext0; 101 | margin: 0 .5rem; 102 | } 103 | 104 | button { 105 | background-color: $surface0; 106 | border-radius: 50%; 107 | padding: .5rem; 108 | 109 | label { font-size: 1.5rem; } 110 | &:hover { background: $overlay0; } 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /home/gui/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | inputs, 4 | lib, 5 | ... 6 | } @ args: { 7 | home.packages = with pkgs; [ 8 | pantheon.pantheon-agent-polkit 9 | qalculate-gtk 10 | #gnome.nautilus 11 | gnome.file-roller 12 | gnome.seahorse 13 | pcmanfm 14 | hyprpaper 15 | hyprpicker 16 | grimblast 17 | swappy 18 | libsForQt5.kleopatra 19 | brightnessctl 20 | wl-clipboard 21 | itd 22 | xorg.xcursorgen 23 | mullvad-vpn 24 | nicotine-plus 25 | opensnitch-ui 26 | #iwgtk 27 | ]; 28 | imports = [ 29 | #./eww 30 | ./dunst.nix 31 | ./ironbar 32 | ./anyrun.nix 33 | ./hpr_scratcher.nix 34 | ./kvantum.nix 35 | ./rofi.nix 36 | ./wallpaper.nix 37 | ./xdg.nix 38 | ./productivity.nix 39 | #./wl-screenrec.nix 40 | ./gtk.nix 41 | ]; 42 | 43 | programs = { 44 | zathura.enable = true; 45 | }; 46 | 47 | i18n.inputMethod.enabled = "fcitx5"; 48 | i18n.inputMethod.fcitx5.addons = with pkgs; [fcitx5-mozc]; 49 | 50 | wayland.windowManager.hyprland = { 51 | enable = true; 52 | extraConfig = import ./hyprland.nix args; 53 | plugins = [inputs.hy3.packages.${pkgs.system}.hy3]; 54 | #package = pkgs.hyprland-hidpi; 55 | xwayland = { 56 | enable = true; 57 | hidpi = true; 58 | }; 59 | }; 60 | 61 | services = { 62 | nextcloud-client = { 63 | #enable = true; 64 | startInBackground = true; 65 | }; 66 | kdeconnect.enable = true; 67 | kdeconnect.indicator = true; 68 | opensnitch-ui.enable = true; 69 | }; 70 | 71 | xsession.preferStatusNotifierItems = true; 72 | systemd.user.services.patheon-polkit = { 73 | Unit = { 74 | Description = "Pantheon Polkit Agent"; 75 | Requires = ["graphical-session.target"]; 76 | }; 77 | Service = { 78 | Type = "simple"; 79 | ExecStart = "${pkgs.pantheon.pantheon-agent-polkit}/libexec/policykit-1-pantheon/io.elementary.desktop.agent-polkit"; 80 | }; 81 | Install.WantedBy = ["hyprland-session.target"]; 82 | }; 83 | systemd.user.services.wl-clip-persist = { 84 | Unit.Description = "Persistent clipboard for Wayland"; 85 | Service = { 86 | ExecStart = "${lib.getExe pkgs.wl-clip-persist} --clipboard both"; 87 | Restart = "always"; 88 | }; 89 | Install.WantedBy = ["hyprland-session.target"]; 90 | }; 91 | } 92 | -------------------------------------------------------------------------------- /home/gui/eww/windows/notifications.yuck: -------------------------------------------------------------------------------- 1 | (defwindow notifications 2 | :geometry 3 | (geometry 4 | :x "0px" 5 | :y "0px" 6 | :width "0px" 7 | :height "0px" 8 | :anchor "right top") 9 | :stacking "fg" 10 | :monitor "0" 11 | (notifications)) 12 | 13 | (defwidget notifications [] 14 | (box 15 | :class "notifications-box" 16 | :orientation "v" 17 | :space-evenly "false" 18 | (box 19 | :class "notification-header" 20 | (label 21 | :class "notification-label" 22 | :halign "start" 23 | :text "Notifications") 24 | (box 25 | :halign "end" 26 | :space-evenly "false" 27 | :spacing 10 28 | (button 29 | :class "notification-action" 30 | :tooltip "Refresh" 31 | :onclick "dunstctl history > $XDG_CACHE_HOME/dunst-history.json" "") 32 | (button 33 | :class "notification-action" 34 | :tooltip "Pause/Resume Notifications" 35 | :onclick "scripts/notifications toggle" {notif_icons.toggle_icon}) 36 | (button 37 | :class "notification-action" 38 | :tooltip "Clear Notifications" 39 | :onclick "scripts/notifications clear" ""))) ; 󰅖 40 | (scroll 41 | :vscroll "true" 42 | :hscroll "false" 43 | :height 500 44 | :width 300 45 | (box 46 | :class "container" 47 | :orientation "v" 48 | :space-evenly false 49 | (for i in notifications 50 | (eventbox 51 | :onclick "dunstctl history-pop ${i.id} && dunstctl action 0 && dunstctl close" 52 | (box 53 | :class "notification" 54 | :orientation "v" 55 | :width 300 56 | :space-evenly false 57 | (centerbox 58 | :space-evenly false 59 | (label 60 | :xalign 0 61 | :wrap true 62 | :class "summary" 63 | :text {i.summary}) 64 | (label) 65 | (label 66 | :xalign 1 67 | :wrap true 68 | :class "appname" 69 | :text {i.appname})) 70 | (label 71 | :xalign 0 72 | :wrap true 73 | :class "body" 74 | :text {i.body})))))))) 75 | -------------------------------------------------------------------------------- /home/gui/cat-mocha.frag.nix: -------------------------------------------------------------------------------- 1 | {lib, ...}: let 2 | inherit (builtins) map toString; 3 | id = list: i: builtins.elemAt list i; 4 | colors = builtins.attrValues (import ./colors.nix).base; 5 | lowerChars = lib.strings.stringToCharacters "abcdefghijklmnopqrstuvwxyz"; 6 | upperChars = lib.strings.stringToCharacters "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 7 | hexes = ["a" "b" "c" "d" "e" "f"]; 8 | hexInts = map (x: "1" + (toString x)) [0 1 2 3 4 5]; 9 | toLower = str: builtins.replaceStrings upperChars lowerChars str; 10 | hexCharToInt = hex: let 11 | lex = toLower hex; 12 | nex = builtins.replaceStrings hexes hexInts lex; 13 | in 14 | lib.strings.toInt nex; 15 | fromHex = hexStr: let 16 | chars = lib.strings.stringToCharacters hexStr; 17 | doubles = [[(id chars 1) (id chars 2)] [(id chars 3) (id chars 4)] [(id chars 5) (id chars 6)]]; 18 | r = ((hexCharToInt (id (id doubles 0) 0) + 0.0) * 16) + (hexCharToInt (id (id doubles 0) 1) + 0.0); 19 | g = ((hexCharToInt (id (id doubles 1) 0) + 0.0) * 16) + (hexCharToInt (id (id doubles 1) 1) + 0.0); 20 | b = ((hexCharToInt (id (id doubles 2) 0) + 0.0) * 16) + (hexCharToInt (id (id doubles 2) 1) + 0.0); 21 | in [r g b]; 22 | parsedColors = map (x: fromHex x) colors; 23 | gColors = lib.lists.imap0 (i: x: "solarized[${toString i}] = vec3(${toString ((id x 0) / 255)},${toString ((id x 1) / 255)},${toString ((id x 2) / 255)});") parsedColors; 24 | lengthOfList = builtins.length gColors; 25 | gColorsStr = "vec3 solarized[${toString lengthOfList}];\n" + (builtins.concatStringsSep "\n" gColors); 26 | in '' 27 | precision lowp float; 28 | varying vec2 v_texcoord; 29 | uniform sampler2D tex; 30 | 31 | float distanceSquared(vec3 pixColor, vec3 solarizedColor) { 32 | vec3 distanceVector = pixColor - solarizedColor; 33 | return dot(distanceVector, distanceVector); 34 | } 35 | 36 | void main() { 37 | ${gColorsStr} 38 | 39 | vec3 pixColor = vec3(texture2D(tex, v_texcoord)); 40 | int closest = 0; 41 | float closestDistanceSquared = distanceSquared(pixColor, solarized[0]); 42 | for (int i = 1; i < ${toString lengthOfList}; i++) { 43 | float newDistanceSquared = distanceSquared(pixColor, solarized[i]); 44 | if (newDistanceSquared < closestDistanceSquared) { 45 | closest = i; 46 | closestDistanceSquared = newDistanceSquared; 47 | } 48 | } 49 | 50 | gl_FragColor = vec4(solarized[closest], 1.); 51 | } 52 | '' 53 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/nvim-tree.lua: -------------------------------------------------------------------------------- 1 | require 'nvim-tree'.setup { 2 | auto_reload_on_write = true, 3 | disable_netrw = false, 4 | hijack_cursor = true, 5 | hijack_netrw = true, 6 | hijack_unnamed_buffer_when_opening = false, 7 | open_on_tab = false, 8 | sort_by = "name", 9 | update_cwd = false, 10 | view = { 11 | width = 30, 12 | --height = 30, 13 | hide_root_folder = false, 14 | side = "left", 15 | preserve_window_proportions = false, 16 | number = false, 17 | relativenumber = false, 18 | signcolumn = "yes", 19 | mappings = { 20 | custom_only = false, 21 | list = { 22 | -- user mappings go here 23 | }, 24 | }, 25 | }, 26 | renderer = { 27 | indent_markers = { 28 | enable = true, 29 | icons = { 30 | corner = "└ ", 31 | edge = "│ ", 32 | none = " ", 33 | }, 34 | }, 35 | icons = { 36 | webdev_colors = true, 37 | }, 38 | }, 39 | hijack_directories = { 40 | enable = true, 41 | auto_open = true, 42 | }, 43 | update_focused_file = { 44 | enable = false, 45 | update_cwd = false, 46 | ignore_list = {}, 47 | }, 48 | system_open = { 49 | cmd = "", 50 | args = {}, 51 | }, 52 | diagnostics = { 53 | enable = true, 54 | show_on_dirs = false, 55 | icons = { 56 | hint = "", 57 | info = "", 58 | warning = "", 59 | error = "", 60 | }, 61 | }, 62 | filters = { 63 | dotfiles = false, 64 | custom = {}, 65 | exclude = {}, 66 | }, 67 | git = { 68 | enable = true, 69 | ignore = true, 70 | timeout = 400, 71 | }, 72 | actions = { 73 | use_system_clipboard = true, 74 | change_dir = { 75 | enable = true, 76 | global = false, 77 | restrict_above_cwd = false, 78 | }, 79 | open_file = { 80 | quit_on_open = false, 81 | resize_window = false, 82 | window_picker = { 83 | enable = true, 84 | chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", 85 | exclude = { 86 | filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame" }, 87 | buftype = { "nofile", "terminal", "help" }, 88 | }, 89 | }, 90 | }, 91 | }, 92 | trash = { 93 | cmd = "trash", 94 | require_confirm = true, 95 | }, 96 | log = { 97 | enable = false, 98 | truncate = false, 99 | types = { 100 | all = false, 101 | config = false, 102 | copy_paste = false, 103 | diagnostics = false, 104 | git = false, 105 | profile = false, 106 | }, 107 | }, 108 | } 109 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/toggleterm.lua: -------------------------------------------------------------------------------- 1 | local colors = require("catppuccin.palettes").get_palette() 2 | 3 | require("toggleterm").setup { 4 | -- size can be a number or function which is passed the current terminal 5 | size = function(term) 6 | if term.direction == "horizontal" then 7 | return 15 8 | elseif term.direction == "vertical" then 9 | return vim.o.columns * 0.4 10 | end 11 | end, 12 | open_mapping = [[]], 13 | --on_open = fun(t: Terminal), -- function to run when the terminal opens 14 | --on_close = fun(t: Terminal), -- function to run when the terminal closes 15 | --on_stdout = function(t, job, data, name) 16 | -- vim.notify(name, "info") 17 | --send, -- callback for processing output on stdout 18 | on_stderr = function(t, job, data, name) 19 | vim.notify(job, "error") 20 | end, -- callback for processing output on stderr 21 | on_exit = function(t, job, exit_code, name) 22 | if exit_code ~= 0 then 23 | vim.notify(job, "error") 24 | end 25 | end,-- function to run when terminal process exits 26 | hide_numbers = true, -- hide the number column in toggleterm buffers 27 | shade_filetypes = {}, 28 | highlights = { 29 | -- highlights which map to a highlight group name and a table of it's values 30 | -- NOTE: this is only a subset of values, any group placed here will be set for the terminal window split 31 | Normal = { 32 | guibg = colors.surface0, 33 | }, 34 | NormalFloat = { 35 | link = 'Normal' 36 | }, 37 | FloatBorder = { 38 | guifg = colors.text, 39 | guibg = colors.surface0, 40 | }, 41 | }, 42 | shade_terminals = true, 43 | shading_factor = '1', -- the degree by which to darken to terminal colour, default: 1 for dark backgrounds, 3 for light 44 | start_in_insert = true, 45 | insert_mappings = true, -- whether or not the open mapping applies in insert mode 46 | terminal_mappings = true, -- whether or not the open mapping applies in the opened terminals 47 | persist_size = true, 48 | direction = 'vertical', 49 | close_on_exit = true, -- close the terminal window when the process exits 50 | shell = vim.o.shell, -- change the default shell 51 | -- This field is only relevant if direction is set to 'float' 52 | float_opts = { 53 | -- The border key is *almost* the same as 'nvim_open_win' 54 | -- see :h nvim_open_win for details on borders however 55 | -- the 'curved' border is a custom border type 56 | -- not natively supported but implemented in this plugin. 57 | border = 'curved', 58 | width = 100, 59 | height = 100, 60 | winblend = 3, 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/dap.lua: -------------------------------------------------------------------------------- 1 | local dapui = require('dapui') 2 | local dap = require('dap') 3 | 4 | dapui.setup({ 5 | icons = { expanded = "▾", collapsed = "▸" }, 6 | mappings = { 7 | -- Use a table to apply multiple mappings 8 | expand = { "", "<2-LeftMouse>" }, 9 | open = "o", 10 | remove = "d", 11 | edit = "e", 12 | repl = "r", 13 | toggle = "t", 14 | }, 15 | -- Expand lines larger than the window 16 | -- Requires >= 0.7 17 | expand_lines = vim.fn.has("nvim-0.7"), 18 | -- Layouts define sections of the screen to place windows. 19 | -- The position can be "left", "right", "top" or "bottom". 20 | -- The size specifies the height/width depending on position. It can be an Int 21 | -- or a Float. Integer specifies height/width directly (i.e. 20 lines/columns) while 22 | -- Float value specifies percentage (i.e. 0.3 - 30% of available lines/columns) 23 | -- Elements are the elements shown in the layout (in order). 24 | -- Layouts are opened in order so that earlier layouts take priority in window sizing. 25 | layouts = { 26 | { 27 | elements = { 28 | -- Elements can be strings or table with id and size keys. 29 | { id = "scopes", size = 0.25 }, 30 | "breakpoints", 31 | "stacks", 32 | "watches", 33 | }, 34 | size = 40, -- 40 columns 35 | position = "left", 36 | }, 37 | { 38 | elements = { 39 | "repl", 40 | "console", 41 | }, 42 | size = 0.25, -- 25% of total lines 43 | position = "bottom", 44 | }, 45 | }, 46 | floating = { 47 | max_height = nil, -- These can be integers or a float between 0 and 1. 48 | max_width = nil, -- Floats will be treated as percentage of your screen. 49 | border = "single", -- Border style. Can be "single", "double" or "rounded" 50 | mappings = { 51 | close = { "q", "" }, 52 | }, 53 | }, 54 | windows = { indent = 1 }, 55 | render = { 56 | max_type_length = nil, -- Can be integer or nil. 57 | } 58 | }) 59 | 60 | dap.adapters.codelldb = { 61 | type = 'server', 62 | port = "${port}", 63 | executable = { 64 | -- CHANGE THIS to your path! 65 | command = '~/.local/share/nvim/mason/bin/codelldb', 66 | args = { "--port", "${port}" }, 67 | 68 | -- On windows you may have to uncomment this: 69 | -- detached = false, 70 | } 71 | } 72 | dap.configurations.cpp = { 73 | { 74 | name = "Launch file", 75 | type = "codelldb", 76 | request = "launch", 77 | program = function() 78 | return vim.fn.input('Path to executable: ', vim.fn.getcwd() .. '/', 'file') 79 | end, 80 | cwd = '${workspaceFolder}', 81 | stopOnEntry = true, 82 | }, 83 | } 84 | dap.configurations.c = dap.configurations.cpp 85 | dap.configurations.rust = dap.configurations.cpp 86 | -------------------------------------------------------------------------------- /modules/firefox.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...}: { 2 | programs.firejail = { 3 | enable = true; 4 | wrappedBinaries = { 5 | firefox = { 6 | executable = "${pkgs.lib.getBin pkgs.firefox}/bin/firefox"; 7 | desktop = "${pkgs.firefox}/share/applications/firefox.desktop"; 8 | profile = "${pkgs.firejail}/etc/firejail/firefox.profile"; 9 | }; 10 | }; 11 | }; 12 | environment.etc."firejail/firefox.local".text = '' 13 | whitelist ~/Music 14 | noblacklist ~/Music 15 | whitelist /run/wrappers/bin/1Password-BrowserSupport 16 | noblacklist /run/wrappers/bin/1Password-BrowserSupport 17 | whitelist /run/wrappers/bin/1Password-KeyringHelper 18 | noblacklist /run/wrappers/bin/1Password-KeyringHelper 19 | whitelist ''${HOME}/.gnupg 20 | noblacklist ''${HOME}/.gnupg 21 | 22 | dbus-user.talk org.freedesktop.Notifications 23 | dbus-user.talk org.freedesktop.ScreenSaver 24 | dbus-user.talk org.freedesktop.portal.Desktop 25 | dbus-user.talk org.freedesktop.portal.Fcitx 26 | browser-allow-drm yes 27 | ignore noroot 28 | ignore nou2f 29 | ''; 30 | #programs.firefox.enable = true; 31 | #programs.firefox.package = null; 32 | home-manager.users.yavor = { 33 | pkgs, 34 | lib, 35 | ... 36 | }: { 37 | # TODO: FIGURE OUT HOW TO USE HM MODULE WITH FIREJAIL 38 | 39 | programs.firefox = { 40 | #enable = true; 41 | profiles.default.extensions = with pkgs.nur.repos.rycee.firefox-addons; [ 42 | # lang packs & dicts 43 | french-dictionary 44 | french-language-pack 45 | bulgarian-dictionary 46 | 47 | metamask 48 | multi-account-containers 49 | side-view 50 | darkreader 51 | ublock-origin 52 | re-enable-right-click 53 | mailvelope 54 | violentmonkey 55 | auto-tab-discard 56 | # kde connect extension 57 | lovely-forks 58 | privacy-pass 59 | widegithub 60 | enhanced-github 61 | gitako-github-file-tree 62 | refined-github 63 | facebook-container # blocks facebook >:) 64 | canvasblocker 65 | #gnome-shell-integration (not using gnome ;-; ) 66 | enhancer-for-youtube 67 | decentraleyes 68 | sponsorblock 69 | return-youtube-dislikes 70 | demodal 71 | nos2x-fox 72 | languagetool 73 | onetab 74 | mullvad 75 | bypass-paywalls-clean 76 | furiganaize 77 | firefox-translations 78 | octolinker 79 | tabliss 80 | notifier-for-github 81 | overbitewx 82 | vencord-web 83 | github-isometric-contributions 84 | ]; 85 | }; 86 | }; 87 | } 88 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/legendary.lua: -------------------------------------------------------------------------------- 1 | -- require('legendary').setup({ 2 | -- -- Include builtins by default, set to false to disable 3 | -- include_builtin = true, 4 | -- -- Include the commands that legendary.nvim creates itself 5 | -- -- in the legend by default, set to false to disable 6 | -- include_legendary_cmds = true, 7 | -- -- Customize the prompt that appears on your vim.ui.select() handler 8 | -- -- Can be a string or a function that takes the `kind` and returns 9 | -- -- a string. See "Item Kinds" below for details. By default, 10 | -- -- prompt is 'Legendary' when searching all items, 11 | -- -- 'Legendary Keymaps' when searching keymaps, 12 | -- -- 'Legendary Commands' when searching commands, 13 | -- -- and 'Legendary Autocmds' when searching autocmds. 14 | -- select_prompt = nil, 15 | -- -- Optionally pass a custom formatter function. This function 16 | -- -- receives the item as a parameter and must return a table of 17 | -- -- non-nil string values for display. It must return the same 18 | -- -- number of values for each item to work correctly. 19 | -- -- The values will be used as column values when formatted. 20 | -- -- See function `get_default_format_values(item)` in 21 | -- -- `lua/legendary/formatter.lua` to see default implementation. 22 | -- formatter = nil, 23 | -- -- When you trigger an item via legendary.nvim, 24 | -- -- show it at the top next time you use legendary.nvim 25 | -- most_recent_item_at_top = true, 26 | -- -- Initial keymaps to bind 27 | -- keymaps = { 28 | -- -- your keymap tables here 29 | -- }, 30 | -- -- Initial commands to bind 31 | -- commands = { 32 | -- -- your command tables here 33 | -- }, 34 | -- -- Initial augroups and autocmds to bind 35 | -- autocmds = { 36 | -- -- your autocmd tables here 37 | -- }, 38 | -- which_key = { 39 | -- -- you can put which-key.nvim tables here, 40 | -- -- or alternatively have them auto-register, 41 | -- -- see section on which-key integration 42 | -- mappings = {}, 43 | -- opts = {}, 44 | -- -- controls whether legendary.nvim actually binds they keymaps, 45 | -- -- or if you want to let which-key.nvim handle the bindings. 46 | -- -- if not passed, true by default 47 | -- do_binding = {}, 48 | -- }, 49 | -- -- Automatically add which-key tables to legendary 50 | -- -- see "which-key.nvim Integration" below for more details 51 | -- auto_register_which_key = true, 52 | -- -- settings for the :LegendaryScratch command 53 | -- scratchpad = { 54 | -- -- configure how to show results of evaluated Lua code, 55 | -- -- either 'print' or 'float' 56 | -- -- Pressing q or will close the float 57 | -- display_results = 'float', 58 | -- }, 59 | -- }) 60 | -------------------------------------------------------------------------------- /pkgs/open-utau/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fuse, 3 | fuse3, 4 | fuse-common, 5 | dotnetCorePackages, 6 | dotnet-runtime, 7 | buildDotnetModule, 8 | fetchFromGitHub, 9 | makeDesktopItem, 10 | copyDesktopItems, 11 | lib, 12 | xorg, 13 | lttng-ust, 14 | alsa-lib, 15 | libGL, 16 | numactl, 17 | fontconfig, 18 | libXcursor, 19 | libXext, 20 | libXrandr, 21 | glew, 22 | }: let 23 | version = "0.1.112"; 24 | desc = "Open singing synthesis platform / Open source UTAU successor"; 25 | in 26 | buildDotnetModule { 27 | pname = "openutau"; 28 | inherit version; 29 | src = fetchFromGitHub { 30 | owner = "stakira"; 31 | repo = "OpenUtau"; 32 | rev = "build/" + version; 33 | sha256 = "sha256-G/y+RJ8NYpOtGg6vR+eTcieDZUBgK1WcfZ4iqiOamqQ="; 34 | }; 35 | desktopItems = [ 36 | (makeDesktopItem { 37 | desktopName = "OpenUtau"; 38 | name = "OpenUtau"; 39 | exec = "OpenUtau"; 40 | icon = "openutau"; 41 | comment = desc; 42 | type = "Application"; 43 | categories = ["Audio"]; 44 | }) 45 | ]; 46 | fixupPhase = '' 47 | runHook preFixup 48 | 49 | mkdir -p $out/share/pixmaps 50 | cp -f OpenUtau/Logo/openutau.svg $out/share/pixmaps/openutau.svg 51 | 52 | runHook postFixup 53 | ''; 54 | projectFile = "OpenUtau/OpenUtau.csproj"; 55 | nugetDeps = ./deps.nix; 56 | dotnet-sdk = with dotnetCorePackages; 57 | combinePackages [ 58 | sdk_7_0 59 | sdk_6_0 60 | ]; 61 | dotnet-runtime = dotnetCorePackages.runtime_7_0; 62 | executables = ["OpenUtau"]; 63 | buildType = "Release"; 64 | #packNupkg = true; 65 | nativeBuildInputs = [copyDesktopItems]; 66 | makeWrapperArgs = [ 67 | # Without this Ryujinx fails to start on wayland. See https://github.com/Ryujinx/Ryujinx/issues/2714 68 | "--set GDK_BACKEND x11" 69 | "--set SDL_VIDEODRIVER x11" 70 | ]; 71 | runtimeDeps = [ 72 | fuse 73 | fuse3 74 | fuse-common 75 | xorg.libXi 76 | libGL 77 | xorg.libX11 78 | xorg.libICE 79 | xorg.libSM 80 | fontconfig 81 | lttng-ust 82 | alsa-lib 83 | numactl 84 | libXcursor 85 | libXext 86 | libXrandr 87 | glew 88 | ]; 89 | #libraryPath = lib.makeLibraryPath runtimeDeps; 90 | # makeWrapperArgs = [ 91 | # ''--suffix PATH : "${lib.makeBinPath [xdg-utils]}"'' 92 | # ]; 93 | meta = with lib; { 94 | description = desc; 95 | homepage = "http://www.openutau.com/"; 96 | license = licenses.mit; 97 | platforms = ["x86_64-linux"]; 98 | mainProgram = "OpenUtau"; 99 | }; 100 | passthru.updateScript = ./update.sh; 101 | } 102 | -------------------------------------------------------------------------------- /modules/network/default.nix: -------------------------------------------------------------------------------- 1 | {pkgs, ...} @ args: { 2 | hardware.bluetooth.enable = true; 3 | # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. 4 | 5 | # Configure network proxy if necessary 6 | # networking.proxy.default = "http://user:password@proxy:port/"; 7 | # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; 8 | 9 | services = { 10 | blueman.enable = true; 11 | nscd = { 12 | enableNsncd = true; 13 | enable = true; 14 | }; 15 | printing = { 16 | enable = true; 17 | browsing = true; 18 | #listenAddresses = ["*:631"]; 19 | allowFrom = ["all"]; 20 | defaultShared = true; 21 | drivers = with pkgs; [epson-escpr2]; 22 | }; 23 | avahi = { 24 | enable = true; 25 | nssmdns = true; 26 | publish = { 27 | enable = true; 28 | userServices = true; 29 | }; 30 | }; 31 | avahi.openFirewall = true; 32 | opensnitch = import ./opensnitch.nix args; 33 | }; 34 | # Open ports in the firewall. 35 | networking = { 36 | networkmanager.enable = true; 37 | 38 | hostName = "envious"; 39 | nameservers = ["127.0.0.1" "::1"]; 40 | # If using dhcpcd: 41 | dhcpcd.extraConfig = "nohook resolv.conf"; 42 | # If using NetworkManager: 43 | networkmanager.dns = "none"; 44 | firewall = { 45 | enable = true; 46 | allowedTCPPortRanges = [ 47 | { 48 | from = 1714; 49 | to = 1764; 50 | } # KDE Connect 51 | ]; 52 | allowedTCPPorts = [631 55300]; 53 | allowedUDPPorts = [631]; 54 | allowedUDPPortRanges = [ 55 | { 56 | from = 1714; 57 | to = 1764; 58 | } # KDE Connect 59 | ]; 60 | }; 61 | }; 62 | services.dnscrypt-proxy2 = { 63 | enable = true; 64 | settings = { 65 | ipv6_servers = true; 66 | require_dnssec = true; 67 | 68 | sources.public-resolvers = { 69 | urls = [ 70 | "https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/public-resolvers.md" 71 | "https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md" 72 | ]; 73 | cache_file = "/var/lib/dnscrypt-proxy2/public-resolvers.md"; 74 | minisign_key = "RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3"; 75 | }; 76 | 77 | # You can choose a specific set of servers from https://github.com/DNSCrypt/dnscrypt-resolvers/blob/master/v3/public-resolvers.md 78 | # server_names = [ ... ]; 79 | }; 80 | }; 81 | 82 | systemd.services.dnscrypt-proxy2.serviceConfig = { 83 | StateDirectory = "dnscrypt-proxy"; 84 | }; 85 | #networking.wireless.iwd.enable = true; 86 | #networking.networkmanager.wifi.backend = "iwd"; 87 | # Or disable the firewall altogether. 88 | # networking.firewall.enable = false; 89 | } 90 | -------------------------------------------------------------------------------- /home/develop/editors/lsp.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | ... 5 | }: let 6 | servers = [ 7 | "rust-analyzer" 8 | #"nixd" 9 | "nil-ls" 10 | "tsserver" 11 | "bashls" 12 | "jdtls" 13 | "clangd" 14 | "cssls" 15 | "html" 16 | "jsonls" 17 | "lua-ls" 18 | "ltex" 19 | "marksman" 20 | "yamlls" 21 | ]; 22 | genHelixLSP = { 23 | pkg, 24 | args ? [""], 25 | }: { 26 | command = "${lib.meta.getExe pkg}"; 27 | inherit args; 28 | }; 29 | generateHelixLang = name: 30 | if name == "bashls" 31 | then 32 | genHelixLSP { 33 | pkg = pkgs.nodePackages.bash-language-server; 34 | args = ["start"]; 35 | } 36 | #else if name == "nixd" 37 | #then genHelixLSP {pkg = inputs.nixd.packages.${pkgs.system}.default;} 38 | else if name == "nil-ls" 39 | then genHelixLSP {pkg = pkgs.nil;} # inputs.nil.packages.${pkgs.system}.default;} 40 | else if pkgs ? name 41 | then 42 | genHelixLSP { 43 | pkg = pkgs.${name}; 44 | } 45 | else {command = name;}; 46 | 47 | createAlias = newName: pkg: bin: 48 | pkgs.symlinkJoin { 49 | name = newName; 50 | paths = [(pkgs.writeShellScriptBin "${newName}" "${pkgs.${pkg}}/bin/${bin} $@") pkgs.${pkg}]; 51 | nativeBuildInputs = [pkgs.makeWrapper]; 52 | postBuild = "wrapProgram $out/bin/${newName} --prefix PATH : $out/bin"; 53 | }; 54 | createAliasSame = newName: pkg: createAlias newName pkg pkg; 55 | 56 | jdtls = createAliasSame "jdtls" "jdt-language-server"; 57 | in { 58 | home.packages = with pkgs; [ 59 | #nil 60 | #(inputs.nixd.packages.${pkgs.system}.default) 61 | #(inputs.nil.packages.${pkgs.system}.default) 62 | nil 63 | alejandra 64 | rust-analyzer 65 | jdt-language-server 66 | jdtls 67 | nodePackages.bash-language-server 68 | nodePackages.typescript-language-server 69 | nodePackages.vscode-langservers-extracted 70 | nodePackages.yaml-language-server 71 | clang-tools 72 | lua-language-server 73 | stylua 74 | ltex-ls 75 | marksman 76 | ]; 77 | programs.neovim.plugins = [ 78 | (pkgs.vimUtils.buildVimPlugin { 79 | name = "lsps"; 80 | src = let 81 | path = pkgs.writeTextDir "lua/lsps.lua" "return { ${ 82 | builtins.concatStringsSep 83 | ", " (map (x: "\"${builtins.replaceStrings ["-"] ["_"] x}\"") servers) 84 | }}"; 85 | in 86 | path; 87 | }) 88 | ]; 89 | programs.helix.languages = { 90 | language = [ 91 | { 92 | name = "bash"; 93 | auto-format = true; 94 | formatter = { 95 | command = "${pkgs.shfmt}/bin/shfmt"; 96 | args = ["-i" "2" "-"]; 97 | }; 98 | } 99 | ]; 100 | language-server = lib.genAttrs servers ( 101 | name: 102 | generateHelixLang name 103 | ); 104 | }; 105 | } 106 | -------------------------------------------------------------------------------- /home/media/music.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | inputs, 5 | ... 6 | }: let 7 | h = config.home.homeDirectory; 8 | d = config.xdg.dataHome; 9 | music = "${h}/Music"; 10 | /* 11 | mxlrc = with pkgs.python39Packages; let 12 | tiny = buildPythonPackage rec { 13 | pname = "tinytag"; 14 | version = "1.8.1"; 15 | 16 | src = fetchPypi { 17 | inherit pname version; 18 | sha256 = "363ab3107831a5598b68aaa061aba915fb1c7b4254d770232e65d5db8487636d"; 19 | }; 20 | }; 21 | in buildPythonPackage rec { 22 | name = "mxlrc"; 23 | version = "1.2.2"; 24 | propegatedBuildInputs = [tiny]; 25 | src = pkgs.fetchFromGitHub { 26 | owner = "fashni"; 27 | repo = "MxLRC"; 28 | rev = "v${version}"; 29 | sha256 = "sha256-cTekPt16gRu/qwQj/Ia9SgTTHZ8dBzS9aKC92foqPY8="; 30 | }; 31 | }; 32 | */ 33 | in { 34 | home.packages = with pkgs; [ 35 | tagger 36 | downonspot 37 | picard 38 | lame 39 | #(inputs.self.packages.${pkgs.hostPlatform.system}.open-utau) 40 | #mxlrc 41 | ]; 42 | xdg.userDirs.music = "${h}/Music"; 43 | services = { 44 | mpd = { 45 | enable = true; 46 | musicDirectory = music; 47 | playlistDirectory = "${music}/playlists"; 48 | extraConfig = '' 49 | audio_output { 50 | type "pipewire" 51 | name "PipeWire Sound Server" 52 | } 53 | audio_output { 54 | type "fifo" 55 | name "My fifo pipe" 56 | path "/tmp/mpd.fifo" 57 | } 58 | replaygain "track" 59 | replaygain_limit "no" 60 | ''; 61 | }; 62 | mpdris2 = { 63 | enable = true; 64 | }; 65 | }; 66 | programs = { 67 | ncmpcpp = { 68 | enable = true; 69 | package = pkgs.ncmpcpp.override { 70 | visualizerSupport = true; 71 | taglibSupport = true; 72 | clockSupport = true; 73 | outputsSupport = true; 74 | }; 75 | }; 76 | beets = { 77 | enable = true; 78 | settings = { 79 | directory = music; 80 | library = "${d}/beets/library.db"; 81 | plugins = [ 82 | "mpdupdate" 83 | "lyrics" 84 | "thumbnails" 85 | "fetchart" 86 | "embedart" 87 | # DEPRECATED "acousticbrainz" 88 | "chroma" 89 | "fromfilename" 90 | "lastgenre" 91 | ]; 92 | import = { 93 | move = true; 94 | write = true; 95 | }; 96 | mpd = { 97 | host = "localhost"; 98 | port = 6600; 99 | }; 100 | lyrics = { 101 | auto = true; 102 | }; 103 | thumbnails.auto = true; 104 | fetchart.auto = true; 105 | embedart = { 106 | auto = true; 107 | remove_art_file = true; 108 | }; 109 | acousticbrainz.auto = true; 110 | chroma.auto = true; 111 | }; 112 | }; 113 | }; 114 | } 115 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/keymap.lua: -------------------------------------------------------------------------------- 1 | local wk = require("which-key") 2 | 3 | wk.setup() 4 | 5 | -- Documentation func 6 | local function show_documentation() 7 | local filetype = vim.bo.filetype 8 | if vim.tbl_contains({ 'vim', 'help' }, filetype) then 9 | vim.cmd('h ' .. vim.fn.expand('')) 10 | elseif vim.tbl_contains({ 'man' }, filetype) then 11 | vim.cmd('Man ' .. vim.fn.expand('')) 12 | elseif vim.fn.expand('%:t') == 'Cargo.toml' and require('crates').popup_available() then 13 | require('crates').show_popup() 14 | else 15 | vim.lsp.buf.hover() 16 | end 17 | end 18 | 19 | 20 | -- Normal Mode Mappings 21 | wk.register({ 22 | [""] = { 23 | a = { 'AerialToggle!', "Toggle Aerial" }, 24 | f = { 25 | name = "Telescope and search", 26 | f = { "Telescope find_files", "Find File" }, 27 | b = { 'Telescope buffers', "Opens buffer view" }, 28 | l = { 'Telescope live_grep', "Search for text in all files" }, 29 | e = { 'Telescope diagnostics', "errors" } 30 | }, 31 | t = { 'NvimTreeToggle', "Toggles a file tree" } 32 | }, 33 | K = { show_documentation, "Displays hover information about the symbol under the cursor." }, 34 | g = { 35 | name = "LSP stuff", -- optional group name 36 | r = { 'lua vim.lsp.buf.rename()', "Renames all references to the symbol under the cursor." }, 37 | x = { 'lua vim.lsp.buf.code_action()', "Prompts the user for a code action to execute" }, 38 | d = { 'lua vim.lsp.buf.definition()', "Jumps to the definition of a something" }, 39 | e = { 'lua vim.lsp.buf.definition()', "Shows refrences of something" }, 40 | }, 41 | }, {}) 42 | 43 | 44 | -- local legendary = require('legendary') 45 | -- local helpers = require('legendary.helpers') 46 | -- 47 | -- local keymaps = { 48 | -- -- Legendary 49 | -- { 'L', legendary.find, description = "Search keymaps, commands, and autocmds" }, 50 | -- { 'Lk', helpers.lazy_required_fn('legendary', 'find', 'keymaps'), description = "Search keymaps" }, 51 | -- { 'Lc', helpers.lazy_required_fn('legendary', 'find', 'commands'), description = "Search commands" }, 52 | -- { 'La', helpers.lazy_required_fn('legendary', 'find', 'autocmds'), description = "Search autocmds" }, 53 | -- -- LSP 54 | -- { 'gr', 'LspRename', description = "Renames all references to the symbol under the cursor." }, 55 | -- { 'gx', 'LspCodeAction', description = "Prompts the user for a code action to execute", mode = 'n' }, 56 | -- { 'gx', ':LspCodeAction', description = "Prompts the user for a code action to execute, but with a range", 57 | -- mode = 'x' }, 58 | -- { 'K', 'LspHover', description = "Displays hover information about the symbol under the cursor." }, 59 | -- { 'so', 'SymbolsOutline', description = "Opens a symbols outline window" }, 60 | -- { 'Tr', 'TroubleToggle', description = "Opens a error window" }, 61 | -- -- misc 62 | -- { 't', 'NvimTreeToggle', description = "Toggles a file tree" }, 63 | -- { 'Ts', 'Telescope buffers', description = "Opens buffer view" } 64 | -- } 65 | -- 66 | -- legendary.bind_keymaps(keymaps) 67 | -- 68 | -- --vim.keymap.set("n", "gx", "LspCodeAction", {silent = true}) 69 | -- --vim.keymap.set("x", "gx", ":LspCodeAction", {silent = true}) 70 | -------------------------------------------------------------------------------- /modules/nix-daemon.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | inputs, 5 | lib, 6 | ... 7 | }: { 8 | nix = { 9 | package = inputs.nix-super.packages.${pkgs.system}.default; #pkgs.nixUnstable; # pkgs.nixFlake 10 | registry = let 11 | mapped = lib.mapAttrs (_: v: {flake = v;}) inputs; 12 | in 13 | mapped // {default = mapped.nixpkgs;}; 14 | 15 | #nixPath = ["nixpkgs=/etc/nix/inputs/nixpkgs" "home-manager=/etc/nix/flake-channels/home-manager"]; 16 | nixPath = lib.mapAttrsToList (key: _: "${key}=flake:${key}") config.nix.registry; 17 | #daemonCPUSchedPolicy = "idle"; 18 | #daemonIOSchedClass = "idle"; 19 | gc = { 20 | # set up garbage collection to run daily, 21 | # removing unused packages after three days 22 | automatic = true; 23 | dates = "daily"; 24 | options = "--delete-older-than 7d"; 25 | }; 26 | 27 | # Free up to 20GiB whenever there is less than 5GB left. 28 | extraOptions = '' 29 | min-free = ${toString (5 * 1024 * 1024 * 1024)} 30 | max-free = ${toString (20 * 1024 * 1024 * 1024)} 31 | ''; 32 | settings = { 33 | auto-optimise-store = true; 34 | builders-use-substitutes = true; 35 | experimental-features = ["nix-command" "flakes" "recursive-nix" "ca-derivations"]; 36 | flake-registry = "/etc/nix/registry.json"; 37 | keep-derivations = true; 38 | keep-outputs = true; 39 | substituters = [ 40 | "https://cache.ngi0.nixos.org" 41 | "https://cache.nixos.org" 42 | "https://nrdxp.cachix.org" 43 | "https://hyprland.cachix.org" 44 | "https://nix-community.cachix.org" 45 | "https://helix.cachix.org" 46 | "https://prismlauncher.cachix.org" 47 | "https://jakestanger.cachix.org" # ironbar 48 | "https://ezkea.cachix.org" # for aagl (if you know, you know) 49 | "https://cache.privatevoid.net" 50 | "https://nyx.chaotic.cx" 51 | "https://chaotic-nyx.cachix.org" 52 | "https://anyrun.cachix.org" 53 | ]; 54 | trusted-public-keys = [ 55 | "cache.ngi0.nixos.org-1:KqH5CBLNSyX184S9BKZJo1LxrxJ9ltnY2uAs5c/f1MA=" 56 | "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" 57 | "nrdxp.cachix.org-1:Fc5PSqY2Jm1TrWfm88l6cvGWwz3s93c6IOifQWnhNW4=" 58 | "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" 59 | "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" 60 | "helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs=" 61 | "prismlauncher.cachix.org-1:GhJfjdP1RFKtFSH3gXTIQCvZwsb2cioisOf91y/bK0w=" 62 | "jakestanger.cachix.org-1:VWJE7AWNe5/KOEvCQRxoE8UsI2Xs2nHULJ7TEjYm7mM=" # ironbar 63 | "ezkea.cachix.org-1:ioBmUbJTZIKsHmWWXPe1FSFbeVe+afhfgqgTSNd34eI=" # aagl (if you know, you know) 64 | "cache.privatevoid.net:SErQ8bvNWANeAvtsOESUwVYr2VJynfuc9JRwlzTTkVg=" 65 | "nyx.chaotic.cx-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8=" 66 | "chaotic-nyx.cachix.org-1:HfnXSw4pj95iI/n17rIDy40agHj12WfF+Gqk6SonIT8=" 67 | "anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s=" 68 | ]; 69 | 70 | trusted-users = ["root" "@wheel" "nix-builder"]; 71 | allowed-users = ["@wheel"]; 72 | max-jobs = "auto"; 73 | keep-going = true; 74 | log-lines = 20; 75 | warn-dirty = false; 76 | http-connections = 0; 77 | accept-flake-config = true; 78 | }; 79 | }; 80 | } 81 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/alpha.lua: -------------------------------------------------------------------------------- 1 | local alpha = require('alpha') 2 | local dashboard = require('alpha.themes.dashboard') 3 | local headers = require('extra').ascii_art 4 | --local colors = require('dracula').colors() 5 | 6 | local leader = '' 7 | 8 | local function button(sc, txt, leader_txt, keybind, keybind_opts) 9 | local sc_after = sc:gsub('%s', ''):gsub(leader_txt, '') 10 | 11 | local opts = { 12 | position = 'center', 13 | shortcut = sc, 14 | cursor = 5, 15 | width = 50, 16 | align_shortcut = 'right', 17 | hl_shortcut = 'Keyword', 18 | } 19 | 20 | if nil == keybind then 21 | keybind = sc_after 22 | end 23 | keybind_opts = vim.F.if_nil(keybind_opts, { noremap = true, silent = true, nowait = true }) 24 | opts.keymap = { 'n', sc_after, keybind, keybind_opts } 25 | 26 | local function on_press() 27 | -- local key = vim.api.nvim_replace_termcodes(keybind .. '', true, false, true) 28 | local key = vim.api.nvim_replace_termcodes(sc_after .. '', true, false, true) 29 | vim.api.nvim_feedkeys(key, 't', false) 30 | end 31 | 32 | return { 33 | type = 'button', 34 | val = txt, 35 | on_press = on_press, 36 | opts = opts, 37 | } 38 | end 39 | 40 | math.randomseed(os.time()) 41 | dashboard.section.header.val = headers[math.random(1, #headers)] 42 | 43 | dashboard.section.buttons.val = { 44 | button('e', '󰝒 New file', leader, 'ene'), 45 | --button('s', '󰇚 Sync plugins' , leader, 'PackerSync'), 46 | button('c', ' Configurations', leader, 'e ~/.config/nvim/'), 47 | button(leader .. ' f f', '󰈞 Find files', leader, 'Telescope find_files'), 48 | button(leader .. ' fof', '󰋚 Find old files', leader, 'Telescope oldfiles'), 49 | button(leader .. ' f ;', '󱎸 Live grep', leader, 'Telescope live_grep'), 50 | button(leader .. ' f g', '󰊢 Git status', leader, 'Telescope git_status'), 51 | button(leader .. ' q', '󰅚 Quit', leader, 'qa') 52 | } 53 | 54 | local function split_str(s, delimiter) 55 | local result = {}; 56 | for match in (s .. delimiter):gmatch("(.-)" .. delimiter) do 57 | table.insert(result, match); 58 | end 59 | return result; 60 | end 61 | 62 | local pack_dir = split_str(vim.opt.packpath._value, ",")[1] 63 | 64 | local num_plugins_loaded = #vim.fn.globpath(pack_dir .. "/pack/myNeovimPackages/start/", '*', 0, 1) 65 | 66 | dashboard.section.footer.val = { num_plugins_loaded .. ' plugins 󰚥 loaded' } 67 | 68 | dashboard.section.footer.opts.hl = 'Comment' 69 | 70 | local head_butt_padding = 4 71 | local occu_height = #dashboard.section.header.val + 2 * #dashboard.section.buttons.val + head_butt_padding 72 | local header_padding = math.max(0, math.ceil((vim.fn.winheight('$') - occu_height) * 0.25)) 73 | local foot_butt_padding_ub = vim.o.lines - header_padding - occu_height - #dashboard.section.footer.val - 3 74 | local foot_butt_padding = math.floor((vim.fn.winheight('$') - 2 * header_padding - occu_height)) 75 | foot_butt_padding = math.max(0, 76 | math.max(math.min(0, foot_butt_padding), math.min(math.max(0, foot_butt_padding), foot_butt_padding_ub))) 77 | 78 | dashboard.config.layout = { 79 | { type = 'padding', val = header_padding }, 80 | dashboard.section.header, 81 | { type = 'padding', val = head_butt_padding }, 82 | dashboard.section.buttons, 83 | { type = 'padding', val = foot_butt_padding }, 84 | dashboard.section.footer 85 | } 86 | 87 | vim.cmd( 88 | "au User AlphaReady if winnr('$') == 1 | set laststatus=0 showtabline=0 | endif | au BufUnload set laststatus=3 showtabline=2") 89 | alpha.setup(dashboard.opts) 90 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/bufferline.lua: -------------------------------------------------------------------------------- 1 | require('bufferline').setup { 2 | highlights = require("catppuccin.groups.integrations.bufferline").get(), 3 | options = { 4 | mode = "buffers", -- set to "tabs" to only show tabpages instead 5 | numbers = "none", 6 | close_command = "bdelete! %d", -- can be a string | function, see "Mouse actions" 7 | right_mouse_command = "bdelete! %d", -- can be a string | function, see "Mouse actions" 8 | left_mouse_command = "buffer %d", -- can be a string | function, see "Mouse actions" 9 | middle_mouse_command = nil, -- can be a string | function, see "Mouse actions" 10 | -- NOTE: this plugin is designed with this icon in mind, 11 | -- and so changing this is NOT recommended, this is intended 12 | -- as an escape hatch for people who cannot bear it for whatever reason 13 | indicator = { 14 | style = "icon", 15 | icon = '▎' 16 | }, 17 | buffer_close_icon = '󰅖', 18 | modified_icon = '●', 19 | close_icon = '', 20 | left_trunc_marker = '', 21 | right_trunc_marker = '', 22 | --- name_formatter can be used to change the buffer's label in the bufferline. 23 | --- Please note some names can/will break the 24 | --- bufferline so use this at your discretion knowing that it has 25 | --- some limitations that will *NOT* be fixed. 26 | name_formatter = function(buf) -- buf contains a "name", "path" and "bufnr" 27 | -- remove extension from markdown files for example 28 | if buf.name:match('%.md') then 29 | return vim.fn.fnamemodify(buf.name, ':t:r') 30 | end 31 | end, 32 | max_name_length = 18, 33 | max_prefix_length = 15, -- prefix used when a buffer is de-duplicated 34 | tab_size = 18, 35 | diagnostics = "nvim_lsp", 36 | diagnostics_update_in_insert = false, 37 | diagnostics_indicator = function(count, level, diagnostics_dict, context) 38 | return "(" .. count .. ")" 39 | end, 40 | -- NOTE: this will be called a lot so don't do any heavy processing here 41 | custom_filter = function(buf_number, buf_numbers) 42 | -- filter out filetypes you don't want to see 43 | if vim.bo[buf_number].filetype ~= "" then 44 | return true 45 | end 46 | -- filter out by buffer name 47 | if vim.fn.bufname(buf_number) ~= "" then 48 | return true 49 | end 50 | -- filter out based on arbitrary rules 51 | -- e.g. filter out vim wiki buffer from tabline in your work repo 52 | if vim.fn.getcwd() == "" and vim.bo[buf_number].filetype ~= "wiki" then 53 | return true 54 | end 55 | -- filter out by it's index number in list (don't show first buffer) 56 | if buf_numbers[1] ~= buf_number then 57 | return true 58 | end 59 | end, 60 | offsets = { { filetype = "NvimTree", text = "File Explorer" } }, 61 | color_icons = true, -- whether or not to add the filetype icon highlights 62 | show_buffer_icons = true, -- disable filetype icons for buffers 63 | show_buffer_close_icons = true, 64 | --show_buffer_default_icon = true, -- whether or not an unrecognised filetype should show a default icon 65 | get_element_icon = function(e) 66 | return require('nvim-web-devicons').get_icon_by_filetype(e.filetype, { default = false }) 67 | end, 68 | show_close_icon = false, 69 | show_tab_indicators = true, 70 | persist_buffer_sort = true, -- whether or not custom sorted buffers should persist 71 | -- can also be a table containing 2 custom separators 72 | -- [focused and unfocused]. eg: { '|', '|' } 73 | separator_style = "thin", 74 | enforce_regular_tabs = false, 75 | always_show_bufferline = true, 76 | sort_by = 'insert_at_end' 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/ui.lua: -------------------------------------------------------------------------------- 1 | require('dressing').setup { 2 | input = { 3 | -- Set to false to disable the vim.ui.input implementation 4 | enabled = true, 5 | 6 | -- Default prompt string 7 | default_prompt = "Input:", 8 | 9 | -- Can be 'left', 'right', or 'center' 10 | prompt_align = "left", 11 | 12 | -- When true, will close the modal 13 | insert_only = true, 14 | 15 | -- These are passed to nvim_open_win 16 | anchor = "SW", 17 | border = "rounded", 18 | -- 'editor' and 'win' will default to being centered 19 | relative = "cursor", 20 | 21 | -- These can be integers or a float between 0 and 1 (e.g. 0.4 for 40%) 22 | prefer_width = 40, 23 | width = nil, 24 | -- min_width and max_width can be a list of mixed types. 25 | -- min_width = {20, 0.2} means "the greater of 20 columns or 20% of total" 26 | max_width = { 140, 0.9 }, 27 | min_width = { 20, 0.2 }, 28 | 29 | win_options = { 30 | -- Window transparency (0-100) 31 | winblend = 10, 32 | -- Change default highlight groups (see :help winhl) 33 | winhighlight = "", 34 | }, 35 | 36 | override = function(conf) 37 | -- This is the config that will be passed to nvim_open_win. 38 | -- Change values here to customize the layout 39 | return conf 40 | end, 41 | 42 | -- see :help dressing_get_config 43 | get_config = nil, 44 | }, 45 | select = { 46 | -- Set to false to disable the vim.ui.select implementation 47 | enabled = true, 48 | 49 | -- Priority list of preferred vim.select implementations 50 | backend = { "telescope", "fzf_lua", "fzf", "builtin", "nui" }, 51 | 52 | -- Options for telescope selector 53 | -- These are passed into the telescope picker directly. Can be used like: 54 | -- telescope = require('telescope.themes').get_ivy({...}) 55 | telescope = nil, 56 | 57 | -- Options for fzf selector 58 | fzf = { 59 | window = { 60 | width = 0.5, 61 | height = 0.4, 62 | }, 63 | }, 64 | 65 | -- Options for fzf_lua selector 66 | fzf_lua = { 67 | winopts = { 68 | width = 0.5, 69 | height = 0.4, 70 | }, 71 | }, 72 | 73 | -- Options for nui Menu 74 | nui = { 75 | position = "50%", 76 | size = nil, 77 | relative = "editor", 78 | border = { 79 | style = "rounded", 80 | }, 81 | max_width = 80, 82 | max_height = 40, 83 | }, 84 | 85 | -- Options for built-in selector 86 | builtin = { 87 | -- These are passed to nvim_open_win 88 | anchor = "NW", 89 | border = "rounded", 90 | -- 'editor' and 'win' will default to being centered 91 | relative = "editor", 92 | win_options = { 93 | -- Window transparency (0-100) 94 | winblend = 10, 95 | -- Change default highlight groups (see :help winhl) 96 | winhighlight = "", 97 | }, 98 | -- These can be integers or a float between 0 and 1 (e.g. 0.4 for 40%) 99 | -- the min_ and max_ options can be a list of mixed types. 100 | -- max_width = {140, 0.8} means "the lesser of 140 columns or 80% of total" 101 | width = nil, 102 | max_width = { 140, 0.8 }, 103 | min_width = { 40, 0.2 }, 104 | height = nil, 105 | max_height = 0.9, 106 | min_height = { 10, 0.2 }, 107 | 108 | override = function(conf) 109 | -- This is the config that will be passed to nvim_open_win. 110 | -- Change values here to customize the layout 111 | return conf 112 | end, 113 | }, 114 | 115 | -- Used to override format_item. See :help dressing-format 116 | format_item_override = {}, 117 | 118 | -- see :help dressing_get_config 119 | get_config = nil, 120 | }, 121 | } 122 | -------------------------------------------------------------------------------- /home/gui/rofi.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | ... 5 | }: { 6 | programs.rofi = { 7 | enable = true; 8 | package = pkgs.rofi-wayland; 9 | plugins = with pkgs; [rofi-emoji]; 10 | extraConfig = { 11 | modi = ["run" "drun" "emoji"]; 12 | show-icons = true; 13 | terminal = "kitty"; 14 | drun-display-format = "{icon} {name}"; 15 | location = 0; 16 | disable-history = false; 17 | hide-scrollbar = true; 18 | display-drun = "  Apps "; 19 | display-run = "  Run "; 20 | display-window = " 󰕰 Window"; 21 | display-Network = " 󰤨 Network"; 22 | display-emoji = " Emojis"; 23 | sidebar-mode = true; 24 | }; 25 | theme = let 26 | inherit (config.lib.formats.rasi) mkLiteral; 27 | in { 28 | "*" = { 29 | bg-col = mkLiteral "#1e1e2e"; 30 | bg-col-light = mkLiteral "#1e1e2e"; 31 | border-col = mkLiteral "#1e1e2e"; 32 | selected-col = mkLiteral "#1e1e2e"; 33 | blue = mkLiteral "#89b4fa"; 34 | fg-col = mkLiteral "#cdd6f4"; 35 | fg-col2 = mkLiteral "#f38ba8"; 36 | grey = mkLiteral "#6c7086"; 37 | 38 | width = 600; 39 | font = "JetBrainsMono Nerd Font 14"; 40 | }; 41 | 42 | "element-text, element-icon , mode-switcher" = { 43 | background-color = mkLiteral "inherit"; 44 | text-color = mkLiteral "inherit"; 45 | }; 46 | 47 | "window" = { 48 | height = mkLiteral "360px"; 49 | border = mkLiteral "3px"; 50 | border-color = mkLiteral "@border-col"; 51 | background-color = mkLiteral "@bg-col"; 52 | }; 53 | 54 | "mainbox" = { 55 | background-color = mkLiteral "@bg-col"; 56 | }; 57 | 58 | "inputbar" = { 59 | children = map mkLiteral ["prompt" "entry"]; 60 | background-color = mkLiteral "@bg-col"; 61 | border-radius = mkLiteral "5px"; 62 | padding = mkLiteral "2px"; 63 | }; 64 | 65 | "prompt" = { 66 | background-color = mkLiteral "@blue"; 67 | padding = mkLiteral "6px"; 68 | text-color = mkLiteral "@bg-col"; 69 | border-radius = mkLiteral "3px"; 70 | margin = mkLiteral "20px 0px 0px 20px"; 71 | }; 72 | 73 | "textbox-prompt-colon" = { 74 | expand = false; 75 | str = ":"; 76 | }; 77 | 78 | "entry" = { 79 | padding = mkLiteral "6px"; 80 | margin = mkLiteral "20px 0px 0px 10px"; 81 | text-color = mkLiteral "@fg-col"; 82 | background-color = mkLiteral "@bg-col"; 83 | }; 84 | 85 | "listview" = { 86 | border = mkLiteral "0px 0px 0px"; 87 | padding = mkLiteral "6px 0px 0px"; 88 | margin = mkLiteral "10px 0px 0px 20px"; 89 | columns = 2; 90 | lines = 5; 91 | background-color = mkLiteral "@bg-col"; 92 | }; 93 | 94 | "element" = { 95 | padding = mkLiteral "5px"; 96 | background-color = mkLiteral "@bg-col"; 97 | text-color = mkLiteral "@fg-col"; 98 | }; 99 | 100 | "element-icon" = { 101 | size = mkLiteral "25px"; 102 | }; 103 | 104 | "element selected" = { 105 | background-color = mkLiteral "@selected-col"; 106 | text-color = mkLiteral "@fg-col2"; 107 | }; 108 | 109 | "mode-switcher" = { 110 | spacing = 0; 111 | }; 112 | 113 | "button" = { 114 | padding = mkLiteral "10px"; 115 | background-color = mkLiteral "@bg-col-light"; 116 | text-color = mkLiteral "@grey"; 117 | vertical-align = mkLiteral "0.5"; 118 | horizontal-align = mkLiteral "0.5"; 119 | }; 120 | 121 | "button selected" = { 122 | background-color = mkLiteral "@bg-col"; 123 | text-color = mkLiteral "@blue"; 124 | }; 125 | }; 126 | }; 127 | } 128 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | inputs, 5 | ... 6 | } @ args: { 7 | #home.packages = with pkgs; [ neovim ]; 8 | programs.neovim = { 9 | enable = true; 10 | 11 | vimAlias = true; 12 | viAlias = true; 13 | vimdiffAlias = true; 14 | 15 | plugins = let 16 | dirtytalk = pkgs.vimUtils.buildVimPlugin { 17 | name = "vim-dirtytalk"; 18 | src = inputs.vim-dirtytalk; 19 | }; 20 | nvim-treesitter-endwise = pkgs.vimUtils.buildVimPlugin { 21 | name = "nvim-treesitter-endwise"; 22 | src = inputs.nvim-treesitter-endwise; 23 | }; 24 | cleanfold = pkgs.vimUtils.buildVimPlugin { 25 | name = "cleanfold-nvim"; 26 | src = inputs.nvim-cleanfold; 27 | }; 28 | config = pkgs.vimUtils.buildVimPlugin { 29 | name = "config"; 30 | src = lib.cleanSourceWith { 31 | filter = name: _type: let 32 | baseName = baseNameOf (toString name); 33 | in 34 | !(lib.hasSuffix ".nix" baseName); 35 | src = lib.cleanSource ./.; 36 | }; 37 | }; 38 | in 39 | with pkgs.vimPlugins; [ 40 | impatient-nvim 41 | #nvim-notify 42 | nvim-web-devicons 43 | plenary-nvim 44 | popfix 45 | dressing-nvim 46 | catppuccin-nvim 47 | gitsigns-nvim 48 | neogit 49 | telescope-nvim 50 | vim-html-template-literals 51 | vim-javascript 52 | 53 | # LSP 54 | nvim-lspconfig 55 | #nlsp-settings-nvim 56 | #mason-nvim 57 | #mason-lspconfig-nvim 58 | null-ls-nvim 59 | #nvim-lsp-basics 60 | fidget-nvim 61 | lsp_lines-nvim 62 | aerial-nvim 63 | #symbols-outline-nvim 64 | trouble-nvim 65 | lsp-format-nvim 66 | #hlargs-nvim 67 | #schemastore-nvim 68 | rust-tools-nvim 69 | nvim-jdtls 70 | lspkind-nvim 71 | 72 | which-key-nvim 73 | nvim-navic 74 | bufferline-nvim 75 | nvim-tree-lua 76 | friendly-snippets 77 | luasnip 78 | 79 | # Completion 80 | nvim-cmp 81 | cmp-cmdline 82 | cmp-path 83 | cmp-buffer 84 | cmp-nvim-lsp 85 | cmp_luasnip 86 | #cmp-ctags 87 | cmp-nvim-lua 88 | cmp-omni 89 | cmp-treesitter 90 | #lsp_signature-nvim 91 | crates-nvim 92 | cmp-nvim-lsp-signature-help 93 | cmp-nvim-lsp-document-symbol 94 | cmp-emoji 95 | cmp-greek 96 | 97 | # Treesitter 98 | (nvim-treesitter.withPlugins (_: pkgs.tree-sitter.allGrammars)) 99 | nvim-treesitter-context 100 | nvim-ts-rainbow2 101 | comment-nvim 102 | nvim-ts-autotag 103 | nvim-treesitter-endwise 104 | nvim-autopairs 105 | 106 | alpha-nvim 107 | #cinnamon-nvim #config 108 | lualine-nvim 109 | indent-blankline-nvim #config 110 | nvim-colorizer-lua #config 111 | toggleterm-nvim 112 | dirtytalk 113 | cleanfold #config 114 | nvim-scrollview #config 115 | markdown-preview-nvim 116 | # Debug Adapter Protocol (wip, and disabled) 117 | nvim-dap 118 | nvim-dap-ui 119 | 120 | editorconfig-nvim 121 | yuck-vim 122 | vim-parinfer 123 | 124 | # My config 125 | config 126 | ]; 127 | package = pkgs.neovim-nightly; 128 | extraPackages = with pkgs; [gcc ripgrep fd]; 129 | extraConfig = '' 130 | lua << EOF 131 | require("impatient") 132 | require("config") 133 | EOF 134 | ''; 135 | }; 136 | 137 | # add config 138 | #xdg.configFile."nvim/lua".source = lib.cleanSourceWith { 139 | # filter = name: _type: let 140 | # baseName = baseNameOf (toString name); 141 | # in 142 | # !(lib.hasSuffix ".nix" baseName); 143 | # src = lib.cleanSource ./lua; 144 | #}; 145 | } 146 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/git.lua: -------------------------------------------------------------------------------- 1 | local neogit = require('neogit') 2 | local signs = require('gitsigns') 3 | 4 | neogit.setup { 5 | disable_signs = false, 6 | disable_hint = false, 7 | disable_context_highlighting = false, 8 | disable_commit_confirmation = false, 9 | -- Neogit refreshes its internal state after specific events, which can be expensive depending on the repository size. 10 | -- Disabling `auto_refresh` will make it so you have to manually refresh the status after you open it. 11 | auto_refresh = true, 12 | disable_builtin_notifications = false, 13 | use_magit_keybindings = false, 14 | commit_popup = { 15 | kind = "split", 16 | }, 17 | -- Change the default way of opening neogit 18 | kind = "vsplit", 19 | -- customize displayed signs 20 | signs = { 21 | -- { CLOSED, OPENED } 22 | section = { ">", "v" }, 23 | item = { ">", "v" }, 24 | hunk = { "", "" }, 25 | }, 26 | integrations = { 27 | -- Neogit only provides inline diffs. If you want a more traditional way to look at diffs, you can use `sindrets/diffview.nvim`. 28 | -- The diffview integration enables the diff popup, which is a wrapper around `sindrets/diffview.nvim`. 29 | -- 30 | -- Requires you to have `sindrets/diffview.nvim` installed. 31 | -- use { 32 | -- 'TimUntersberger/neogit', 33 | -- requires = { 34 | -- 'nvim-lua/plenary.nvim', 35 | -- 'sindrets/diffview.nvim' 36 | -- } 37 | -- } 38 | -- 39 | diffview = false 40 | }, 41 | -- Setting any section to `false` will make the section not render at all 42 | sections = { 43 | untracked = { 44 | folded = false 45 | }, 46 | unstaged = { 47 | folded = false 48 | }, 49 | staged = { 50 | folded = false 51 | }, 52 | stashes = { 53 | folded = true 54 | }, 55 | unpulled = { 56 | folded = true 57 | }, 58 | unmerged = { 59 | folded = false 60 | }, 61 | recent = { 62 | folded = true 63 | }, 64 | }, 65 | -- override/add mappings 66 | mappings = { 67 | -- modify status buffer mappings 68 | status = { 69 | -- Adds a mapping with "B" as key that does the "BranchPopup" command 70 | ["B"] = "BranchPopup", 71 | -- Removes the default mapping of "s" 72 | ["s"] = "", 73 | } 74 | } 75 | } 76 | 77 | signs.setup { 78 | signs = { 79 | add = {hl = 'GitSignsAdd' , text = '│', numhl='GitSignsAddNr' , linehl='GitSignsAddLn'}, 80 | change = {hl = 'GitSignsChange', text = '│', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'}, 81 | delete = {hl = 'GitSignsDelete', text = '_', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'}, 82 | topdelete = {hl = 'GitSignsDelete', text = '‾', numhl='GitSignsDeleteNr', linehl='GitSignsDeleteLn'}, 83 | changedelete = {hl = 'GitSignsChange', text = '~', numhl='GitSignsChangeNr', linehl='GitSignsChangeLn'}, 84 | }, 85 | signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` 86 | numhl = false, -- Toggle with `:Gitsigns toggle_numhl` 87 | linehl = false, -- Toggle with `:Gitsigns toggle_linehl` 88 | word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` 89 | watch_gitdir = { 90 | interval = 1000, 91 | follow_files = true 92 | }, 93 | attach_to_untracked = true, 94 | current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame` 95 | current_line_blame_opts = { 96 | virt_text = true, 97 | virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align' 98 | delay = 1000, 99 | ignore_whitespace = false, 100 | }, 101 | current_line_blame_formatter = ', - ', 102 | sign_priority = 6, 103 | update_debounce = 100, 104 | status_formatter = nil, -- Use default 105 | max_file_length = 40000, 106 | preview_config = { 107 | -- Options passed to nvim_open_win 108 | border = 'single', 109 | style = 'minimal', 110 | relative = 'cursor', 111 | row = 0, 112 | col = 1 113 | }, 114 | yadm = { 115 | enable = false 116 | }, 117 | } 118 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cat NixOS dots 2 | > structure similar to @fufexan's[^fuf] dots 3 | 4 | My Catppuccin[^cat] themed dotfiles written in nix, managed with home-manager[^hm] & NixOS 5 | 6 | ## Meta 7 | 8 | ### Usage 9 | ```sh 10 | nixos-rebuild switch --flake . --use-remote-sudo 11 | ``` 12 | 13 | ### OS Support 14 | Only NixOS is supported as of now, no nix-darwin, no NixNG, and no generic linux 15 | 16 | ### Screenshots 17 | Don't exist, because I don't feel this is unique enough to be 18 | shown off ATM, this is just so I have a public place to show 19 | my dots, but in the near future, that will not be the case 🙂 20 | 21 | ## Overview of components 22 | 23 | ### CLI 24 | 25 | #### Shell 26 | My shell is Z-shell[^zsh], prompt is Powerlevel10k[^pk], and my plugins are 27 | managed with home-manager[^hm], (Oh My ZSH free, and will always be) 28 | 29 | #### Terminal 30 | Good ol' Kitty[^kty] with JetBrains Mono Nerd[^jbm] 31 | 32 | #### Fetch 33 | Just Macchina[^mc] nothing special, cat is in `ascii.nix` 🙂 34 | 35 | ### GUI 36 | 37 | #### GTK and Kvantum (QT) 38 | Just using the respective themes from Catppuccin[^cat] 39 | 40 | #### Compositor 41 | Hyprland[^hypr], because who doesn't love Hyprland[^hypr]? 42 | 43 | #### Bar/Shell 44 | ATM its all yoinked from @fufexan[^fuf], which is built in eww[^eww]. 45 | Though don't use my setup as its mostly broken, 46 | working on a refactor in rust, and a refactor of menu. 47 | 48 | #### Display Manager (AKA Login Manager) 49 | Gtkgreet[^gtkg] running under Greetd[^gtd], running under cage[^cage], though 50 | the styling is pretty broken. 51 | 52 | ### Media 53 | 54 | #### Music 55 | For music I use DownOnSpot[^down] to download my music from 56 | Spotify (Not using bypass, I'm paying for premium), 57 | which is tagged using beets[^beet], then that music is 58 | synced with Nextcloud[^ncld], and played through MPD[^mpd], 59 | which is controlled by ncmpcpp[^nc] 60 | 61 | #### Non music (aka video) 62 | I have a basic MPV[^mpv] setup configured, but that's it, 63 | nothing special 64 | 65 | ### Secrets 66 | NixOS secrets are managed through agenix[^anix] 67 | 68 | #### Old home secret stuff 69 | > This does not apply anymore, I use agenix for everything, 70 | but my custom home secrets setup is still there is someone wants 71 | 72 | Since agenix[^anix] doesn't support home secrets, nor 73 | did homeage[^hage] work for me, or work how I wanted it 74 | too, I found it would be faster just to use write my own, 75 | maybe I'll publish and improve my implementation later on 76 | 77 | ## TODO 78 | - [ ] Add locking, and inhibiting of it 79 | 80 | ## Credits 81 | - Thankies [nyx](https://github.com/NotAShelf/nyx) for some securties stuffs 82 | 83 | [^fuf]: [His profile](https://github.com/fufexan/) 84 | [^hypr]: [Hyprland's repository](https://github.com/hyprwm/Hyprland/) 85 | [^anix]: [Agenix's repository](https://github.com/ryantm/agenix/) 86 | [^hage]: [Homeage's repository](https://github.com/jordanisaacs/homeage/) 87 | [^nc]: [ncmpcpp's repository](https://github.com/ncmpcpp/ncmpcpp/) 88 | [^mpd]: [MPD's website](https://musicpd.org/) 89 | [^down]: [DownOnSpot's repository](https://github.com/oSumAtrIX/DownOnSpot/) 90 | [^cat]: [Catppuccin's home repository](https://github.com/catppuccin/catppuccin/) 91 | [^beet]: [Beet's website](https://beets.io/) 92 | [^hm]: [Home Manager's repository](https://github.com/nix-community/home-manager/) 93 | [^pk]: [Powerlevel10k's repository](https://github.com/romkatv/powerlevel10k/) 94 | [^zsh]: [Z-Shell's website](https://zsh.sourceforge.io/) 95 | [^mc]: [Macchina's repository](https://github.com/Macchina-CLI/macchina/) 96 | [^kty]: [Kitty's website](https://sw.kovidgoyal.net/kitty/) 97 | [^jbm]: [Jetbrains Mono's website](https://www.jetbrains.com/lp/mono/) 98 | [^eww]: [Eww's repository](https://github.com/elkowar/eww/) 99 | [^gtd]: [Greetd's repository](https://sr.ht/~kennylevinsen/greetd/) 100 | [^gtkg]: [Gtkgreet's repository](https://git.sr.ht/~kennylevinsen/gtkgreet/) 101 | [^mpv]: [MPV's website](https://mpv.io/) 102 | [^ncld]: [Nextcloud's website](https://nextcloud.com/) 103 | [^cage]: [Cage's repository](https://github.com/Hjdskes/cage/) 104 | -------------------------------------------------------------------------------- /home/gui/ironbar/styles/main.scss: -------------------------------------------------------------------------------- 1 | @use "colors" as *; 2 | 3 | * { 4 | font-family: Product Sans, Roboto, sans-serif, monospace; 5 | font-size: 13px; 6 | transition: 200ms ease; 7 | 8 | color: $fg; 9 | /*background-color: #2d2d2d;*/ 10 | /*background-color: $bg;*/ 11 | border: none; 12 | 13 | /*opacity: 0.4;*/ 14 | } 15 | 16 | #bar { 17 | background-color: $bg; 18 | } 19 | 20 | .container { 21 | background-color: $bg; 22 | } 23 | 24 | 25 | #right > * + * { 26 | margin-left: 20px; 27 | } 28 | 29 | #left > * + * { 30 | margin-right: 20px; 31 | } 32 | .nix-launcher button { 33 | all: unset; 34 | background-color: $bg; 35 | } 36 | .popup-nix-launcher label { 37 | font-family: monospace; 38 | } 39 | 40 | .nix-launcher label { 41 | background-color: transparent; 42 | color: $bg; 43 | font-family: monospace; 44 | font-size: 1.5rem; 45 | padding: 0 1.1rem 0 0.5rem; 46 | } 47 | 48 | .workspaces { 49 | all: unset; 50 | margin-left: 10px; 51 | } 52 | .workspaces label { 53 | font-family: Material Symbols Outlined; 54 | font-size: 0.9rem; 55 | } 56 | .workspaces .item { 57 | all: unset; 58 | color: $pink; 59 | margin-right: 5px; 60 | padding: 0px; 61 | font-family: Material Symbols Outlined; 62 | border-radius: 20px; 63 | } 64 | 65 | .workspaces .item.focused { 66 | color: $red; 67 | } 68 | .workspaces .item.focused label { 69 | font-size: 1.2rem; 70 | } 71 | .workspaces .item.inactive { 72 | color: $maroon; 73 | } 74 | .workspaces .item.inactive label { 75 | font-size: 0.5rem; 76 | } 77 | 78 | .clock { 79 | color: $fg; 80 | background-color: $bg; 81 | font-weight: bold; 82 | } 83 | 84 | .sysinfo { 85 | color: $fg; 86 | } 87 | 88 | .tray { 89 | background-color: $bg; 90 | } 91 | 92 | .tray .item { 93 | background-color: $bg; 94 | -gtk-icon-effect: dim; 95 | } 96 | 97 | .upower, 98 | .upower * { 99 | all: unset; 100 | background-color: $bg; 101 | color: $fg; 102 | } 103 | .music-img { 104 | border-radius: 8px; 105 | margin-right: 8px; 106 | } 107 | .music-ctrls * { 108 | all: unset; 109 | margin-left: 10px; 110 | } 111 | 112 | .music { 113 | background-color: $bg; 114 | color: $fg; 115 | } 116 | .music label { 117 | font-size: 16px; 118 | } 119 | 120 | .popup { 121 | background-color: $bg; 122 | border: 1px solid $subtext0; 123 | } 124 | 125 | .popup-clock { 126 | padding: 1em; 127 | } 128 | 129 | .calendar-clock { 130 | color: $fg; 131 | font-size: 2.5em; 132 | padding-bottom: 0.1em; 133 | } 134 | 135 | .calendar { 136 | background-color: $bg; 137 | color: $fg; 138 | } 139 | 140 | .calendar .header { 141 | padding-top: 1em; 142 | border-top: 1px solid $subtext0; 143 | font-size: 1.5em; 144 | } 145 | 146 | .calendar:selected { 147 | background-color: $blue; 148 | } 149 | 150 | .power-menu { 151 | margin-left: 10px; 152 | } 153 | 154 | .power-menu .power-btn { 155 | color: $fg; 156 | background-color: $bg; 157 | } 158 | 159 | .power-menu .power-btn:hover { 160 | background-color: $mantle; 161 | } 162 | 163 | .popup-power-menu { 164 | padding: 1em; 165 | } 166 | 167 | .popup-power-menu #header { 168 | color: $fg; 169 | font-size: 1.4em; 170 | border-bottom: 1px solid $overlay1; 171 | padding-bottom: 0.4em; 172 | margin-bottom: 0.8em; 173 | } 174 | 175 | .popup-power-menu .power-btn { 176 | color: $fg; 177 | background-color: $bg; 178 | border: 1px solid $overlay1; 179 | padding: 0.6em 1em; 180 | } 181 | 182 | .popup-power-menu .power-btn + .power-btn { 183 | margin-left: 1em; 184 | } 185 | 186 | .popup-power-menu .power-btn:hover { 187 | background-color: $mantle; 188 | } 189 | 190 | .music { 191 | all: unset; 192 | color: $fg; 193 | font-size: 16px; 194 | } 195 | 196 | .popup-music .album-art { 197 | margin-right: 1em; 198 | border-radius: 20px; 199 | } 200 | 201 | .popup-music .title .icon-box, 202 | .popup-mpd .title .icon-icon { 203 | font-size: 1.7em; 204 | } 205 | 206 | .popup-music .controls * { 207 | border-radius: 0; 208 | background-color: transparent; 209 | color: $fg; 210 | } 211 | 212 | .popup-music .controls *:disabled { 213 | color: $overlay1; 214 | } 215 | 216 | .focused { 217 | color: $fg; 218 | } 219 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/treesitter.lua: -------------------------------------------------------------------------------- 1 | require('nvim-treesitter.configs').setup { 2 | highlight = { 3 | enable = true, 4 | }, 5 | indent = { 6 | enable = true 7 | }, 8 | endwise = { 9 | enable = true, 10 | }, 11 | autotag = { 12 | enable = true, 13 | filetypes = { 14 | 'html', 15 | 'javascript', 16 | 'typescript', 17 | 'javascriptreact', 18 | 'typescriptreact', 19 | 'svelte', 20 | 'tsx', 21 | 'jsx', 22 | 'xml', 23 | 'markdown', 24 | }, 25 | }, 26 | rainbow = { 27 | enable = true, 28 | query = 'rainbow-parens', 29 | strategy = require('ts-rainbow').strategy.global 30 | } 31 | } 32 | 33 | require('nvim-autopairs').setup {} 34 | 35 | require 'treesitter-context'.setup { 36 | enable = true, -- Enable this plugin (Can be enabled/disabled later via commands) 37 | throttle = true, -- Throttles plugin updates (may improve performance) 38 | max_lines = 2, -- How many lines the window should span. Values <= 0 mean no limit. 39 | patterns = { 40 | -- Match patterns for TS nodes. These get wrapped to match at word boundaries. 41 | -- For all filetypes 42 | -- Note that setting an entry here replaces all other patterns for this entry. 43 | -- By setting the 'default' entry below, you can control which nodes you want to 44 | -- appear in the context window. 45 | default = { 46 | 'class', 47 | 'function', 48 | 'method', 49 | 'for', -- These won't appear in the context 50 | 'while', 51 | 'if', 52 | 'switch', 53 | -- 'case', 54 | }, 55 | -- Example for a specific filetype. 56 | -- If a pattern is missing, *open a PR* so everyone can benefit. 57 | -- rust = { 58 | -- 'impl_item', 59 | -- }, 60 | }, 61 | exact_patterns = { 62 | -- Example for a specific filetype with Lua patterns 63 | -- Treat patterns.rust as a Lua pattern (i.e "^impl_item$" will 64 | -- exactly match "impl_item" only) 65 | -- rust = true, 66 | } 67 | } 68 | 69 | require('Comment').setup({ 70 | ---Add a space b/w comment and the line 71 | ---@type boolean|fun():boolean 72 | padding = true, 73 | ---Whether the cursor should stay at its position 74 | ---NOTE: This only affects NORMAL mode mappings and doesn't work with dot-repeat 75 | ---@type boolean 76 | sticky = true, 77 | ---Lines to be ignored while comment/uncomment. 78 | ---Could be a regex string or a function that returns a regex string. 79 | ---Example: Use '^$' to ignore empty lines 80 | ---@type string|fun():string 81 | ignore = nil, 82 | ---LHS of toggle mappings in NORMAL + VISUAL mode 83 | ---@type table 84 | toggler = { 85 | ---Line-comment toggle keymap 86 | line = 'gcc', 87 | ---Block-comment toggle keymap 88 | block = 'gbc', 89 | }, 90 | ---LHS of operator-pending mappings in NORMAL + VISUAL mode 91 | ---@type table 92 | opleader = { 93 | ---Line-comment keymap 94 | line = 'gc', 95 | ---Block-comment keymap 96 | block = 'gb', 97 | }, 98 | ---LHS of extra mappings 99 | ---@type table 100 | extra = { 101 | ---Add comment on the line above 102 | above = 'gcO', 103 | ---Add comment on the line below 104 | below = 'gco', 105 | ---Add comment at the end of line 106 | eol = 'gcA', 107 | }, 108 | ---Create basic (operator-pending) and extended mappings for NORMAL + VISUAL mode 109 | ---NOTE: If `mappings = false` then the plugin won't create any mappings 110 | ---@type boolean|table 111 | mappings = { 112 | ---Operator-pending mapping 113 | ---Includes `gcc`, `gbc`, `gc[count]{motion}` and `gb[count]{motion}` 114 | ---NOTE: These mappings can be changed individually by `opleader` and `toggler` config 115 | basic = true, 116 | ---Extra mapping 117 | ---Includes `gco`, `gcO`, `gcA` 118 | extra = true, 119 | ---Extended mapping 120 | ---Includes `g>`, `g<`, `g>[count]{motion}` and `g<[count]{motion}` 121 | extended = false, 122 | }, 123 | ---Pre-hook, called before commenting the line 124 | ---@type fun(ctx: Ctx):string 125 | pre_hook = nil, 126 | ---Post-hook, called after commenting is done 127 | ---@type fun(ctx: Ctx) 128 | post_hook = nil, 129 | }) 130 | -- "markdown", "md", "html", "txt", "js", "ts", "tsx", "jsx", "rst" 131 | 132 | local hl_status, hlargs = pcall(require, 'hlargs') 133 | if hl_status then 134 | hlargs.setup { 135 | color = "#50fa7b", 136 | } 137 | end 138 | -------------------------------------------------------------------------------- /home/cli/zsh.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | config, 4 | ... 5 | }: { 6 | home.packages = with pkgs; [ 7 | zsh-powerlevel10k 8 | zsh-fzf-tab 9 | lesspipe 10 | less 11 | bat 12 | exa 13 | chafa 14 | exiftool 15 | file 16 | binutils 17 | figlet 18 | ]; 19 | programs.zsh = { 20 | enable = true; 21 | enableCompletion = true; 22 | autocd = true; 23 | enableSyntaxHighlighting = true; 24 | enableAutosuggestions = true; 25 | historySubstringSearch = { 26 | searchUpKey = '' ^[[A' history-substring-search-up 27 | bindkey "$terminfo[kcuu1]" history-substring-search-up 28 | bindkey -M vicmd 'k' history-substring-search-up 29 | bindkey -M emacs '^P''; 30 | searchDownKey = '' ^[[B' history-substring-search-down 31 | bindkey "$terminfo[kcud1]" history-substring-search-down 32 | bindkey -M vicmd 'j' history-substring-search-down 33 | bindkey -M emacs '^N''; 34 | enable = true; 35 | }; 36 | dotDir = ".config/zsh"; 37 | 38 | plugins = [ 39 | { 40 | name = "powerlevel10k"; 41 | src = pkgs.zsh-powerlevel10k; 42 | file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme"; 43 | } 44 | { 45 | name = "fzf-tab"; 46 | src = pkgs.zsh-fzf-tab; 47 | file = "share/fzf-tab/fzf-tab.zsh"; 48 | } 49 | { 50 | name = "zsh-cat-syntax"; 51 | src = pkgs.fetchFromGitHub { 52 | owner = "catppuccin"; 53 | repo = "zsh-syntax-highlighting/"; 54 | rev = "06d519c20798f0ebe275fc3a8101841faaeee8ea"; 55 | sha256 = "sha256-Q7KmwUd9fblprL55W0Sf4g7lRcemnhjh4/v+TacJSfo="; 56 | }; 57 | file = "themes/catppuccin_mocha-zsh-syntax-highlighting.zsh"; 58 | } 59 | { 60 | name = "zsh-nix-shell"; 61 | file = "nix-shell.plugin.zsh"; 62 | src = pkgs.fetchFromGitHub { 63 | owner = "chisui"; 64 | repo = "zsh-nix-shell"; 65 | rev = "v0.5.0"; 66 | sha256 = "0za4aiwwrlawnia4f29msk822rj9bgcygw6a8a6iikiwzjjz0g91"; 67 | }; 68 | } 69 | { 70 | name = "p10k-config"; 71 | src = ./p10k; 72 | file = "p10k.zsh"; 73 | } 74 | ]; 75 | localVariables = let 76 | lessfilter = pkgs.writeShellScript "lessfilter.sh" '' 77 | mime=$(file -bL --mime-type "$1") 78 | category=''${mime%%/*} 79 | kind=''${mime##*/} 80 | if [ -d "$1" ]; then 81 | exa --all --color=always --icons "$1" 82 | elif [ "$category" = image ]; then 83 | chafa -f symbols "$1" 84 | exiftool "$1" 85 | elif [ "$category" = text ]; then 86 | bat --color=always "$1" 87 | elif [ "$mime" = "inode/x-empty" ]; then 88 | figlet empty 89 | figlet file 90 | elif [ "$kind" = "pgp-keys" ]; then 91 | gpg --show-keys --with-fingerprint "$1" 92 | else 93 | lesspipe.sh "$1" | bat --color=always 94 | fi 95 | ''; 96 | in { 97 | POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD = true; 98 | LESSOPEN = "|${lessfilter} %s"; 99 | ZSH_AUTOSUGGEST_STRATEGY = ["history" "completion"]; 100 | }; 101 | initExtra = '' 102 | setopt INTERACTIVE_COMMENTS 103 | 104 | # disable sort when completing `git checkout` 105 | zstyle ':completion:*:git-checkout:*' sort false 106 | 107 | # set list-colors to enable filename colorizing 108 | zstyle ':completion:*' list-colors ''${(s.:.)LS_COLORS} 109 | 110 | # preview directory's content with exa when completing cd 111 | zstyle ':fzf-tab:complete:cd:*' fzf-preview 'exa -1 --color=always --icons $realpath' 112 | 113 | # switch group using `,` and `.` 114 | zstyle ':fzf-tab:*' switch-group ',' '.' 115 | 116 | zstyle ':fzf-tab:complete:*:*' fzf-preview 'less ''${(Q)realpath}' 117 | 118 | zstyle -d ':completion:*' format 119 | 120 | zstyle ':completion:*:descriptions' format '[%d]' 121 | 122 | export LS_COLORS="$(vivid generate catppuccin-mocha)" 123 | bindkey "^[[1;5C" forward-word 124 | bindkey "^[[1;5D" backward-word 125 | eval "$(${pkgs.direnv}/bin/direnv hook zsh)" 126 | source <(${pkgs.carapace}/bin/carapace _carapace) 127 | ''; 128 | shellAliases = { 129 | cavaw = "kitty --override font_size=0 --execute cava &"; 130 | cat = "bat"; 131 | ls = "exa --all --icons"; 132 | tree = "exa --tree --all --icons"; 133 | icat = "kitty +kitten icat"; 134 | open = "xdg-open"; 135 | }; 136 | }; 137 | } 138 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/navic.lua: -------------------------------------------------------------------------------- 1 | local M = {} 2 | local navic = require('nvim-navic') 3 | 4 | --vim.o.winbar = "%{%v:lua.require'nvim-navic'.get_location()%}" 5 | 6 | navic.setup { 7 | icons = { 8 | File = "󰈙 ", 9 | Module = " ", 10 | Namespace = "󰌗 ", 11 | Package = " ", 12 | Class = "󰌗 ", 13 | Method = "󰆧 ", 14 | Property = " ", 15 | Field = " ", 16 | Constructor = " ", 17 | Enum = "󰕘", 18 | Interface = "󰕘", 19 | Function = "󰊕 ", 20 | Variable = "󰆧 ", 21 | Constant = "󰏿 ", 22 | String = " ", 23 | Number = "󰎠 ", 24 | Boolean = "◩ ", 25 | Array = "󰅪 ", 26 | Object = "󰅩 ", 27 | Key = "󰌋 ", 28 | Null = "󰟢 ", 29 | EnumMember = " ", 30 | Struct = "󰌗 ", 31 | Event = " ", 32 | Operator = "󰆕 ", 33 | TypeParameter = "󰊄 ", 34 | }, 35 | highlight = true, 36 | separator = " > ", 37 | depth_limit = 0, 38 | depth_limit_indicator = "..", 39 | } 40 | 41 | function M.isempty(s) 42 | return s == nil or s == "" 43 | end 44 | 45 | function M.get_buf_option(opt) 46 | local status_ok, buf_option = pcall(vim.api.nvim_buf_get_option, 0, opt) 47 | if not status_ok then 48 | return nil 49 | else 50 | return buf_option 51 | end 52 | end 53 | 54 | local excludes = function() 55 | return vim.tbl_contains({ "NvimTree" }, vim.bo.filetype) 56 | end 57 | 58 | M.get_filename = function() 59 | local filename = vim.fn.expand "%:t" 60 | local extension = vim.fn.expand "%:e" 61 | 62 | if not M.isempty(filename) then 63 | local file_icon, file_icon_color = 64 | require("nvim-web-devicons").get_icon_color(filename, extension, { default = true }) 65 | 66 | local hl_group = "FileIconColor" .. extension 67 | 68 | vim.api.nvim_set_hl(0, hl_group, { fg = file_icon_color }) 69 | if M.isempty(file_icon) then 70 | file_icon = "󰈔" 71 | end 72 | 73 | local buf_ft = vim.bo.filetype 74 | 75 | if buf_ft == "dapui_breakpoints" then 76 | file_icon = "" 77 | end 78 | 79 | if buf_ft == "dapui_stacks" then 80 | file_icon = " " 81 | end 82 | 83 | if buf_ft == "dapui_scopes" then 84 | file_icon = "" 85 | end 86 | 87 | if buf_ft == "dapui_watches" then 88 | file_icon = "󰂥" 89 | end 90 | 91 | -- if buf_ft == "dapui_console" then 92 | -- file_icon = lvim.icons.ui.DebugConsole 93 | -- end 94 | 95 | local navic_text = vim.api.nvim_get_hl_by_name("Normal", true) 96 | vim.api.nvim_set_hl(0, "Winbar", { fg = navic_text.foreground }) 97 | 98 | return " " .. "%#" .. hl_group .. "#" .. file_icon .. "%*" .. " " .. "%#Winbar#" .. filename .. "%*" 99 | end 100 | end 101 | 102 | 103 | 104 | local get_gps = function() 105 | local status_gps_ok, gps = pcall(require, "nvim-navic") 106 | if not status_gps_ok then 107 | return "" 108 | end 109 | 110 | local status_ok, gps_location = pcall(gps.get_location, {}) 111 | if not status_ok then 112 | return "" 113 | end 114 | 115 | if not gps.is_available() or gps_location == "error" then 116 | return "" 117 | end 118 | 119 | if not M.isempty(gps_location) then 120 | -- TODO: replace with chevron 121 | return ">" .. " " .. gps_location 122 | else 123 | return "" 124 | end 125 | end 126 | 127 | M.get_winbar = function() 128 | if excludes() then 129 | return 130 | end 131 | local value = M.get_filename() 132 | 133 | local gps_added = false 134 | if not M.isempty(value) then 135 | local gps_value = get_gps() 136 | value = value .. " " .. gps_value 137 | if not M.isempty(gps_value) then 138 | gps_added = true 139 | end 140 | end 141 | 142 | if not M.isempty(value) and M.get_buf_option "mod" then 143 | -- TODO: replace with circle 144 | local mod = "%#LspCodeLens#" .. "" .. "%*" 145 | if gps_added then 146 | value = value .. " " .. mod 147 | else 148 | value = value .. mod 149 | end 150 | end 151 | 152 | local num_tabs = #vim.api.nvim_list_tabpages() 153 | 154 | if num_tabs > 1 and not M.isempty(value) then 155 | local tabpage_number = tostring(vim.api.nvim_tabpage_get_number(0)) 156 | value = value .. "%=" .. tabpage_number .. "/" .. tostring(num_tabs) 157 | end 158 | 159 | local status_ok, _ = pcall(vim.api.nvim_set_option_value, "winbar", value, { scope = "local" }) 160 | if not status_ok then 161 | return 162 | end 163 | end 164 | 165 | vim.api.nvim_create_augroup("_winbar", {}) 166 | if vim.fn.has "nvim-0.8" == 1 then 167 | vim.api.nvim_create_autocmd( 168 | { "CursorMoved", "CursorHold", "BufWinEnter", "BufFilePost", "InsertEnter", "BufWritePost", "TabClosed" }, 169 | { 170 | group = "_winbar", 171 | callback = function() 172 | local status_ok, _ = pcall(vim.api.nvim_buf_get_var, 0, "lsp_floating_window") 173 | if not status_ok then 174 | -- TODO: 175 | M.get_winbar() 176 | end 177 | end, 178 | } 179 | ) 180 | end 181 | 182 | --return M 183 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plug-conf/cmp.lua: -------------------------------------------------------------------------------- 1 | -- Set up nvim-cmp. 2 | local cmp = require 'cmp' 3 | local luasnip = require 'luasnip' 4 | local lspkind = require('lspkind') 5 | 6 | require 'luasnip/loaders/from_vscode'.lazy_load() 7 | 8 | local has_words_before = function() 9 | unpack = unpack or table.unpack 10 | local line, col = unpack(vim.api.nvim_win_get_cursor(0)) 11 | return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil 12 | end 13 | 14 | cmp.setup({ 15 | enabled = function() 16 | -- disable completion in comments 17 | local context = require 'cmp.config.context' 18 | -- keep command mode completion enabled when cursor is in a comment 19 | if vim.api.nvim_get_mode().mode == 'c' then 20 | return true 21 | else 22 | return not context.in_treesitter_capture("comment") 23 | and not context.in_syntax_group("Comment") 24 | end 25 | end, 26 | snippet = { 27 | -- REQUIRED - you must specify a snippet engine 28 | expand = function(args) 29 | require('luasnip').lsp_expand(args.body) -- For `luasnip` users. 30 | end, 31 | }, 32 | window = { 33 | completion = cmp.config.window.bordered(), 34 | documentation = cmp.config.window.bordered(), 35 | }, 36 | mapping = cmp.mapping.preset.insert({ 37 | [''] = cmp.mapping.scroll_docs(-4), 38 | [''] = cmp.mapping.scroll_docs(4), 39 | [""] = cmp.mapping(function(fallback) 40 | if cmp.visible() then 41 | cmp.select_next_item() 42 | elseif luasnip.expand_or_locally_jumpable() then 43 | luasnip.expand_or_jump() 44 | elseif has_words_before() then 45 | cmp.complete() 46 | else 47 | fallback() 48 | end 49 | end, { "i", "s" }), 50 | [""] = cmp.mapping(function(fallback) 51 | if cmp.visible() then 52 | cmp.select_prev_item() 53 | elseif luasnip.jumpable(-1) then 54 | luasnip.jump(-1) 55 | else 56 | fallback() 57 | end 58 | end, { "i", "s" }), 59 | [''] = cmp.mapping.complete(), 60 | [''] = cmp.mapping.abort(), 61 | [''] = cmp.mapping.confirm({ select = false }), 62 | -- cmp.mapping({ 63 | -- i = function(fallback) 64 | -- if cmp.visible() and cmp.get_active_entry() then 65 | -- cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true }) 66 | -- else 67 | -- fallback() 68 | -- end 69 | -- end, 70 | -- s = cmp.mapping.confirm({ select = false }), 71 | -- c = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = false }), 72 | -- }), 73 | }), 74 | formatting = { 75 | -- icons in completions 76 | format = require 'lspkind'.cmp_format { 77 | mode = 'symbol_text', 78 | maxwidth = 50 79 | } 80 | }, 81 | sources = cmp.config.sources({ 82 | { 83 | name = 'nvim_lsp', 84 | filter = function(entry, ctx) 85 | local kind = require("cmp.types.lsp").CompletionItemKind[entry:get_kind()] 86 | if kind == "Snippet" and ctx.prev_context.filetype == "java" then 87 | return true 88 | end 89 | 90 | if kind == "Text" then 91 | return true 92 | end 93 | end, 94 | }, 95 | { name = 'luasnip' }, 96 | { 97 | name = 'buffer', 98 | filter = function(entry, ctx) 99 | if not contains({ "markdown", "toml", "json", "yaml" }, ctx.prev_context.filetype) then 100 | return true 101 | end 102 | end, 103 | }, 104 | { name = 'path' }, 105 | --{ name = 'cmdline' }, 106 | { name = 'nvim_lua' }, 107 | { name = 'treesitter' }, 108 | { name = "ctags" }, 109 | --{ name = "copilot" }, 110 | { name = "emoji" }, 111 | { name = "greek" }, 112 | { name = 'nvim_lsp_signature_help' }, 113 | }) 114 | }) 115 | 116 | -- -- Set configuration for specific filetype. 117 | -- cmp.setup.filetype('gitcommit', { 118 | -- sources = cmp.config.sources({ 119 | -- { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it. 120 | -- }, { 121 | -- { name = 'buffer' }, 122 | -- }) 123 | -- }) 124 | 125 | -- Use buffer source for `/` and `?` (if you enabled `native_menu`, this won't work anymore). 126 | cmp.setup.cmdline({ '/', '?' }, { 127 | mapping = cmp.mapping.preset.cmdline(), 128 | sources = { 129 | { name = 'buffer' }, 130 | { name = "nvim_lsp_document_symbol" } 131 | } 132 | }) 133 | 134 | -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). 135 | cmp.setup.cmdline(':', { 136 | mapping = cmp.mapping.preset.cmdline(), 137 | sources = { 138 | { name = 'path' }, 139 | { name = 'cmdline' }, 140 | --{ name = "omni" } 141 | } 142 | }) 143 | 144 | -- If you want insert `(` after select function or method item 145 | local cmp_autopairs = require('nvim-autopairs.completion.cmp') 146 | cmp.event:on( 147 | 'confirm_done', 148 | cmp_autopairs.on_confirm_done() 149 | ) 150 | 151 | vim.api.nvim_create_autocmd("BufRead", { 152 | group = vim.api.nvim_create_augroup("CmpSourceCargo", { clear = true }), 153 | pattern = "Cargo.toml", 154 | callback = function() 155 | cmp.setup.buffer({ sources = { { name = "crates" } } }) 156 | end, 157 | }) 158 | -------------------------------------------------------------------------------- /home/gui/hyprland.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | nix-colors, 4 | pkgs, 5 | ... 6 | } @ args: let 7 | xargb = c: "88${c}"; 8 | x = config.colorScheme.colors; 9 | shader_path = pkgs.writeTextFile { 10 | name = "filter_colors.frag"; 11 | text = import ./cat-mocha.frag.nix args; 12 | }; 13 | toggle_script = pkgs.writeShellApplication { 14 | name = "shader_toggler"; 15 | runtimeInputs = with pkgs; [jaq]; 16 | text = '' 17 | shader=$(hyprctl getoption decoration:screen_shader -j | jaq ".str") 18 | if [[ $shader == "\"[[EMPTY]]\"" ]]; then 19 | hyprctl keyword decoration:screen_shader "${shader_path}" 20 | else 21 | hyprctl keyword decoration:screen_shader "[[EMPTY]]" 22 | fi 23 | ''; 24 | }; 25 | sosd = arg: val: "${pkgs.swayosd}/bin/swayosd --${arg} ${val}"; 26 | in '' 27 | # Variables 28 | $mod = SUPER 29 | 30 | # Display stuff 31 | monitor = eDP-1, highres, auto, 2 32 | 33 | general { 34 | gaps_in = 5 35 | gaps_out = 5 36 | border_size = 2 37 | col.active_border = 0x${xargb x.base06} # white 38 | col.inactive_border = 0x${xargb x.base02} # black 39 | } 40 | 41 | decoration { 42 | rounding = 16 43 | blur = false 44 | drop_shadow = 1 45 | shadow_ignore_window = 1 46 | shadow_offset = 0 5 47 | shadow_range = 50 48 | shadow_render_power = 3 49 | col.shadow = rgba(00000099) 50 | #screen_shader = ${shader_path} 51 | } 52 | 53 | animations { 54 | enabled = 1 55 | animation = border, 1, 2, default 56 | animation = fade, 1, 4, default 57 | animation = windows, 1, 3, default, popin 80% 58 | animation = workspaces, 1, 2, default, slide 59 | } 60 | 61 | # Window rules 62 | windowrulev2 = float, title:^(Picture-in-Picture)$ 63 | windowrulev2 = pin, title:^(Picture-in-Picture)$ 64 | 65 | windowrulev2 = workspace special silent, title:^(Firefox — Sharing Indicator)$ 66 | windowrulev2 = workspace special silent, title:^(.*is sharing (your screen|a window)\.)$ 67 | 68 | # fix xwayland apps 69 | windowrulev2 = rounding 0, xwayland:1, floating:1 70 | # Mouse binds 71 | bindm = $mod, mouse:272, movewindow 72 | bindm = $mod, mouse:273, resizewindow 73 | 74 | # Key bindings 75 | bind = $mod, Q , exec, kitty 76 | bind = $mod, C, killactive 77 | bind = $mod, R, exec, zsh -c 'rofi -show drun' 78 | bind = $mod, M, exit 79 | bind = $mod, V, togglefloating 80 | bind = $mod SHIFT, equal, exec, ${toggle_script}/bin/shader_toggler 81 | 82 | 83 | # control windows 84 | general:layout = hy3 85 | bind = $mod, W,submap,windowctl 86 | submap = windowctl 87 | 88 | bind=,v,hy3:makegroup,v 89 | bind=,v,submap,reset 90 | 91 | bind=,right,hy3:movefocus,right 92 | bind=,right,submap,reset 93 | 94 | bind=,left,hy3:movefocus,left 95 | bind=,left,submap,reset 96 | 97 | bind=,up,hy3:movefocus,up 98 | bind=,up,submap,reset 99 | 100 | bind=,down,hy3:movefocus,down 101 | bind=,down,submap,reset 102 | 103 | bind=,s,hy3:makegroup,h 104 | bind=,s,submap,reset 105 | 106 | submap = reset 107 | 108 | # media controls 109 | bindl = , XF86AudioPlay, exec, playerctl -a play-pause 110 | bindl = , XF86AudioPrev, exec, playerctl previous 111 | bindl = , XF86AudioNext, exec, playerctl next 112 | 113 | # volume 114 | bindle = , XF86AudioRaiseVolume, exec,${sosd "output-volume" "+6"} 115 | bindle = , XF86AudioLowerVolume,exec,${sosd "output-volume" "-6"} 116 | bindl = , XF86AudioMute, exec,${sosd "output-volume" "mute-toggle"} 117 | bindl = , XF86AudioMicMute, exec,${sosd "input-volume" "mute-toggle"} 118 | 119 | # backlight 120 | bindle = , XF86MonBrightnessUp, exec,${sosd "brightness" "+10"} 121 | bindle = , XF86MonBrightnessDown, exec,${sosd "brightness" "-10"} 122 | 123 | # cAPS lOCK 124 | bindr = , Caps_Lock, exec,${sosd "caps-lock" ""} 125 | 126 | # screenshot 127 | $screenshotarea = hyprctl keyword animation "fadeOut,0,0,default"; grimblast --notify copysave area; hyprctl keyword animation "fadeOut,1,4,default" 128 | bind = , Print, exec, $screenshotarea 129 | #bind = $mod SHIFT, R, exec, $screenshotarea 130 | #bind = CTRL, Print, exec, grimblast --notify --cursor copysave output 131 | #bind = $mod SHIFT CTRL, R, exec, grimblast --notify --cursor copysave output 132 | #bind = ALT, Print, exec, grimblast --notify --cursor copysave screen 133 | #bind = $mod SHIFT ALT, R, exec, grimblast --notify --cursor copysave screen 134 | 135 | # workspaces 136 | ${builtins.concatStringsSep "\n" (builtins.genList ( 137 | x: let 138 | ws = let 139 | c = (x + 1) / 10; 140 | in 141 | builtins.toString (x + 1 - (c * 10)); 142 | in '' 143 | bind = $mod, ${ws}, workspace, ${toString (x + 1)} 144 | bind = ALT, ${ws}, movetoworkspace, ${toString (x + 1)} 145 | '' 146 | ) 147 | 10)} 148 | '' 149 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "Yavko's Dotfiles"; 3 | inputs = { 4 | nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 5 | chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; 6 | nix-super.url = "github:privatevoid-net/nix-super"; 7 | flake-parts = { 8 | url = "github:hercules-ci/flake-parts"; 9 | inputs.nixpkgs-lib.follows = "nixpkgs"; 10 | }; 11 | hm = { 12 | url = "github:nix-community/home-manager"; 13 | inputs.nixpkgs.follows = "nixpkgs"; 14 | }; 15 | impurity.url = "github:outfoxxed/impurity.nix"; 16 | wrapper-manager = { 17 | url = "github:viperML/wrapper-manager"; 18 | inputs.nixpkgs.follows = "nixpkgs"; 19 | }; 20 | agenix.url = "github:yaxitech/ragenix"; 21 | hyprland.url = "github:hyprwm/Hyprland/"; #2cbb10d850f0860fcb1c940ebc047c7c4deb9e91"; 22 | helix.url = "github:helix-editor/helix"; 23 | neovim-nightly-overlay.url = "github:nix-community/neovim-nightly-overlay"; 24 | 25 | neovim-flake = { 26 | url = "github:notashelf/neovim-flake"; 27 | inputs.nixpkgs.follows = "nixpkgs"; 28 | }; 29 | 30 | prismlauncher.url = "github:PrismLauncher/PrismLauncher"; 31 | nix-colors.url = "github:Misterio77/nix-colors"; 32 | #fu.url = "github:numtide/flake-utils"; 33 | nix-std.url = "github:chessai/nix-std"; 34 | nur.url = "github:nix-community/NUR"; 35 | alejandra.url = "github:kamadorueda/alejandra/3.0.0"; 36 | alejandra.inputs.nixpkgs.follows = "nixpkgs"; 37 | eww = { 38 | url = "github:elkowar/eww"; 39 | inputs.nixpkgs.follows = "nixpkgs"; 40 | inputs.rust-overlay.follows = "rust-overlay"; 41 | }; 42 | aagl.url = "github:ezKEa/aagl-gtk-on-nix"; 43 | rust-overlay = { 44 | url = "github:oxalica/rust-overlay"; 45 | inputs.nixpkgs.follows = "nixpkgs"; 46 | # inputs.flake-utils.follows = "fu"; 47 | }; 48 | hyprland-contrib = { 49 | url = "github:hyprwm/contrib"; 50 | inputs.nixpkgs.follows = "nixpkgs"; 51 | }; 52 | hyprpaper = { 53 | url = "github:hyprwm/hyprpaper"; 54 | inputs.nixpkgs.follows = "nixpkgs"; 55 | }; 56 | hyprpicker = { 57 | url = "github:hyprwm/hyprpicker"; 58 | inputs.nixpkgs.follows = "nixpkgs"; 59 | }; 60 | nil = { 61 | url = "github:oxalica/nil"; 62 | inputs.nixpkgs.follows = "nixpkgs"; 63 | #inputs.flake-utils.follows = "fu"; 64 | inputs.rust-overlay.follows = "rust-overlay"; 65 | }; 66 | nixd = { 67 | url = "github:nix-community/nixd"; 68 | }; 69 | devshell.url = "github:numtide/devshell"; 70 | ironbar = { 71 | url = "github:JakeStanger/ironbar/"; 72 | #inputs.nixpkgs.follows = "nixpkgs"; 73 | #inputs.rust-overlay.follows = "rust-overlay"; 74 | }; 75 | anyrun = { 76 | url = "github:Kirottu/anyrun"; 77 | inputs.nixpkgs.follows = "nixpkgs"; 78 | }; 79 | hpr_scratcher = { 80 | #url = "github:yavko/hpr_scratcher"; 81 | url = "/home/yavor/Projects/External/hpr-scratcher/nix"; 82 | inputs.nixpkgs.follows = "nixpkgs"; 83 | }; 84 | hy3 = { 85 | url = "github:outfoxxed/hy3"; 86 | inputs.hyprland.follows = "hyprland"; 87 | }; 88 | nix-index-database.url = "github:Mic92/nix-index-database"; 89 | nix-index-database.inputs.nixpkgs.follows = "nixpkgs"; 90 | nix-alien.url = "github:thiagokokada/nix-alien"; 91 | envfs.url = "github:Mic92/envfs"; 92 | envfs.inputs.nixpkgs.follows = "nixpkgs"; 93 | lanzaboote = { 94 | url = "github:nix-community/lanzaboote"; 95 | 96 | # Optional but recommended to limit the size of your system closure. 97 | inputs.nixpkgs.follows = "nixpkgs"; 98 | }; 99 | wallpkgs.url = "github:notashelf/wallpkgs"; 100 | 101 | # non OS stuff 102 | papirus-folders-yavko = { 103 | url = "github:yavko/papirus-folders/add-makefile"; 104 | flake = false; 105 | }; 106 | wl-screenrec = { 107 | url = "github:russelltg/wl-screenrec"; 108 | flake = false; 109 | }; 110 | 111 | # neovim plugins 112 | vim-dirtytalk = { 113 | url = "github:psliwka/vim-dirtytalk"; 114 | flake = false; 115 | }; 116 | nvim-treesitter-endwise = { 117 | url = "github:RRethy/nvim-treesitter-endwise"; 118 | flake = false; 119 | }; 120 | nvim-cleanfold = { 121 | url = "github:lewis6991/cleanfold.nvim"; 122 | flake = false; 123 | }; 124 | }; 125 | 126 | outputs = inputs: 127 | inputs.flake-parts.lib.mkFlake {inherit inputs;} { 128 | systems = ["x86_64-linux"]; 129 | imports = [ 130 | {config._module.args._inputs = inputs // {inherit (inputs) self;};} 131 | ./pkgs 132 | ]; 133 | flake = { 134 | lib = import ./lib.nix inputs; 135 | nixosConfigurations = import ./hosts inputs; 136 | }; 137 | perSystem = { 138 | config, 139 | inputs', 140 | pkgs, 141 | system, 142 | ... 143 | }: { 144 | #legacyPackages.${system} = inputs.nixpkgs.legacyPackages.${system}; 145 | imports = [{_module.args.pkgs = inputs.nixpkgs.legacyPackages.${system} // (inputs.self.packages.${system});}]; 146 | devShells.default = inputs'.devshell.legacyPackages.mkShell { 147 | packages = [ 148 | pkgs.alejandra 149 | pkgs.git 150 | ]; 151 | name = "dots"; 152 | }; 153 | formatter = pkgs.alejandra; 154 | }; 155 | }; 156 | } 157 | -------------------------------------------------------------------------------- /home/develop/editors/nvim/lua/plugins.lua: -------------------------------------------------------------------------------- 1 | vim.cmd("packadd packer.nvim") 2 | 3 | return require("packer").startup({ 4 | function(use) 5 | use("wbthomason/packer.nvim") 6 | 7 | use("lewis6991/impatient.nvim") 8 | 9 | -- Mostly Dependencies 10 | use({ 11 | "rcarriga/nvim-notify", 12 | "kyazdani42/nvim-web-devicons", 13 | "nvim-lua/plenary.nvim", 14 | "RishabhRD/popfix", 15 | "stevearc/dressing.nvim", 16 | }) 17 | 18 | --use("Mofiqul/dracula.nvim") 19 | --use 'folke/tokyonight.nvim' 20 | use { "catppuccin/nvim", as = "catppuccin" } 21 | -- git stuff 22 | 23 | use({ 24 | "lewis6991/gitsigns.nvim", 25 | { "TimUntersberger/neogit", requires = "nvim-lua/plenary.nvim" }, 26 | }) 27 | 28 | use({ 29 | "nvim-telescope/telescope.nvim", 30 | requires = { { "nvim-lua/plenary.nvim" } }, 31 | }) 32 | 33 | -- Lsp/autocomplete stuff 34 | 35 | use({ 36 | "neovim/nvim-lspconfig", 37 | "tamago324/nlsp-settings.nvim", 38 | "williamboman/mason.nvim", 39 | "williamboman/mason-lspconfig.nvim", 40 | "jose-elias-alvarez/null-ls.nvim", 41 | "nanotee/nvim-lsp-basics", 42 | "j-hui/fidget.nvim", 43 | "https://git.sr.ht/~whynothugo/lsp_lines.nvim", 44 | "simrat39/symbols-outline.nvim", 45 | { "folke/trouble.nvim", requires = "kyazdani42/nvim-web-devicons" }, 46 | "lukas-reineke/lsp-format.nvim", 47 | { "m-demare/hlargs.nvim", requires = { "nvim-treesitter/nvim-treesitter" } }, 48 | "b0o/schemastore.nvim", 49 | 'simrat39/rust-tools.nvim', 50 | 'onsails/lspkind.nvim', 51 | { 52 | "zbirenbaum/copilot.lua", 53 | event = "VimEnter", 54 | config = function() 55 | vim.defer_fn(function() 56 | require("copilot").setup() 57 | end, 100) 58 | end, 59 | }, 60 | { 61 | "zbirenbaum/copilot-cmp", 62 | after = { "copilot.lua" }, 63 | config = function() 64 | require("copilot_cmp").setup() 65 | end 66 | } 67 | }) 68 | 69 | use { 70 | "folke/which-key.nvim", 71 | config = function() 72 | require("which-key").setup { 73 | -- your configuration comes here 74 | -- or leave it empty to use the default settings 75 | -- refer to the configuration section below 76 | } 77 | end 78 | } 79 | 80 | use({ "SmiteshP/nvim-navic", requires = "neovim/nvim-lspconfig" }) 81 | 82 | use({ 83 | "akinsho/bufferline.nvim", 84 | tag = "v2.*", 85 | requires = "kyazdani42/nvim-web-devicons", 86 | }) 87 | 88 | use({ 89 | "kyazdani42/nvim-tree.lua", 90 | requires = { 91 | "kyazdani42/nvim-web-devicons", -- optional, for file icon 92 | }, 93 | }) 94 | 95 | -- use({ 96 | -- { "ms-jpq/coq_nvim", branch = "coq", run = ":COQdeps" }, 97 | -- { "ms-jpq/coq.artifacts", branch = "artifacts" }, 98 | -- { "ms-jpq/coq.thirdparty", branch = "3p" }, 99 | -- }) 100 | 101 | use({ "L3MON4D3/LuaSnip", requires = 'rafamadriz/friendly-snippets' }) 102 | 103 | use({ "hrsh7th/nvim-cmp", requires = { 104 | { "hrsh7th/cmp-cmdline" }, 105 | { "hrsh7th/cmp-path" }, 106 | { "hrsh7th/cmp-buffer" }, 107 | { "hrsh7th/cmp-nvim-lsp" }, 108 | { "saadparwaiz1/cmp_luasnip" }, 109 | { "delphinus/cmp-ctags" }, 110 | { "hrsh7th/cmp-nvim-lua" }, 111 | { "hrsh7th/cmp-omni" }, 112 | { "ray-x/cmp-treesitter" }, 113 | { "ray-x/lsp_signature.nvim" } 114 | } }) 115 | 116 | use("wfxr/minimap.vim") 117 | 118 | -- TreeSitter stuff 119 | use({ 120 | { "nvim-treesitter/nvim-treesitter", run = ":TSUpdate" }, 121 | 'nvim-treesitter/playground', 122 | "lewis6991/nvim-treesitter-context", 123 | "p00f/nvim-ts-rainbow", 124 | "lewis6991/spellsitter.nvim", 125 | "numToStr/Comment.nvim", 126 | "windwp/nvim-ts-autotag", 127 | "RRethy/nvim-treesitter-endwise", 128 | "windwp/nvim-autopairs", 129 | }) 130 | 131 | use("goolord/alpha-nvim") 132 | 133 | --use 'karb94/neoscroll.nvim' 134 | use({ 135 | "declancm/cinnamon.nvim", 136 | config = function() 137 | require("cinnamon").setup({ 138 | extra_keymaps = true, 139 | scroll_limit = 100, 140 | }) 141 | end, 142 | }) 143 | 144 | use({ 145 | "nvim-lualine/lualine.nvim", 146 | requires = { "kyazdani42/nvim-web-devicons", opt = true }, 147 | }) 148 | 149 | use({ 150 | "lukas-reineke/indent-blankline.nvim", 151 | config = function() 152 | require("indent_blankline").setup({ 153 | show_current_context = true, 154 | show_current_context_start = true, 155 | show_end_of_line = true, 156 | space_char_blankline = " ", 157 | }) 158 | end, 159 | }) 160 | use({ 161 | "NvChad/nvim-colorizer.lua", 162 | config = function() 163 | require("colorizer").setup() 164 | end, 165 | }) 166 | 167 | -- use("mrjones2014/legendary.nvim") 168 | 169 | use("akinsho/toggleterm.nvim") 170 | 171 | use({ "psliwka/vim-dirtytalk", run = ":DirtytalkUpdate" }) 172 | 173 | use({ 174 | "lewis6991/cleanfold.nvim", 175 | config = function() 176 | require("cleanfold").setup() 177 | end, 178 | }) 179 | 180 | use({ 181 | "dstein64/nvim-scrollview", 182 | config = function() 183 | require("scrollview").setup({ 184 | excluded_filetypes = { "NvimTree", "alpha", "Trouble", "Outline" }, 185 | }) 186 | end, 187 | }) 188 | 189 | use 'mfussenegger/nvim-dap' 190 | use { "rcarriga/nvim-dap-ui", requires = { "mfussenegger/nvim-dap" } } 191 | 192 | use("xiyaowong/nvim-cursorword") 193 | 194 | use("gpanders/editorconfig.nvim") 195 | 196 | use("elkowar/yuck.vim") 197 | 198 | use("~/ligatures.nvim/") 199 | --use 'eraserhd/parinfer-rust' 200 | end, 201 | config = { 202 | display = { 203 | open_fn = function() 204 | return require("packer.util").float({ border = "rounded" }) 205 | end, 206 | }, 207 | }, 208 | }) 209 | -------------------------------------------------------------------------------- /home/develop/neovim-flake.nix: -------------------------------------------------------------------------------- 1 | {pkgs, inputs, ...}: let 2 | sugar = { 3 | enable = true; 4 | treesitter.enable = true; 5 | lsp.enable = true; 6 | dap.enable = true; 7 | format.enable = true; 8 | }; 9 | in { 10 | programs.neovim-flake = { 11 | enable = true; 12 | settings = { 13 | vim = { 14 | autoIndent = true; 15 | autocomplete = { 16 | enable = true; 17 | }; 18 | autopairs = { 19 | enable = true; 20 | }; 21 | bell = "on"; 22 | binds.whichKey.enable = true; 23 | comments.comment-nvim = { 24 | enable = true; 25 | }; 26 | dashboard.alpha.enable = true; 27 | debugger.nvim-dap = { 28 | enable = true; 29 | ui.enable = true; 30 | }; 31 | disableArrows = true; 32 | enableLuaLoader = true; 33 | filetree.nvimTreeLua = { 34 | enable = true; 35 | git.enable = true; 36 | hijackCursor = true; 37 | hijackUnnamedBufferWhenOpening = true; 38 | renderer = { 39 | groupEmptyFolders = true; 40 | highlightOpenedFiles = "name"; 41 | icons.show.git = true; 42 | indentMarkers = true; 43 | }; 44 | }; 45 | git = { 46 | enable = true; 47 | gitsigns = { 48 | enable = true; 49 | codeActions = true; 50 | }; 51 | }; 52 | languages = { 53 | enableDAP = true; 54 | enableExtraDiagnostics = true; 55 | enableFormat = true; 56 | enableLSP = true; 57 | enableTreesitter = true; 58 | clang = { 59 | inherit (sugar) enable dap treesitter; 60 | lsp = { 61 | enable = true; 62 | server = "clangd"; 63 | }; 64 | }; 65 | html = { 66 | inherit (sugar) enable treesitter; 67 | }; 68 | markdown = { 69 | inherit (sugar) enable treesitter; 70 | glow.enable = true; 71 | }; 72 | nix = { 73 | inherit (sugar) enable treesitter lsp format; 74 | }; 75 | python = { 76 | inherit (sugar) enable treesitter lsp format dap; 77 | }; 78 | rust = { 79 | inherit (sugar) enable treesitter lsp dap; 80 | crates.enable = true; 81 | }; 82 | ts = { 83 | inherit (sugar) enable treesitter lsp; 84 | extraDiagnostics.enable = true; 85 | format = { 86 | enable = true; 87 | #type = "prettierd"; 88 | }; 89 | }; 90 | }; 91 | lsp = { 92 | enable = true; 93 | formatOnSave = true; 94 | lightbulb.enable = false; 95 | lspSignature.enable = true; 96 | lspconfig.enable = true; 97 | lspkind.enable = true; 98 | lspsaga = { 99 | # enable = true; 100 | }; 101 | null-ls.enable = true; 102 | trouble.enable = true; 103 | }; 104 | mapLeaderSpace = false; 105 | minimap.codewindow.enable = true; 106 | notes = { 107 | orgmode.enable = true; 108 | todo-comments.enable = true; 109 | }; 110 | notify.nvim-notify.enable = true; 111 | snippets.vsnip.enable = true; 112 | spellChecking.enable = true; 113 | statusline.lualine.enable = true; 114 | tabline.nvimBufferline.enable = true; 115 | telescope.enable = true; 116 | terminal.toggleterm = { 117 | enable = true; 118 | enable_winbar = true; 119 | direction = "float"; 120 | lazygit = { 121 | enable = true; 122 | direction = "float"; 123 | }; 124 | }; 125 | theme = { 126 | enable = true; 127 | name = "catppuccin"; 128 | style = "mocha"; 129 | }; 130 | treesitter = { 131 | enable = true; 132 | autotagHtml = true; 133 | context = { 134 | enable = true; 135 | maxLines = 5; 136 | }; 137 | fold = true; 138 | }; 139 | ui = { 140 | borders = { 141 | enable = true; 142 | globalStyle = "rounded"; 143 | }; 144 | breadcrumbs = { 145 | enable = true; 146 | navbuddy.enable = true; 147 | }; 148 | colorizer.enable = true; 149 | modes-nvim = { 150 | enable = true; 151 | }; 152 | noice.enable = true; 153 | }; 154 | useSystemClipboard = true; 155 | utility = { 156 | ccc.enable = true; 157 | icon-picker.enable = true; 158 | motion = { 159 | leap.enable = true; 160 | }; 161 | }; 162 | viAlias = true; 163 | vimAlias = true; 164 | visuals = { 165 | enable = true; 166 | cursorWordline.enable = true; 167 | fidget-nvim.enable = true; 168 | indentBlankline = { 169 | enable = true; 170 | useTreesitter = true; 171 | }; 172 | nvimWebDevicons.enable = true; 173 | scrollBar.enable = true; 174 | smoothScroll.enable = true; 175 | }; 176 | wordWrap = true; 177 | luaConfigRC.setLeader = inputs.neovim-flake.lib.nvim.dag.entryAnywhere '' 178 | vim.g.mapleader = ";" 179 | ''; 180 | extraPlugins = with pkgs.vimPlugins; { 181 | lspLines = { 182 | package = lsp_lines-nvim; 183 | setup = '' 184 | require("lsp_lines").setup() 185 | vim.diagnostic.config({ 186 | virtual_text = false, 187 | }) 188 | ''; 189 | }; 190 | }; 191 | }; 192 | }; 193 | }; 194 | } 195 | -------------------------------------------------------------------------------- /hosts/envious/default.nix: -------------------------------------------------------------------------------- 1 | # Edit this configuration file to define what should be installed on 2 | # your system. Help is available in the configuration.nix(5) man page 3 | # and in the NixOS manual (accessible by running ‘nixos-help’). 4 | { 5 | config, 6 | pkgs, 7 | inputs, 8 | lib, 9 | ... 10 | }: { 11 | documentation = { 12 | enable = true; 13 | doc.enable = false; 14 | man.enable = true; 15 | dev.enable = false; 16 | }; 17 | imports = [ 18 | # Include the results of the hardware scan. 19 | ./hardware-configuration.nix 20 | ]; 21 | zramSwap = { 22 | enable = true; 23 | algorithm = "zstd"; 24 | }; 25 | systemd.oomd = { 26 | enableRootSlice = true; 27 | enableUserServices = true; 28 | }; 29 | 30 | # Set your time zone. 31 | time.timeZone = "Europe/Sofia"; # "America/Los_Angeles"; 32 | 33 | # Select internationalisation properties. 34 | i18n.defaultLocale = "en_US.utf8"; 35 | 36 | # Configure keymap in X11 37 | 38 | hardware.opengl = { 39 | enable = true; 40 | extraPackages = with pkgs; [ 41 | intel-media-driver # LIBVA_DRIVER_NAME=iHD 42 | vaapiIntel # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium) 43 | vaapiVdpau 44 | libvdpau-va-gl 45 | ]; 46 | extraPackages32 = with pkgs.pkgsi686Linux; [vaapiIntel vaapiVdpau intel-media-driver libvdpau-va-gl]; 47 | driSupport32Bit = true; 48 | }; 49 | environment.variables = { 50 | VDPAU_DRIVER = lib.mkIf config.hardware.opengl.enable (lib.mkDefault "va_gl"); 51 | LIBVA_DRIVER_NAME = "iHD"; 52 | }; 53 | boot.initrd.kernelModules = ["i915"]; 54 | console.font = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-v32n.psf.gz"; 55 | console.earlySetup = lib.mkDefault true; 56 | 57 | programs.zsh.enable = true; 58 | users.defaultUserShell = pkgs.zsh; 59 | environment.pathsToLink = ["/share/zsh" "/share/bash-completion" "/share/nix-direnv"]; 60 | 61 | age.identityPaths = ["/home/yavor/.ssh/id_ed25519"]; 62 | age.secrets.pass.file = ../../secrets/pass.age; 63 | age.secrets.downonspot = { 64 | file = ../../secrets/downonspot.age; 65 | path = "/home/yavor/music-downloads/settings.json"; 66 | mode = "774"; 67 | }; 68 | # Define a user account. Don't forget to set a password with ‘passwd’. 69 | users.users.yavor = { 70 | isNormalUser = true; 71 | description = "Yavor Kolev"; 72 | extraGroups = ["networkmanager" "wheel" "video" "input" "audio" "scanner" "lp"]; 73 | passwordFile = config.age.secrets.pass.path; 74 | }; 75 | 76 | # Allow unfree packages 77 | nixpkgs.config.allowUnfree = true; 78 | 79 | # List packages installed in system profile. To search, run: 80 | # $ nix search wget 81 | environment.systemPackages = let 82 | steam = pkgs.steam.override { 83 | extraPkgs = pkgs: 84 | with pkgs; [ 85 | keyutils 86 | libkrb5 87 | libpng 88 | libpulseaudio 89 | libvorbis 90 | stdenv.cc.cc.lib 91 | xorg.libXcursor 92 | xorg.libXi 93 | xorg.libXinerama 94 | xorg.libXScrnSaver 95 | ]; 96 | extraProfile = "export GDK_SCALE=2"; 97 | }; 98 | in 99 | with pkgs; [ 100 | git 101 | glib 102 | slurp 103 | steam 104 | via 105 | vial 106 | sbctl 107 | ]; 108 | environment.etc = with inputs; { 109 | "nix/flake-channels/system".source = self; 110 | "nix/flake-channels/nixpkgs".source = nixpkgs; 111 | "nix/flake-channels/home-manager".source = hm; 112 | }; 113 | 114 | programs._1password.enable = true; 115 | programs._1password-gui.enable = true; 116 | programs._1password-gui.polkitPolicyOwners = ["yavor"]; 117 | programs.steam = { 118 | enable = true; 119 | remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play 120 | dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server 121 | }; 122 | programs.anime-game-launcher.enable = true; 123 | programs.honkers-railway-launcher.enable = true; 124 | programs.honkers-launcher.enable = true; 125 | programs.anime-borb-launcher.enable = true; 126 | programs.gamemode.enable = true; 127 | 128 | # use Wayland where possible 129 | environment.variables.NIXOS_OZONE_WL = "1"; 130 | 131 | location.provider = "geoclue2"; 132 | 133 | programs.hyprland.enable = true; 134 | programs.hyprland.xwayland.hidpi = true; 135 | 136 | programs.sway = { 137 | enable = true; 138 | #package = inputs.self.packages.${pkgs.hostPlatform.system}.sway-hidpi; 139 | }; 140 | 141 | programs.dconf.enable = true; 142 | programs.light.enable = true; 143 | hardware = { 144 | sane.enable = true; 145 | sane.extraBackends = with pkgs; [epkowa]; 146 | }; 147 | services = { 148 | # needed for gnome3 pinentry 149 | dbus.packages = with pkgs; [dconf gcr udisks2]; 150 | gnome.gnome-keyring.enable = true; 151 | # provide location 152 | geoclue2 = { 153 | enable = true; 154 | appConfig.gammastep = { 155 | isAllowed = true; 156 | isSystem = false; 157 | }; 158 | }; 159 | 160 | pipewire = { 161 | enable = true; 162 | alsa.enable = true; 163 | alsa.support32Bit = true; 164 | jack.enable = true; 165 | pulse.enable = true; 166 | }; 167 | flatpak.enable = true; 168 | ratbagd.enable = true; 169 | hardware.openrgb = { 170 | #enable = true; 171 | package = pkgs.openrgb-with-all-plugins; 172 | #motherboard = "intel"; 173 | }; 174 | tlp = { 175 | enable = true; 176 | settings = { 177 | PCIE_ASPM_ON_BAT = "powersupersave"; 178 | DEVICES_TO_DISABLE_ON_STARTUP = "bluetooth"; 179 | NMI_WATCHDOG = 0; 180 | }; 181 | }; 182 | thermald.enable = true; 183 | 184 | upower.enable = true; 185 | gvfs.enable = true; 186 | udev = { 187 | packages = with pkgs; [gnome.gnome-settings-daemon vial via qmk-udev-rules numworks-udev-rules picoprobe-udev-rules]; 188 | }; 189 | }; 190 | # This includes support for suspend-to-RAM and powersave features on laptops 191 | powerManagement.enable = true; 192 | # Enable powertop auto tuning on startup. 193 | powerManagement.powertop.enable = false; 194 | xdg.portal.enable = true; 195 | 196 | system.stateVersion = "22.11"; 197 | } 198 | -------------------------------------------------------------------------------- /home/gui/eww/windows/sidebar.yuck: -------------------------------------------------------------------------------- 1 | (defwidget system-menu [] 2 | (box 3 | :class "system-menu-box" 4 | :space-evenly false 5 | :orientation "v" 6 | (box 7 | :class "top-row" 8 | :space-evenly false 9 | (label 10 | :class "time" 11 | :text "${time.hour}:${time.minute}") 12 | (box 13 | :class "date-box" 14 | :space-evenly false 15 | (label 16 | :class "date" 17 | :text {time.date}) 18 | (label 19 | :class "day" 20 | :text {time.day}))) 21 | 22 | (centerbox 23 | :class "system-row" 24 | (box 25 | :class "wifi-box" 26 | :space-evenly false 27 | :orientation "v" 28 | (box 29 | :class "element" 30 | :space-evenly false 31 | (button 32 | :class "wifi-button" 33 | :onclick "scripts/net toggle" 34 | {net.icon}) 35 | (label 36 | :class "separator" 37 | :text "|") 38 | (button 39 | :class "wifi-arrow-btn" 40 | :onclick "eww close system-menu && nm-connection-editor &" 41 | "")) 42 | (label 43 | :text {net.essid} 44 | :xalign 0.5 45 | :limit-width 15)) 46 | 47 | (box 48 | :class "bluetooth-box" 49 | :space-evenly false 50 | :orientation "v" 51 | (box 52 | :class "element" 53 | :space-evenly false 54 | (button 55 | :class "bluetooth-button" 56 | :onclick "scripts/bluetooth toggle" 57 | {bluetooth.icon}) 58 | (label 59 | :class "separator" 60 | :text "|") 61 | (button 62 | :class "bluetooth-arrow-btn" 63 | :onclick "eww close system-menu && blueberry" 64 | "")) 65 | (label 66 | :text {bluetooth.text} 67 | :xalign 0.5 68 | :tooltip "${bluetooth.text} ${bluetooth.batt_icon}" 69 | :limit-width 15)) 70 | 71 | (box 72 | :class "airplane-box" 73 | :space-evenly false 74 | :orientation "v" 75 | ;(box 76 | ; :class "element" 77 | ; (button 78 | ; :class "airplane-button" 79 | ; :onclick "scripts/airplane toggle" 80 | ; airplane)) 81 | ;(label 82 | ; :text "Airplane Mode" 83 | ; :xalign 0.5 84 | ; :limit-width 16) 85 | 86 | )) 87 | 88 | (box 89 | :class "sliders" 90 | :orientation "v" 91 | (box 92 | :class "volume-slider-box" 93 | :space-evenly false 94 | (button 95 | :class "volume-icon" 96 | :onclick "scripts/volume mute SINK" 97 | {volume.icon}) 98 | (scale 99 | :class "volume-bar" 100 | :value {volume.percent} 101 | :tooltip "volume on ${volume.percent}%" 102 | :onchange "scripts/volume setvol SINK {}")) 103 | ;(box 104 | ; :class "volume-slider-box" 105 | ; :space-evenly false 106 | ; (button 107 | ; :class "volume-icon" 108 | ; :onclick "scripts/volume mute SOURCE" 109 | ; "") 110 | ; (scale 111 | ; :class "volume-bar" 112 | ; :value {volume.microphone} 113 | ; :tooltip "mic on ${volume.microphone}%" 114 | ; :onchange "scripts/volume setvol SOURCE {}")) 115 | ;(box 116 | ; :class "brightness-slider-box" 117 | ; :space-evenly false 118 | ; (button 119 | ; :class "brightness-slider-icon" 120 | ; {brightness.icon}) 121 | ; (scale 122 | ; :class "brightness-slider" 123 | ; :value {brightness.level} 124 | ; :marks true 125 | ; :onchange "brightnessctl s {}%")) 126 | ) 127 | 128 | (box 129 | :class "system-info-box" 130 | 131 | ; cpu 132 | (box 133 | :class "sys-box" 134 | :space-evenly false 135 | :halign "start" 136 | (circular-progress 137 | :value "${EWW_CPU.avg}" 138 | :class "sys-cpu" 139 | :thickness 3 140 | (label 141 | :text "" 142 | :class "sys-icon-cpu")) 143 | (box 144 | :orientation "v" 145 | :vexpand "false" 146 | (label 147 | :text "cpu" 148 | :halign "start" 149 | :class "sys-text-cpu") 150 | (label 151 | :text "${round(EWW_CPU.avg,2)}%" 152 | :halign "start" 153 | :class "sys-text-sub") 154 | (label 155 | :text "${EWW_CPU.cores[0].freq} MHz" 156 | :halign "start" 157 | :class "sys-text-sub"))) 158 | 159 | ; memory 160 | (box 161 | :class "sys-box" 162 | :space-evenly false 163 | :halign "end" 164 | (circular-progress 165 | :value {memory.percentage} 166 | :class "sys-mem" 167 | :thickness 3 168 | (label 169 | :text "" 170 | :class "sys-icon-mem")) 171 | (box 172 | :orientation "v" 173 | (label 174 | :text "memory" 175 | :halign "start" 176 | :class "sys-text-mem") 177 | (label 178 | :text "${memory.used} | ${memory.total}" 179 | :halign "start" 180 | :class "sys-text-sub")))) 181 | 182 | (centerbox 183 | :class "bottom-row" 184 | (box 185 | :class "battery-box" 186 | :space-evenly false 187 | :halign "start" 188 | (label 189 | :class "battery-icon" 190 | :style "color: ${battery.color}" 191 | :text {battery.icon}) 192 | (label 193 | :class "battery-percentage" 194 | :text {EWW_BATTERY["BAT0"].capacity}) 195 | (label 196 | :class "battery-status" 197 | :text {battery.status}) 198 | (label 199 | :class "battery-wattage" 200 | :text {battery.wattage})) 201 | (label) 202 | (box 203 | :space-evenly false 204 | :halign "end" 205 | (button 206 | :halign "end" 207 | :class "power-button" 208 | :onclick "wlogout -p layer-shell &" ""))))) 209 | 210 | ;; windows 211 | (defwindow system-menu 212 | :stacking "fg" 213 | :windowtype "dock" 214 | :wm-ignore true 215 | :monitor "0" 216 | :geometry (geometry 217 | :x "0" 218 | :y "0" 219 | :width "0%" 220 | :height "0%" 221 | :anchor "right top") 222 | (system-menu)) 223 | -------------------------------------------------------------------------------- /modules/security.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | lib, 4 | ... 5 | }: { 6 | # paths not working yay 7 | #services.clamav.daemon.enable = true; 8 | #services.clamav.updater.enable = true; 9 | 10 | environment.memoryAllocator.provider = "graphene-hardened"; 11 | services = { 12 | mullvad-vpn.enable = true; 13 | usbguard = { 14 | enable = true; 15 | rules = '' 16 | allow id 1d6b:0002 serial "0000:00:14.0" name "xHCI Host Controller" hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" parent-hash "rV9bfLq7c2eA4tYjVjwO4bxhm+y6GgZpl9J60L0fBkY=" with-interface 09:00:00 with-connect-type "" 17 | allow id 1d6b:0003 serial "0000:00:14.0" name "xHCI Host Controller" hash "3Wo3XWDgen1hD5xM3PSNl3P98kLp1RUTgGQ5HSxtf8k=" parent-hash "rV9bfLq7c2eA4tYjVjwO4bxhm+y6GgZpl9J60L0fBkY=" with-interface 09:00:00 with-connect-type "" 18 | allow id 1235:8211 serial "Y72EB6E1AD7499" name "Scarlett Solo USB" hash "vYKb5BFrLgfYzbTqAtyq0N2yZisUuqjchfbd1NjGgiE=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" with-interface { 01:01:20 01:02:20 01:02:20 01:02:20 01:02:20 ff:01:20 } with-connect-type "hotplug" 19 | allow id 258a:0033 serial "" name "Wired Gaming Mouse" hash "NjvNTGeMdzH8KOqM6YIuBwfVCZluftC/mdg5mR2aLlY=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-2" with-interface { 03:01:02 03:01:01 } with-connect-type "hotplug" 20 | allow id 046d:c539 serial "" name "USB Receiver" hash "zPVf0/h8u0iaLZgla3hm9BjINDTSEEIMF/GWCyOYCwo=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-3" with-interface { 03:01:01 03:01:02 03:00:00 } with-connect-type "hotplug" 21 | allow id 1050:0407 serial "" name "YubiKey OTP+FIDO+CCID" hash "Q+A8QQReKclmBSaDIYja0w4Bx6ld2IU6wF7HFKdtJ3Q=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-5" with-interface { 03:01:01 03:00:00 0b:00:00 } with-connect-type "hotplug" 22 | allow id 04f2:b50c serial "" name "HP Truevision HD" hash "xR2ZRjJzpB6sW1I9lU5CPcYRjCiW23iyfnr67QjSNWw=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-6" with-interface { 0e:01:00 0e:02:00 0e:02:00 0e:02:00 0e:02:00 0e:02:00 0e:02:00 0e:02:00 0e:02:00 0e:02:00 0e:02:00 0e:02:00 0e:02:00 } with-connect-type "hardwired" 23 | allow id 8087:0a2a serial "" name "" hash "7jCRH2DCYUfdP9zZCYIQH6Z5QWx8Nzt8sX21UHwxIqA=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-7" with-interface { e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 e0:01:01 } with-connect-type "hardwired" 24 | allow id 04f3:22f6 serial "" name "Touchscreen" hash "x1+RDZDWJlnHus7DN6iDdnCOJj52ogmObdk0JlocWtc=" parent-hash "jEP/6WzviqdJ5VSeTUY8PatCNBKeaREvo2OqdplND/o=" via-port "1-8" with-interface 03:00:00 with-connect-type "hardwired" 25 | ''; 26 | #dbus.enable = true; 27 | IPCAllowedGroups = ["wheel"]; 28 | IPCAllowedUsers = []; 29 | }; 30 | }; 31 | 32 | security = { 33 | rtkit.enable = true; 34 | polkit.enable = true; 35 | pam.services = { 36 | greetd.enableGnomeKeyring = true; 37 | greetd.enableKwallet = true; 38 | }; 39 | protectKernelImage = true; 40 | lockKernelModules = false; # breaks virtd, wireguard and iptables 41 | 42 | # force-enable the Page Table Isolation (PTI) Linux kernel feature 43 | forcePageTableIsolation = true; 44 | 45 | # User namespaces are required for sandboxing. Better than nothing imo. 46 | allowUserNamespaces = true; 47 | 48 | apparmor = { 49 | enable = true; 50 | killUnconfinedConfinables = true; 51 | packages = [pkgs.apparmor-profiles]; 52 | }; 53 | 54 | virtualisation = { 55 | # flush the L1 data cache before entering guests 56 | flushL1DataCache = "always"; 57 | }; 58 | 59 | auditd.enable = true; 60 | audit = { 61 | enable = true; 62 | rules = [ 63 | "-a exit,always -F arch=b64 -S execve" 64 | ]; 65 | }; 66 | sudo = { 67 | enable = lib.mkDefault true; 68 | execWheelOnly = true; 69 | wheelNeedsPassword = true; 70 | extraConfig = '' 71 | # rollback results in sudo lectures after each reboot 72 | Defaults lecture = never 73 | ''; 74 | }; 75 | }; 76 | 77 | # security tweaks borrowed from @hlissner & @fufexan & @NotAShelf 78 | boot.kernel.sysctl = { 79 | # The Magic SysRq key is a key combo that allows users connected to the 80 | # system console of a Linux kernel to perform some low-level commands. 81 | # Disable it, since we don't need it, and is a potential security concern. 82 | "kernel.sysrq" = 0; 83 | 84 | ## TCP hardening 85 | # Prevent bogus ICMP errors from filling up logs. 86 | "net.ipv4.icmp_ignore_bogus_error_responses" = 1; 87 | # Reverse path filtering causes the kernel to do source validation of 88 | # packets received from all interfaces. This can mitigate IP spoofing. 89 | "net.ipv4.conf.default.rp_filter" = 1; 90 | "net.ipv4.conf.all.rp_filter" = 1; 91 | # Do not accept IP source route packets (we're not a router) 92 | "net.ipv4.conf.all.accept_source_route" = 0; 93 | "net.ipv6.conf.all.accept_source_route" = 0; 94 | # Don't send ICMP redirects (again, we're on a router) 95 | "net.ipv4.conf.all.send_redirects" = 0; 96 | "net.ipv4.conf.default.send_redirects" = 0; 97 | # Refuse ICMP redirects (MITM mitigations) 98 | "net.ipv4.conf.all.accept_redirects" = 0; 99 | "net.ipv4.conf.default.accept_redirects" = 0; 100 | "net.ipv4.conf.all.secure_redirects" = 0; 101 | "net.ipv4.conf.default.secure_redirects" = 0; 102 | "net.ipv6.conf.all.accept_redirects" = 0; 103 | "net.ipv6.conf.default.accept_redirects" = 0; 104 | # Protects against SYN flood attacks 105 | "net.ipv4.tcp_syncookies" = 1; 106 | # Incomplete protection again TIME-WAIT assassination 107 | "net.ipv4.tcp_rfc1337" = 1; 108 | 109 | ## TCP optimization 110 | # TCP Fast Open is a TCP extension that reduces network latency by packing 111 | # data in the sender’s initial TCP SYN. Setting 3 = enable TCP Fast Open for 112 | # both incoming and outgoing connections: 113 | "net.ipv4.tcp_fastopen" = 3; 114 | # Bufferbloat mitigations + slight improvement in throughput & latency 115 | "net.ipv4.tcp_congestion_control" = "bbr"; 116 | "net.core.default_qdisc" = "cake"; 117 | 118 | "kernel.kexec_load_disabled" = 1; 119 | 120 | # Restrict ptrace() usage to processes with a pre-defined relationship 121 | # (e.g., parent/child) 122 | "kernel.yama.ptrace_scope" = 2; 123 | # Hide kptrs even for processes with CAP_SYSLOG 124 | "kernel.kptr_restrict" = 2; 125 | # Disable bpf() JIT (to eliminate spray attacks) 126 | "net.core.bpf_jit_enable" = false; 127 | # Disable ftrace debugging 128 | "kernel.ftrace_enabled" = false; 129 | }; 130 | boot.kernelModules = ["tcp_bbr"]; 131 | 132 | boot.blacklistedKernelModules = [ 133 | # Obscure network protocols 134 | "ax25" 135 | "netrom" 136 | "rose" 137 | # Old or rare or insufficiently audited filesystems 138 | "adfs" 139 | "affs" 140 | "bfs" 141 | "befs" 142 | "cramfs" 143 | "efs" 144 | "erofs" 145 | "exofs" 146 | "freevxfs" 147 | "f2fs" 148 | "vivid" 149 | "gfs2" 150 | "ksmbd" 151 | "nfsv4" 152 | "nfsv3" 153 | "cifs" 154 | "nfs" 155 | "cramfs" 156 | "freevxfs" 157 | "jffs2" 158 | "hfs" 159 | "hfsplus" 160 | "squashfs" 161 | "udf" 162 | "btusb" 163 | "hpfs" 164 | "jfs" 165 | "minix" 166 | "nilfs2" 167 | "omfs" 168 | "qnx4" 169 | "qnx6" 170 | "sysv" 171 | ]; 172 | 173 | # So we don't have to do this later... 174 | security.acme = { 175 | acceptTerms = true; 176 | defaults.email = "yavornkolev@gmail.com"; 177 | }; 178 | } 179 | --------------------------------------------------------------------------------