aboutsummaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/default.nix1
-rw-r--r--modules/graphical/bspwm/default.nix41
-rw-r--r--modules/graphical/default.nix26
-rw-r--r--modules/graphical/polybar/bar/default.nix5
-rw-r--r--modules/graphical/polybar/bar/main.nix42
-rw-r--r--modules/graphical/polybar/default.nix23
-rw-r--r--modules/graphical/polybar/module/battery.nix36
-rw-r--r--modules/graphical/polybar/module/bspwm.nix21
-rw-r--r--modules/graphical/polybar/module/cpu.nix9
-rw-r--r--modules/graphical/polybar/module/date.nix10
-rw-r--r--modules/graphical/polybar/module/default.nix13
-rw-r--r--modules/graphical/polybar/module/kernel-version.nix10
-rw-r--r--modules/graphical/polybar/module/memory.nix9
-rw-r--r--modules/graphical/polybar/module/separator.nix7
-rw-r--r--modules/graphical/polybar/module/time.nix10
-rw-r--r--modules/graphical/polybar/module/xwindow.nix7
-rw-r--r--modules/graphical/sxhkd/default.nix37
-rw-r--r--modules/graphical/sxhkd/keybindings/bspwm.nix45
-rwxr-xr-xmodules/graphical/sxhkd/scripts/keybindings.sh77
19 files changed, 429 insertions, 0 deletions
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