aboutsummaryrefslogtreecommitdiffstats
path: root/modules/desktop
diff options
context:
space:
mode:
authorArpit Chakladar <54011232+arpitchakladar@users.noreply.github.com>2024-09-24 23:13:51 +0530
committerArpit Chakladar <54011232+arpitchakladar@users.noreply.github.com>2024-09-24 23:13:51 +0530
commitc0c5087218c27e31c3e6f66f3937bff22fa0f647 (patch)
treedede2292db1423cef901932a7898ec951c9d2345 /modules/desktop
parent21265ba643f1c12ad40e5195de8a3a97682adbde (diff)
downloadhome-manager-config-c0c5087218c27e31c3e6f66f3937bff22fa0f647.tar.gz
home-manager-config-c0c5087218c27e31c3e6f66f3937bff22fa0f647.zip
Using nix flake modules to manage the configurations.
Diffstat (limited to 'modules/desktop')
-rw-r--r--modules/desktop/default.nix11
-rw-r--r--modules/desktop/popup-manager/default.nix7
-rw-r--r--modules/desktop/popup-manager/rofi/default.nix13
-rw-r--r--modules/desktop/popup-manager/rofi/theme/default.nix21
-rw-r--r--modules/desktop/popup-manager/rofi/theme/theme.rasi76
-rw-r--r--modules/desktop/status-bar/default.nix7
-rw-r--r--modules/desktop/status-bar/polybar/bars/main.nix28
-rw-r--r--modules/desktop/status-bar/polybar/default.nix24
-rw-r--r--modules/desktop/status-bar/polybar/modules/battery.nix36
-rw-r--r--modules/desktop/status-bar/polybar/modules/bspwm.nix22
-rw-r--r--modules/desktop/status-bar/polybar/modules/cpu.nix9
-rw-r--r--modules/desktop/status-bar/polybar/modules/date.nix10
-rw-r--r--modules/desktop/status-bar/polybar/modules/kernel-version.nix10
-rw-r--r--modules/desktop/status-bar/polybar/modules/memory.nix9
-rw-r--r--modules/desktop/status-bar/polybar/modules/time.nix10
-rw-r--r--modules/desktop/status-bar/polybar/modules/xwindow.nix7
-rw-r--r--modules/desktop/terminal/alacritty/default.nix78
-rw-r--r--modules/desktop/terminal/default.nix7
-rw-r--r--modules/desktop/window-manager/bspwm/bspwmrc3
-rw-r--r--modules/desktop/window-manager/bspwm/default.nix38
-rw-r--r--modules/desktop/window-manager/default.nix8
-rw-r--r--modules/desktop/window-manager/sxhkd/default.nix79
-rw-r--r--modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh13
-rw-r--r--modules/desktop/xresources/default.nix7
-rw-r--r--modules/desktop/xresources/xinit/default.nix14
-rw-r--r--modules/desktop/xresources/xinit/xinitrc4
26 files changed, 551 insertions, 0 deletions
diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix
new file mode 100644
index 0000000..e15cd53
--- /dev/null
+++ b/modules/desktop/default.nix
@@ -0,0 +1,11 @@
+{ lib, config, ... }:
+
+{
+ imports = [
+ ./popup-manager
+ ./status-bar
+ ./terminal
+ ./window-manager
+ ./xresources
+ ];
+}
diff --git a/modules/desktop/popup-manager/default.nix b/modules/desktop/popup-manager/default.nix
new file mode 100644
index 0000000..8c82ea7
--- /dev/null
+++ b/modules/desktop/popup-manager/default.nix
@@ -0,0 +1,7 @@
+{ lib, ... }:
+
+{
+ imports = [
+ ./rofi
+ ];
+}
diff --git a/modules/desktop/popup-manager/rofi/default.nix b/modules/desktop/popup-manager/rofi/default.nix
new file mode 100644
index 0000000..fdf7d3e
--- /dev/null
+++ b/modules/desktop/popup-manager/rofi/default.nix
@@ -0,0 +1,13 @@
+{ config, lib, ... }:
+
+{
+ options = {
+ rofi.enable = lib.mkEnableOption "Enables rofi.";
+ };
+
+ config = lib.mkIf config.rofi.enable {
+ programs.rofi.enable = true;
+ programs.rofi.font = "FiraCode Nerd Font 16";
+ programs.rofi.theme = import ./theme/default.nix config;
+ };
+}
diff --git a/modules/desktop/popup-manager/rofi/theme/default.nix b/modules/desktop/popup-manager/rofi/theme/default.nix
new file mode 100644
index 0000000..b0b8173
--- /dev/null
+++ b/modules/desktop/popup-manager/rofi/theme/default.nix
@@ -0,0 +1,21 @@
+config:
+
+with config.scheme.withHashtag;
+builtins.toFile "theme.rasi"
+''
+${builtins.readFile ./theme.rasi}
+configuration {
+ font: "${config.programs.rofi.font}";
+}
+
+* {
+ bg: ${base00};
+ bg-alt: ${base01};
+ fg: ${base07};
+ fg-alt: ${base03};
+}
+
+window {
+ border-color: ${base03};
+}
+''
diff --git a/modules/desktop/popup-manager/rofi/theme/theme.rasi b/modules/desktop/popup-manager/rofi/theme/theme.rasi
new file mode 100644
index 0000000..9d808b9
--- /dev/null
+++ b/modules/desktop/popup-manager/rofi/theme/theme.rasi
@@ -0,0 +1,76 @@
+configuration {
+ drun {
+ display-name: " ";
+ }
+
+ run {
+ display-name: " ";
+ }
+
+ window {
+ display-name: " ";
+ }
+
+ ssh {
+ display-name: " ";
+ }
+
+ timeout {
+ delay: 10;
+ action: "kb-cancel";
+ }
+}
+
+* {
+ border: 1;
+ margin: 0;
+ padding: 0;
+ spacing: 0;
+
+ background-color: @bg;
+ text-color: @fg;
+}
+
+window {
+ transparency: "real";
+}
+
+mainbox {
+ children: [inputbar, listview];
+}
+
+inputbar {
+ background-color: @bg-alt;
+ children: [prompt, entry];
+}
+
+entry {
+ background-color: inherit;
+ padding: 12px 3px;
+}
+
+prompt {
+ background-color: inherit;
+ padding: 12px;
+}
+
+listview {
+ lines: 8;
+}
+
+element {
+ children: [element-text];
+}
+
+element-icon {
+ padding: 10px 10px;
+}
+
+element-text {
+ padding: 10px 10px;
+ text-color: @fg-alt;
+}
+
+element-text selected {
+ text-color: @fg;
+}
diff --git a/modules/desktop/status-bar/default.nix b/modules/desktop/status-bar/default.nix
new file mode 100644
index 0000000..124c830
--- /dev/null
+++ b/modules/desktop/status-bar/default.nix
@@ -0,0 +1,7 @@
+{ lib, ... }:
+
+{
+ imports = [
+ ./polybar
+ ];
+}
diff --git a/modules/desktop/status-bar/polybar/bars/main.nix b/modules/desktop/status-bar/polybar/bars/main.nix
new file mode 100644
index 0000000..630664d
--- /dev/null
+++ b/modules/desktop/status-bar/polybar/bars/main.nix
@@ -0,0 +1,28 @@
+config:
+
+with config.scheme.withHashtag;
+{
+ width = "100%";
+ height = 30;
+ radius = 3;
+ fixed-center = false;
+
+ background = "${base00}";
+ foreground = "${base05}";
+
+ line-size = 3;
+ line-color = "${base08}";
+
+ border-size = 4;
+ padding-left = 2;
+ padding-right = 2;
+
+ module-margin-left = 2;
+ module-margin-right = 2;
+
+ font-0 = "FiraCode Nerd Font:pixelsize=16;3";
+
+ modules-left = "bspwm";
+ modules-center = "xwindow";
+ modules-right = "memory cpu battery time date kernel-version";
+}
diff --git a/modules/desktop/status-bar/polybar/default.nix b/modules/desktop/status-bar/polybar/default.nix
new file mode 100644
index 0000000..11f4f1a
--- /dev/null
+++ b/modules/desktop/status-bar/polybar/default.nix
@@ -0,0 +1,24 @@
+{ config, lib, ... }:
+
+{
+ options = {
+ polybar.enable = lib.mkEnableOption "Enables polybar.";
+ };
+
+ config = lib.mkIf config.polybar.enable {
+ services.polybar.enable = true;
+ services.polybar.script = "polybar main &";
+
+ services.polybar.config = {
+ "bar/main" = import ./bars/main.nix config;
+ "module/xwindow" = import ./modules/xwindow.nix config;
+ "module/bspwm" = import ./modules/bspwm.nix config;
+ "module/cpu" = import ./modules/cpu.nix config;
+ "module/memory" = import ./modules/memory.nix config;
+ "module/date" = import ./modules/date.nix config;
+ "module/time" = import ./modules/time.nix config;
+ "module/battery" = import ./modules/battery.nix config;
+ "module/kernel-version" = import ./modules/kernel-version.nix config;
+ };
+ };
+}
diff --git a/modules/desktop/status-bar/polybar/modules/battery.nix b/modules/desktop/status-bar/polybar/modules/battery.nix
new file mode 100644
index 0000000..9860c3c
--- /dev/null
+++ b/modules/desktop/status-bar/polybar/modules/battery.nix
@@ -0,0 +1,36 @@
+config:
+
+with config.scheme.withHashtag;
+{
+ type = "internal/battery";
+ battery = "BAT0";
+ adapter = "ADP1";
+
+ format-charging = "<animation-charging> <label-charging>";
+ format-discharging = "<ramp-capacity> <label-discharging>";
+ format-full-prefix = "%{F${base0B}}󰁹%{F-}";
+
+ ramp-capacity-0 = "%{F${base0C}}󰁺%{F-}";
+ ramp-capacity-1 = "%{F${base0C}}󰁻%{F-}";
+ ramp-capacity-2 = "%{F${base0C}}󰁼%{F-}";
+ ramp-capacity-3 = "%{F${base0C}}󰁽%{F-}";
+ ramp-capacity-4 = "%{F${base0C}}󰁾%{F-}";
+ ramp-capacity-5 = "%{F${base0C}}󰁿%{F-}";
+ ramp-capacity-6 = "%{F${base0C}}󰂀%{F-}";
+ ramp-capacity-7 = "%{F${base0C}}󰂁%{F-}";
+ ramp-capacity-8 = "%{F${base0C}}󰂂%{F-}";
+ ramp-capacity-9 = "%{F${base0C}}󰁹%{F-}";
+
+ animation-charging-0 = "%{F${base0C}}󰁺%{F-}";
+ animation-charging-1 = "%{F${base0C}}󰁻%{F-}";
+ animation-charging-2 = "%{F${base0C}}󰁼%{F-}";
+ animation-charging-3 = "%{F${base0C}}󰁽%{F-}";
+ animation-charging-4 = "%{F${base0C}}󰁾%{F-}";
+ animation-charging-5 = "%{F${base0C}}󰁿%{F-}";
+ animation-charging-6 = "%{F${base0C}}󰂀%{F-}";
+ animation-charging-7 = "%{F${base0C}}󰂁%{F-}";
+ animation-charging-8 = "%{F${base0C}}󰂂%{F-}";
+ animation-charging-9 = "%{F${base0C}}󰁹%{F-}";
+
+ animation-charging-framerate = 750;
+}
diff --git a/modules/desktop/status-bar/polybar/modules/bspwm.nix b/modules/desktop/status-bar/polybar/modules/bspwm.nix
new file mode 100644
index 0000000..7ec5c6d
--- /dev/null
+++ b/modules/desktop/status-bar/polybar/modules/bspwm.nix
@@ -0,0 +1,22 @@
+config:
+
+with config.scheme.withHashtag;
+{
+ type = "internal/bspwm";
+
+ label-focused = "%index%";
+ label-focused-background = "${base01}";
+ label-focused-underline = "${base0D}";
+ label-focused-padding = 2;
+
+ label-occupied = "%index%";
+ label-occupied-padding = 2;
+
+ label-urgent = "%index%!";
+ label-urgent-background = "${base08}";
+ label-urgent-padding = 2;
+
+ label-empty = "%index%";
+ label-empty-foreground = "${base03}";
+ label-empty-padding = 2;
+}
diff --git a/modules/desktop/status-bar/polybar/modules/cpu.nix b/modules/desktop/status-bar/polybar/modules/cpu.nix
new file mode 100644
index 0000000..f118990
--- /dev/null
+++ b/modules/desktop/status-bar/polybar/modules/cpu.nix
@@ -0,0 +1,9 @@
+config:
+
+with config.scheme.withHashtag;
+{
+ type = "internal/cpu";
+ interval = 2;
+ format-prefix = "%{F${base09}} %{F-}";
+ label = "%percentage%%";
+}
diff --git a/modules/desktop/status-bar/polybar/modules/date.nix b/modules/desktop/status-bar/polybar/modules/date.nix
new file mode 100644
index 0000000..11a5934
--- /dev/null
+++ b/modules/desktop/status-bar/polybar/modules/date.nix
@@ -0,0 +1,10 @@
+config:
+
+with config.scheme.withHashtag;
+{
+ type = "internal/date";
+ interval = 60;
+ date = "%d/%m/%Y";
+ label = "%date%";
+ format-prefix = "%{F${base0B}} %{F-}";
+}
diff --git a/modules/desktop/status-bar/polybar/modules/kernel-version.nix b/modules/desktop/status-bar/polybar/modules/kernel-version.nix
new file mode 100644
index 0000000..a900264
--- /dev/null
+++ b/modules/desktop/status-bar/polybar/modules/kernel-version.nix
@@ -0,0 +1,10 @@
+config:
+
+with config.scheme.withHashtag;
+{
+ type = "custom/script";
+ exec = "uname -r";
+ interval = 1024;
+ format-prefix = "%{F${base03}} %{F-}";
+ label = "%output%";
+}
diff --git a/modules/desktop/status-bar/polybar/modules/memory.nix b/modules/desktop/status-bar/polybar/modules/memory.nix
new file mode 100644
index 0000000..1aff8a3
--- /dev/null
+++ b/modules/desktop/status-bar/polybar/modules/memory.nix
@@ -0,0 +1,9 @@
+config:
+
+with config.scheme.withHashtag;
+{
+ type = "internal/memory";
+ interval = 2;
+ format-prefix = "%{F${base0A}} %{F-}";
+ label = "%percentage_used%%";
+}
diff --git a/modules/desktop/status-bar/polybar/modules/time.nix b/modules/desktop/status-bar/polybar/modules/time.nix
new file mode 100644
index 0000000..e4c7cbe
--- /dev/null
+++ b/modules/desktop/status-bar/polybar/modules/time.nix
@@ -0,0 +1,10 @@
+config:
+
+with config.scheme.withHashtag;
+{
+ type = "internal/date";
+ interval = 30;
+ time = "%H:%M";
+ label = "%time%";
+ format-prefix = "%{F${base0C}} %{F-}";
+}
diff --git a/modules/desktop/status-bar/polybar/modules/xwindow.nix b/modules/desktop/status-bar/polybar/modules/xwindow.nix
new file mode 100644
index 0000000..23245ba
--- /dev/null
+++ b/modules/desktop/status-bar/polybar/modules/xwindow.nix
@@ -0,0 +1,7 @@
+config:
+
+with config.scheme.withHashtag;
+{
+ type = "internal/xwindow";
+ label = "%title:0:30:...%";
+}
diff --git a/modules/desktop/terminal/alacritty/default.nix b/modules/desktop/terminal/alacritty/default.nix
new file mode 100644
index 0000000..0fe56e0
--- /dev/null
+++ b/modules/desktop/terminal/alacritty/default.nix
@@ -0,0 +1,78 @@
+{ pkgs, config, lib, ... }:
+
+{
+ options = {
+ alacritty.enable = lib.mkEnableOption "Enables alacritty.";
+ };
+
+ config = lib.mkIf config.alacritty.enable {
+ programs.alacritty.enable = true;
+
+ programs.alacritty.settings = {
+ window = {
+ opacity = 1.0;
+ padding = {
+ x = 4;
+ y = 0;
+ };
+ decorations = "full";
+ };
+
+ font = {
+ normal = {
+ family = "Fira Code Nerd Font";
+ style = "Retina";
+ };
+ bold = {
+ family = "Fira Code Nerd Font";
+ style = "Bold";
+ };
+ italic = {
+ family = "Fira Code Nerd Font";
+ };
+ size = 16.0;
+ };
+
+ colors = with config.scheme; {
+ primary = {
+ background = "0x${base00}";
+ foreground = "0x${base05}";
+ };
+ normal = {
+ black = "0x${base00}";
+ red = "0x${base08}";
+ green = "0x${base0B}";
+ yellow = "0x${base0A}";
+ blue = "0x${base0D}";
+ magenta = "0x${base0E}";
+ cyan = "0x${base0C}";
+ white = "0x${base05}";
+ };
+ bright = {
+ black = "0x${base03}";
+ red = "0x${base08}";
+ green = "0x${base0B}";
+ yellow = "0x${base0A}";
+ blue = "0x${base0D}";
+ magenta = "0x${base0E}";
+ cyan = "0x${base0C}";
+ white = "0x${base07}";
+ };
+ dim = {
+ black = "0x${base01}";
+ red = "0x${base08}";
+ green = "0x${base0B}";
+ yellow = "0x${base0A}";
+ blue = "0x${base0D}";
+ magenta = "0x${base0E}";
+ cyan = "0x${base0C}";
+ white = "0x${base04}";
+ };
+ };
+
+ shell = {
+ program = "${pkgs.zsh}/bin/zsh";
+ };
+ };
+ };
+}
diff --git a/modules/desktop/terminal/default.nix b/modules/desktop/terminal/default.nix
new file mode 100644
index 0000000..6a0cfc8
--- /dev/null
+++ b/modules/desktop/terminal/default.nix
@@ -0,0 +1,7 @@
+{ lib, ... }:
+
+{
+ imports = [
+ ./alacritty
+ ];
+}
diff --git a/modules/desktop/window-manager/bspwm/bspwmrc b/modules/desktop/window-manager/bspwm/bspwmrc
new file mode 100644
index 0000000..8a3a35a
--- /dev/null
+++ b/modules/desktop/window-manager/bspwm/bspwmrc
@@ -0,0 +1,3 @@
+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/desktop/window-manager/bspwm/default.nix b/modules/desktop/window-manager/bspwm/default.nix
new file mode 100644
index 0000000..643d78b
--- /dev/null
+++ b/modules/desktop/window-manager/bspwm/default.nix
@@ -0,0 +1,38 @@
+{ config, lib, ... }:
+
+{
+ options = {
+ bspwm.enable = lib.mkEnableOption "Enables bspwm.";
+ };
+
+ config = lib.mkIf config.bspwm.enable {
+ xsession.windowManager.bspwm.enable = true;
+
+ xsession.windowManager.bspwm.settings = with config.scheme.withHashtag; {
+ window_gap = 5;
+ 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 = {
+ "popup" = {
+ state = "floating";
+ sticky = true;
+ };
+ };
+
+ xsession.windowManager.bspwm.extraConfig = builtins.readFile ./bspwmrc;
+ };
+}
diff --git a/modules/desktop/window-manager/default.nix b/modules/desktop/window-manager/default.nix
new file mode 100644
index 0000000..6e9b9f8
--- /dev/null
+++ b/modules/desktop/window-manager/default.nix
@@ -0,0 +1,8 @@
+{ lib, ... }:
+
+{
+ imports = [
+ ./bspwm
+ ./sxhkd
+ ];
+}
diff --git a/modules/desktop/window-manager/sxhkd/default.nix b/modules/desktop/window-manager/sxhkd/default.nix
new file mode 100644
index 0000000..29261b9
--- /dev/null
+++ b/modules/desktop/window-manager/sxhkd/default.nix
@@ -0,0 +1,79 @@
+{ pkgs, config, lib, ... }:
+
+{
+ options = {
+ sxhkd.enable = lib.mkEnableOption "Enables sxhkd.";
+ };
+
+ config = lib.mkIf config.sxhkd.enable {
+ services.sxhkd.enable = true;
+
+ services.sxhkd.keybindings =
+ let
+ modKey = "alt";
+ createKeybinding = keybinding: description: "# ${description}\n${modKey} + ${keybinding}";
+ in {
+ ${(createKeybinding
+ "s"
+ "Show keybindings.")}
+ = pkgs.writeShellScript
+ "show-keybindings.sh"
+ (builtins.readFile ./scripts/show-keybindings.sh);
+
+ ${(createKeybinding
+ "r"
+ "Launch rofi.")}
+ = "rofi -show run";
+
+ ${(createKeybinding
+ "t"
+ "Launch terminal.")}
+ = "alacritty";
+
+ ${(createKeybinding
+ "f"
+ "Launch File Explorer.")}
+ = "alacritty -t 'File Explorer' --class 'popup' -e lf";
+
+ ${(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; \
+ bspc node @parent/first -z right -20 0, \
+ bspc node @parent/second -z top 0 +20; \
+ bspc node @parent/first -z bottom 0 +20, \
+ bspc node @parent/first -z bottom 0 -20; \
+ bspc node @parent/second -z top 0 -20, \
+ bspc node @parent/first -z right +20 0; \
+ bspc node @parent/second -z left +20 0}
+ '';
+ };
+ };
+}
diff --git a/modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh b/modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh
new file mode 100644
index 0000000..db7863d
--- /dev/null
+++ b/modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+SXHKD_CONFIG="$HOME/.config/sxhkd/sxhkdrc"
+
+awk '
+ /^#/ {
+ desc = substr($0, 3)
+ }
+ /^[[:alnum:]]/ {
+ cmd = $0
+ getline
+ print cmd " : " desc
+ }
+' "$SXHKD_CONFIG" | rofi -dmenu -i -p "Keybindings"
diff --git a/modules/desktop/xresources/default.nix b/modules/desktop/xresources/default.nix
new file mode 100644
index 0000000..65eb812
--- /dev/null
+++ b/modules/desktop/xresources/default.nix
@@ -0,0 +1,7 @@
+{ lib, ... }:
+
+{
+ imports = [
+ ./xinit
+ ];
+}
diff --git a/modules/desktop/xresources/xinit/default.nix b/modules/desktop/xresources/xinit/default.nix
new file mode 100644
index 0000000..f5069fa
--- /dev/null
+++ b/modules/desktop/xresources/xinit/default.nix
@@ -0,0 +1,14 @@
+{ lib, config, ... }:
+
+{
+ options = {
+ xinit.enable = lib.mkEnableOption "Enables xinit.";
+ };
+
+ config = lib.mkIf config.xinit.enable {
+ home.file.".xinitrc" = {
+ source = ./xinitrc;
+ executable = true;
+ };
+ };
+}
diff --git a/modules/desktop/xresources/xinit/xinitrc b/modules/desktop/xresources/xinit/xinitrc
new file mode 100644
index 0000000..2ac4486
--- /dev/null
+++ b/modules/desktop/xresources/xinit/xinitrc
@@ -0,0 +1,4 @@
+#!/bin/sh
+polybar main &
+sxhkd &
+exec bspwm