diff options
Diffstat (limited to 'modules/desktop')
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 |
