diff options
| author | Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> | 2025-07-13 03:56:55 +0530 |
|---|---|---|
| committer | Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> | 2025-07-13 03:56:55 +0530 |
| commit | 3b09a24e0a5733f4fb527120a9c710f511862023 (patch) | |
| tree | 1362d1608e5b5ff01dbc7f71dea04cb6b91c9aa8 | |
| parent | 085ff668ab45ac8d57c093e502b1175a86f2c14e (diff) | |
| download | home-manager-config-3b09a24e0a5733f4fb527120a9c710f511862023.tar.gz home-manager-config-3b09a24e0a5733f4fb527120a9c710f511862023.zip | |
Removed unecessary junk.
20 files changed, 432 insertions, 0 deletions
@@ -8,6 +8,9 @@ # Fonts fonts.nerdfont.fira-code.enable = true; + # Graphics + graphical.enable = true; + # Enable scripts scripts.enable = true; diff --git a/modules/default.nix b/modules/default.nix index 13ba2b9..f4628a2 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -3,6 +3,7 @@ { imports = [ ./fonts + ./graphical ./scripts ./tools ]; diff --git a/modules/graphical/bspwm/default.nix b/modules/graphical/bspwm/default.nix new file mode 100644 index 0000000..24b15fd --- /dev/null +++ b/modules/graphical/bspwm/default.nix @@ -0,0 +1,41 @@ +{ config, lib, pkgs, ... }: + +{ + config = lib.mkIf config.graphical.enable { + xsession.windowManager.bspwm.enable = true; + + xsession.windowManager.bspwm.settings = with config.scheme.withHashtag; { + window_gap = 10; + split_ratio = 0.5; + single_monocle = true; + borderless_monocle = false; + gapless_monocle = false; + focus_follows_pointer = true; + pointer_follows_focus = false; + pointer_motion_interval = 40; + pointer_modifier = "mod1"; # alt key + pointer_action1 = "resize_side"; + pointer_action2 = "move"; + pointer_action3 = "resize_corner"; + normal_border_color = base02; + active_border_color = base02; + focused_border_color = base03; + }; + + xsession.windowManager.bspwm.rules = { + "floating-termial" = { + state = "floating"; + sticky = true; + rectangle = "1000x600+0+0"; + center = true; + follow = true; + }; + }; + + xsession.windowManager.bspwm.extraConfig = '' +for monitor in $(xrandr -q | grep -w 'connected' | cut -d' ' -f1); do + bspc monitor "$monitor" -d '1' '2' '3' '4' '5' '6' +done + ''; + }; +} diff --git a/modules/graphical/default.nix b/modules/graphical/default.nix new file mode 100644 index 0000000..7154f55 --- /dev/null +++ b/modules/graphical/default.nix @@ -0,0 +1,26 @@ +{ lib, config, pkgs, ... }: + +{ + imports = [ + ./bspwm + ./polybar + ./sxhkd + ]; + + options.graphical = { + enable = lib.mkEnableOption "Enables graphical interface."; + }; + + config = lib.mkIf config.graphical.enable { + xdg.enable = true; + xsession.enable = true; + + xsession.windowManager.command = lib.mkForce " +#!/bin/sh +${if config.tools.feh.enable then + "${pkgs.feh}/bin/feh --bg-scale ${../../assets/skeleton-mage.png}" +else "xsetroot -solid \"${config.scheme.withHashtag.base00}\""} +exec ${pkgs.bspwm}/bin/bspwm +"; + }; +} diff --git a/modules/graphical/polybar/bar/default.nix b/modules/graphical/polybar/bar/default.nix new file mode 100644 index 0000000..23a43c4 --- /dev/null +++ b/modules/graphical/polybar/bar/default.nix @@ -0,0 +1,5 @@ +{ config, lib }: + +{ + "bar/main" = import ./main.nix { inherit config lib; }; +} diff --git a/modules/graphical/polybar/bar/main.nix b/modules/graphical/polybar/bar/main.nix new file mode 100644 index 0000000..06fa63f --- /dev/null +++ b/modules/graphical/polybar/bar/main.nix @@ -0,0 +1,42 @@ +{ config, lib }: + +with config.scheme.withHashtag; +let + largerFontSize = toString (builtins.ceil (config.fonts.size * 9.0 / 8.0)); +in { + width = "100%:-20"; + fixed-center = false; + height = 35; + override-redirect = true; + + border-top-size = 1; + border-bottom-size = 1; + border-left-size = 1; + border-right-size = 1; + border-color = base03; + + background = base00; + foreground = base05; + + line-size = 3; + line-color = base08; + + padding-left = 1; + padding-right = 1; + + module-margin-left = 1; + module-margin-right = 1; + + separator = "%{F${base03}}%{T3}│%{T-}%{F-}"; + + offset-x = "10"; + offset-y = "10"; + + font-0 = "${config.fonts.normal}:pixelsize=${toString config.fonts.size};3"; + font-1 = "${config.fonts.normal}:weight=Bold:pixelsize=${largerFontSize};3"; + font-2 = "${config.fonts.normal}:style=Light:pixelsize=${largerFontSize};2"; + + modules-left = "bspwm separator"; + modules-center = "xwindow"; + modules-right = "separator memory cpu battery time date kernel-version"; +} diff --git a/modules/graphical/polybar/default.nix b/modules/graphical/polybar/default.nix new file mode 100644 index 0000000..7b02088 --- /dev/null +++ b/modules/graphical/polybar/default.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, ... }: + +{ + config = lib.mkIf config.graphical.enable { + services.polybar.enable = true; + home.packages = with pkgs; [ + coreutils + ]; + services.polybar.script = " +export PATH=${pkgs.coreutils}/bin/:$PATH +${config.services.polybar.package}/bin/polybar main +"; + services.polybar.config = lib.mkMerge [ + (import ./bar { inherit config lib; }) + (import ./module { inherit config lib; }) + { + settings = { + screenchange-reload = true; + }; + } + ]; + }; +} diff --git a/modules/graphical/polybar/module/battery.nix b/modules/graphical/polybar/module/battery.nix new file mode 100644 index 0000000..6e25e99 --- /dev/null +++ b/modules/graphical/polybar/module/battery.nix @@ -0,0 +1,36 @@ +{ config }: + +with config.scheme.withHashtag; +{ + type = "internal/battery"; + battery = "BAT0"; + adapter = "ADP1"; + + format-charging = "%{T2}%{F${base03}}<animation-charging>%{F-}%{T-} <label-charging>"; + format-discharging = "%{T2}%{F${base03}}<ramp-capacity>%{F-}%{T-} <label-discharging>"; + format-full-prefix = " "; + + ramp-capacity-0 = ""; + ramp-capacity-1 = ""; + ramp-capacity-2 = ""; + ramp-capacity-3 = ""; + ramp-capacity-4 = ""; + ramp-capacity-5 = ""; + ramp-capacity-6 = ""; + ramp-capacity-7 = ""; + ramp-capacity-8 = ""; + ramp-capacity-9 = ""; + + animation-charging-0 = ""; + animation-charging-1 = ""; + animation-charging-2 = ""; + animation-charging-3 = ""; + animation-charging-4 = ""; + animation-charging-5 = ""; + animation-charging-6 = ""; + animation-charging-7 = ""; + animation-charging-8 = ""; + animation-charging-9 = ""; + + animation-charging-framerate = 750; +} diff --git a/modules/graphical/polybar/module/bspwm.nix b/modules/graphical/polybar/module/bspwm.nix new file mode 100644 index 0000000..ed82946 --- /dev/null +++ b/modules/graphical/polybar/module/bspwm.nix @@ -0,0 +1,21 @@ +{ config }: + +with config.scheme.withHashtag; +{ + type = "internal/bspwm"; + + label-focused = "%index%"; + label-focused-underline = "${base0D}"; + label-focused-padding = 2; + + label-occupied = "%index%"; + label-occupied-padding = 2; + + label-urgent = "%index%"; + label-urgent-underline = "${base08}"; + label-urgent-padding = 2; + + label-empty = "%index%"; + label-empty-foreground = "${base03}"; + label-empty-padding = 2; +} diff --git a/modules/graphical/polybar/module/cpu.nix b/modules/graphical/polybar/module/cpu.nix new file mode 100644 index 0000000..d37b5cc --- /dev/null +++ b/modules/graphical/polybar/module/cpu.nix @@ -0,0 +1,9 @@ +{ config }: + +with config.scheme.withHashtag; +{ + type = "internal/cpu"; + interval = 2; + format-prefix = "%{T2}%{F${base03}} %{F-}%{T-}"; + label = "%percentage%%"; +} diff --git a/modules/graphical/polybar/module/date.nix b/modules/graphical/polybar/module/date.nix new file mode 100644 index 0000000..56e2fa6 --- /dev/null +++ b/modules/graphical/polybar/module/date.nix @@ -0,0 +1,10 @@ +{ config }: + +with config.scheme.withHashtag; +{ + type = "internal/date"; + interval = 60; + date = "%d/%m/%Y"; + label = "%date%"; + format-prefix = "%{T2}%{F${base03}} %{F-}%{T-}"; +} diff --git a/modules/graphical/polybar/module/default.nix b/modules/graphical/polybar/module/default.nix new file mode 100644 index 0000000..ffd161a --- /dev/null +++ b/modules/graphical/polybar/module/default.nix @@ -0,0 +1,13 @@ +{ config, lib }: + +{ + "module/separator" = import ./separator.nix { inherit config; }; + "module/xwindow" = import ./xwindow.nix { inherit config; }; + "module/bspwm" = import ./bspwm.nix { inherit config; }; + "module/cpu" = import ./cpu.nix { inherit config; }; + "module/memory" = import ./memory.nix { inherit config; }; + "module/date" = import ./date.nix { inherit config; }; + "module/time" = import ./time.nix { inherit config; }; + "module/battery" = import ./battery.nix { inherit config; }; + "module/kernel-version" = import ./kernel-version.nix { inherit config; }; +} diff --git a/modules/graphical/polybar/module/kernel-version.nix b/modules/graphical/polybar/module/kernel-version.nix new file mode 100644 index 0000000..8f94e37 --- /dev/null +++ b/modules/graphical/polybar/module/kernel-version.nix @@ -0,0 +1,10 @@ +{ config }: + +with config.scheme.withHashtag; +{ + type = "custom/script"; + exec = "uname -r"; + interval = 1024; + format-prefix = "%{T2}%{F${base03}} %{F-}%{T-}"; + label = "%output%"; +} diff --git a/modules/graphical/polybar/module/memory.nix b/modules/graphical/polybar/module/memory.nix new file mode 100644 index 0000000..cf70874 --- /dev/null +++ b/modules/graphical/polybar/module/memory.nix @@ -0,0 +1,9 @@ +{ config }: + +with config.scheme.withHashtag; +{ + type = "internal/memory"; + interval = 2; + format-prefix = "%{T2}%{F${base03}} %{F-}%{T-}"; + label = "%gb_used%"; +} diff --git a/modules/graphical/polybar/module/separator.nix b/modules/graphical/polybar/module/separator.nix new file mode 100644 index 0000000..3cd1430 --- /dev/null +++ b/modules/graphical/polybar/module/separator.nix @@ -0,0 +1,7 @@ +{ config }: + +with config.scheme.withHashtag; +{ + type = "custom/text"; + label = " "; +} diff --git a/modules/graphical/polybar/module/time.nix b/modules/graphical/polybar/module/time.nix new file mode 100644 index 0000000..b8ea545 --- /dev/null +++ b/modules/graphical/polybar/module/time.nix @@ -0,0 +1,10 @@ +{ config }: + +with config.scheme.withHashtag; +{ + type = "internal/date"; + interval = 30; + time = "%H:%M"; + label = "%time%"; + format-prefix = "%{T2}%{F${base03}} %{F-}%{T-}"; +} diff --git a/modules/graphical/polybar/module/xwindow.nix b/modules/graphical/polybar/module/xwindow.nix new file mode 100644 index 0000000..833899e --- /dev/null +++ b/modules/graphical/polybar/module/xwindow.nix @@ -0,0 +1,7 @@ +{ config }: + +with config.scheme.withHashtag; +{ + type = "internal/xwindow"; + label = "%title:0:30:...%"; +} diff --git a/modules/graphical/sxhkd/default.nix b/modules/graphical/sxhkd/default.nix new file mode 100644 index 0000000..1b362cf --- /dev/null +++ b/modules/graphical/sxhkd/default.nix @@ -0,0 +1,37 @@ +{ pkgs, config, lib, ... }: + +{ + config = lib.mkIf config.graphical.enable { + services.sxhkd.enable = true; + services.sxhkd.keybindings = + let + modKey = "alt"; + createKeybinding = keybinding: description: command: { + "# ${description}\n${modKey} + ${keybinding}" = command; + }; + in lib.mkMerge [ + (import ./keybindings/bspwm.nix { inherit pkgs createKeybinding lib; }) + + (createKeybinding + "s" + "Show keybindings." + "kitty --title 'Keybindings' --class floating-termial -e ${pkgs.writeShellScript "keybindings.sh" (builtins.readFile ./scripts/keybindings.sh)}" + ) + + (createKeybinding + "r" + "Application launcher." + "rofi") + + (createKeybinding + "t" + "Launch terminal." + "kitty") + + # (createKeybinding + # "f" + # "Launch File Manager." + # "kitty --title 'File Manager' --class floating-termial -e ${config.tools.file-manager.command}") + ]; + }; +} diff --git a/modules/graphical/sxhkd/keybindings/bspwm.nix b/modules/graphical/sxhkd/keybindings/bspwm.nix new file mode 100644 index 0000000..ed62ed4 --- /dev/null +++ b/modules/graphical/sxhkd/keybindings/bspwm.nix @@ -0,0 +1,45 @@ +{ createKeybinding, pkgs, lib }: + +let + bspc = "${pkgs.bspwm}/bin/bspc"; +in lib.mkMerge [ + (createKeybinding + "q" + "Kill current window." + "${bspc} node -c") + + (createKeybinding + "{1-9,0}" + "Switch workspace." + "${bspc} desktop -f {1-9,10}") + + (createKeybinding + "shift + {1-9,0}" + "Move window to workspace." + "${bspc} node -d {1-9,10} --follow") + + (createKeybinding + "{n,d,m}" + "Set current window mode (tiled, floating, fullscreen)." + "${bspc} node focused -t {tiled,floating,fullscreen}") + + (createKeybinding + "{_,shift + }{h,j,k,l}" + "Navigate between windows." + "${bspc} node --{focus,swap} {west,south,north,east}") + + # the indentation for each line is required to work with the help prompt + (createKeybinding + "ctrl + {h,j,k,l}" + "Resize current window." + '' + ${bspc} node {@parent/second -z left -20 0; \ + @parent/first -z right -20 0, \ + @parent/second -z top 0 +20; \ + @parent/first -z bottom 0 +20, \ + @parent/first -z bottom 0 -20; \ + @parent/second -z top 0 -20, \ + @parent/first -z right +20 0; \ + @parent/second -z left +20 0} +'') +] diff --git a/modules/graphical/sxhkd/scripts/keybindings.sh b/modules/graphical/sxhkd/scripts/keybindings.sh new file mode 100755 index 0000000..01bb05f --- /dev/null +++ b/modules/graphical/sxhkd/scripts/keybindings.sh @@ -0,0 +1,77 @@ +#!/bin/sh + +# Path to your sxhkd config file +SXHKD_FILE="$HOME/.config/sxhkd/sxhkdrc" + +# Function to wrap text to a specified width +wrap_text() { + local text="$1" + local width="$2" + echo "$text" | fold -s -w "$width" +} + +# Get terminal width +terminal_width=$(tput cols) + +# Set the table width to the full terminal width, leaving space for borders +table_width=$((terminal_width - 4)) # 4 for the borders and space between columns + +# Set keybinding column width to half of the available width +max_keybinding_length=$((table_width / 2)) + +# Length of the cotent inside the cell (2 spaces are substracted for padding) +max_keybinding_content_length=$((max_keybinding_length - 2)) + +# Set the description column width to the other half +description_width=$((table_width - max_keybinding_length - 1)) # 1 for the separator between columns + +# Length of the cotent inside the cell (2 spaces are substracted for padding) +description_content_width=$((description_width - 2)) + +# Generate the top border line and row separator +border_line="├$(printf '%.0s─' $(seq 1 $max_keybinding_length))┼$(printf '%.0s─' $(seq 1 $description_width))┤" + +# Pipe all output to less +{ + # Print table header with borders + echo "┌$(printf '%.0s─' $(seq 1 $max_keybinding_length))┬$(printf '%.0s─' $(seq 1 $description_width))┐" + printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "KEYBINDING" "$description_content_width" "DESCRIPTION" + + # Initialize variables + description="" + + # Load the sxhkd file into an array + mapfile -t lines < "$SXHKD_FILE" + + # Loop through lines for output + for line in "${lines[@]}"; do + # Check if the line is a comment + if [[ $line =~ ^# ]]; then + # Remove the "#" and any leading/trailing whitespace to capture the description + description="${line#\# }" + elif [[ $line =~ ^[^#[:space:]] ]]; then + # If it's a keybinding line, store it + keybinding="$line" + # Move to the next line for the command + command="${lines[((++i))]}" + + # Wrap the description to the calculated width + wrapped_description=$(wrap_text "$description" "$description_width") + + # Print the keybinding with a border line above and below it + echo "$border_line" + printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "$keybinding" "$description_content_width" "$(echo "$wrapped_description" | head -n 1)" + + # Print wrapped description lines with empty keybinding column + echo "$wrapped_description" | sed '1d' | while read -r continuation; do + printf "│ %-*s │ %-*s │\n" "$max_keybinding_content_length" "" "$description_content_width" "$continuation" + done + + # Reset description for the next keybinding + description="" + fi + done + + # Print the final border line + echo "└$(printf '%.0s─' $(seq 1 $max_keybinding_length))┴$(printf '%.0s─' $(seq 1 $description_width))┘" +} | less |
