From e9131f297478c661a3f56aae7f4daf5d8f018128 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 28 Jul 2024 20:00:59 -0400 Subject: [PATCH] thelio76: split more out --- config/apps/bash.nix | 18 ++ config/apps/git.nix | 12 + config/apps/kitty.nix | 22 ++ config/apps/mpv.nix | 11 + config/modules/bspwm/bspwm.nix | 24 ++ config/modules/bspwm/default.nix | 21 ++ config/modules/bspwm/picom.nix | 21 ++ config/modules/bspwm/polybar.nix | 180 +++++++++++++++ config/modules/bspwm/sxhkd.nix | 83 +++++++ config/users/alex/default.nix | 385 +------------------------------ 10 files changed, 403 insertions(+), 374 deletions(-) create mode 100644 config/apps/bash.nix create mode 100644 config/apps/git.nix create mode 100644 config/apps/kitty.nix create mode 100644 config/apps/mpv.nix create mode 100644 config/modules/bspwm/bspwm.nix create mode 100644 config/modules/bspwm/default.nix create mode 100644 config/modules/bspwm/picom.nix create mode 100644 config/modules/bspwm/polybar.nix create mode 100644 config/modules/bspwm/sxhkd.nix diff --git a/config/apps/bash.nix b/config/apps/bash.nix new file mode 100644 index 0000000..b0980f0 --- /dev/null +++ b/config/apps/bash.nix @@ -0,0 +1,18 @@ +{ ... }: +{ + programs.bash = { + enable = true; + bashrcExtra = '' + function nxr () { + set -u + local pkg="$1" + shift + nix-shell -p "$pkg" --run "$pkg $@" + set +u + } + ''; + shellAliases = { + "git-override" = "git add . && git commit --amend --no-edit && git push --force-with-lease"; + }; + }; +} diff --git a/config/apps/git.nix b/config/apps/git.nix new file mode 100644 index 0000000..575cf01 --- /dev/null +++ b/config/apps/git.nix @@ -0,0 +1,12 @@ +{ user, ... }: +{ + programs.git = { + enable = true; + userEmail = "alexmat2on@protonmail.com"; + userName = user; + ignores = [ "*~" ]; + extraConfig = { + init.defaultBranch = "main"; + }; + }; +} diff --git a/config/apps/kitty.nix b/config/apps/kitty.nix new file mode 100644 index 0000000..c9738c7 --- /dev/null +++ b/config/apps/kitty.nix @@ -0,0 +1,22 @@ +{ pkgs, ... }: +{ + programs.kitty = { + enable = true; + # TODO figure out how to get atau-nixpkgs working from the flake with different systems + # background_image ${atau-nixpkgs.atau-wallpapers}/share/backgrounds/atau-wallpapers/aos1.png + extraConfig = '' + background_tint 0.2 + background_image_layout centered + + modify_font cell_width 110% + + window_border_width 1 + window_margin_width 10 + window_padding_width 2 + ''; + theme = "Rosé Pine Dawn"; + font.package = pkgs.victor-mono; + font.name = "Victor Mono"; + font.size = 12; + }; +} diff --git a/config/apps/mpv.nix b/config/apps/mpv.nix new file mode 100644 index 0000000..9eb6ea6 --- /dev/null +++ b/config/apps/mpv.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: +{ + programs.mpv = { + enable = true; + scriptOpts = { + "ytdl_hook" = { + "ytdl_path" = "${pkgs.yt-dlp}/bin/yt-dlp"; + }; + }; + }; +} diff --git a/config/modules/bspwm/bspwm.nix b/config/modules/bspwm/bspwm.nix new file mode 100644 index 0000000..408dac4 --- /dev/null +++ b/config/modules/bspwm/bspwm.nix @@ -0,0 +1,24 @@ +{ pkgs, ... }: +{ + xsession.windowManager.bspwm = { + enable = true; + settings = { + border_width = 10; + focus_follows_pointer = true; + }; + extraConfig = '' + bspc monitor DP-2 -d I II III IV V + bspc monitor HDMI-1 -d VI VII VIII IX X + + # Set mouse 1 to move floating windows: + bspc config pointer_action1 move + + # Mouse 2 button resizes the window by side: + bspc config pointer_action2 resize_side + + # Mouse 3 button (right mouse) resize by corner: + bspc config pointer_action2 resize_corner + ''; + startupPrograms = [ "picom" "polybar primary" "polybar secondary" ]; + }; +} diff --git a/config/modules/bspwm/default.nix b/config/modules/bspwm/default.nix new file mode 100644 index 0000000..68d40a8 --- /dev/null +++ b/config/modules/bspwm/default.nix @@ -0,0 +1,21 @@ +{ pkgs, ... }: +{ + # WM/DE config + gtk = { + enable = true; + font.name = "Victor Mono SemiBold 12"; + theme = { + name = "SolArc-Dark"; + package = pkgs.solarc-gtk-theme; + }; + }; + + xsession.enable = true; + + imports = [ + ./bspwm.nix + ./sxhkd.nix + ./picom.nix + ./polybar.nix + ]; +} diff --git a/config/modules/bspwm/picom.nix b/config/modules/bspwm/picom.nix new file mode 100644 index 0000000..4eab83d --- /dev/null +++ b/config/modules/bspwm/picom.nix @@ -0,0 +1,21 @@ +{ ... }: +{ + services.picom = { + enable = true; + backend = "glx"; + + activeOpacity = 1; + inactiveOpacity = 0.75; + shadow = true; + vSync = true; + + settings = { + blur = { + method = "gaussian"; + size = 50; + deviation = 10.0; + }; + corner-radius = 15; + }; + }; +} diff --git a/config/modules/bspwm/polybar.nix b/config/modules/bspwm/polybar.nix new file mode 100644 index 0000000..03a4096 --- /dev/null +++ b/config/modules/bspwm/polybar.nix @@ -0,0 +1,180 @@ +{ pkgs, ... }: +{ + services.polybar = { + enable = true; + script = ""; # required but we start polybar via bspwm, so dont start it here. + config = rec { + colors = { + background = "#282A2E"; + # background = "#ff00ff"; + background-alt = "#373B41"; + foreground = "#C5C8C6"; + primary = "#F0C674"; + secondary = "#8ABEB7"; + alert = "#A54242"; + disabled = "#707880"; + }; + + common-bar = { + width = "100%"; + height = "24pt"; + radius = 10; + + #;dpi = 96 + + background = colors.background; + foreground = colors.foreground; + line-size = "3pt"; + + border-size = "4pt"; + border-color = "#00000000"; + + padding-left = 0; + padding-right = 1; + + module-margin = 1; + + separator = "|"; + separator-foreground = colors.disabled; + + font-0 = "monospace;2"; + wm-restack = "bspwm"; + + cursor-click = "pointer"; + cursor-scroll = "ns-resize"; + + enable-ipc = true; + }; + + "bar/primary" = common-bar // { + monitor = "DP-2"; + modules-left = "xworkspaces xwindow"; + modules-right = "filesystem memory cpu wlan date"; + + }; + + "bar/secondary" = common-bar // { + monitor = "HDMI-1"; + modules-left = "xworkspaces"; + modules-center = "date"; + }; + + "module/xworkspaces" = { + type = "internal/xworkspaces"; + + group-by-monitor = true; + pin-workspaces = true; + + label-active = "%name%"; + label-active-background = colors.background-alt; + label-active-underline = colors.primary; + label-active-padding = 1; + + label-occupied = "%name%"; + label-occupied-padding = 1; + + label-urgent = "%name%"; + label-urgent-background = colors.alert; + label-urgent-padding = 1; + + label-empty = "%name%"; + label-empty-foreground = colors.disabled; + label-empty-padding = 1; + }; + }; + extraConfig = '' + [module/systray] + type = internal/tray + + format-margin = 8pt + tray-spacing = 16pt + + [module/xwindow] + type = internal/xwindow + label = %title:0:60:...% + + [module/filesystem] + type = internal/fs + interval = 25 + + mount-0 = / + + label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%% + + label-unmounted = %mountpoint% not mounted + label-unmounted-foreground = ''${colors.disabled} + + [module/pulseaudio] + type = internal/pulseaudio + + format-volume-prefix = "VOL " + format-volume-prefix-foreground = ''${colors.primary} + format-volume = + + label-volume = %percentage%% + + label-muted = muted + label-muted-foreground = ''${colors.disabled} + + [module/xkeyboard] + type = internal/xkeyboard + blacklist-0 = num lock + + label-layout = %layout% + label-layout-foreground = ''${colors.primary} + + label-indicator-padding = 2 + label-indicator-margin = 1 + label-indicator-foreground = ''${colors.background} + label-indicator-background = ''${colors.secondary} + + [module/memory] + type = internal/memory + interval = 2 + format-prefix = "RAM " + format-prefix-foreground = ''${colors.primary} + label = %percentage_used:2%% + + [module/cpu] + type = internal/cpu + interval = 2 + format-prefix = "CPU " + format-prefix-foreground = ''${colors.primary} + label = %percentage:2%% + + [network-base] + type = internal/network + interval = 5 + format-connected = + format-disconnected = + label-disconnected = %{F#F0C674}%ifname%%{F#707880} disconnected + + [module/wlan] + inherit = network-base + interface-type = wireless + label-connected = %{F#F0C674}%ifname%%{F-} %essid% %local_ip% + + [module/eth] + inherit = network-base + interface-type = wired + label-connected = %{F#F0C674}%ifname%%{F-} %local_ip% + + [module/date] + type = internal/date + interval = 1 + + date = %l:%M%P + date-alt = %Y-%m-%d %H:%M:%S + + label = %date% + label-foreground = ''${colors.primary} + + [settings] + screenchange-reload = true + pseudo-transparency = true + + ; vim:ft=dosini + + ''; + }; +} diff --git a/config/modules/bspwm/sxhkd.nix b/config/modules/bspwm/sxhkd.nix new file mode 100644 index 0000000..a751a0a --- /dev/null +++ b/config/modules/bspwm/sxhkd.nix @@ -0,0 +1,83 @@ +{ pkgs, ... }: +{ + services.sxhkd = { + enable = true; + keybindings = { + "super + Return" = "kitty"; + + # + # bspwm hotkeys + # + + # quit/restart bspwm + "super + alt + {q,r}" = + "bspc {quit,wm -r}"; + + # close and kill + "super + {_,shift + }w" = + "bspc node -{c,k}"; + + # + # state/flags + # + + # set the window state + "super + {t,shift + t,s,f}" = + "bspc node -t {tiled,pseudo_tiled,floating,fullscreen}"; + + # set the node flags + "super + ctrl + {m,x,y,z}" = + "bspc node -g {marked,locked,sticky,private}"; + + # + # focus/swap + # + + # focus the node in the given direction + "super + {_,shift + }{h,j,k,l}" = + "bspc node -{f,s} {west,south,north,east}"; + + # focus the node for the given path jump + "super + {p,b,comma,period}" = + "bspc node -f @{parent,brother,first,second}"; + # focus the next/previous window in the current desktop + "super + {_,shift + }c" = "bspc node -f {next,prev}.local.!hidden.window"; + + # focus the next/previous desktop in the current monitor + "super + bracket{left,right}" = + "bspc desktop -f {prev,next}.local"; + + # focus the last node/desktop + "super + {grave,Tab}" = "bspc {node,desktop} -f last"; + + # focus the older or newer node in the focus history + "super + {o,i}" = '' + bspc wm -h off; \ + bspc node {older,newer} -f; \ + bspc wm -h on + ''; + + # focus or send to the given desktop + "super + {_,shift + }{1-9,0}" = + "bspc {desktop -f,node -d} '^{1-9,10}'"; + + # + # move/resize + # + + # expand a window by moving one of its side outward + "super + alt + {h,j,k,l}" = + " bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}"; + + # contract a window by moving one of its side inward + "super + alt + shift + {h,j,k,l}" = + "bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}"; + + # move a floating window + "super + {Left,Down,Up,Right}" = + " bspc node -v {-20 0,0 20,0 -20,20 0}"; + + "Super_L; @Super_L" = "rofi -show drun"; + }; + }; +} diff --git a/config/users/alex/default.nix b/config/users/alex/default.nix index 956f984..391d83d 100644 --- a/config/users/alex/default.nix +++ b/config/users/alex/default.nix @@ -6,6 +6,17 @@ home.username = user; home.homeDirectory = "/home/${user}"; + imports = [ + ../../modules/bspwm + + ../../apps/bash.nix + ../../apps/firefox.nix + ../../apps/git.nix + ../../apps/kitty.nix + ../../apps/mpv.nix + ../../apps/vscode.nix + ]; + # Packages that should be installed to the user profile. home.packages = with pkgs; [ aseprite @@ -51,380 +62,6 @@ yt-dlp ]; - imports = [ - ../../apps/firefox.nix - ../../apps/vscode.nix - ]; - - # WM/DE config - gtk = { - enable = true; - font.name = "Victor Mono SemiBold 12"; - theme = { - name = "SolArc-Dark"; - package = pkgs.solarc-gtk-theme; - }; - }; - - xsession = { - enable = true; - windowManager.bspwm = { - enable = true; - settings = { - border_width = 10; - focus_follows_pointer = true; - }; - extraConfig = '' - bspc monitor DP-2 -d I II III IV V - bspc monitor HDMI-1 -d VI VII VIII IX X - - # Set mouse 1 to move floating windows: - bspc config pointer_action1 move - - # Mouse 2 button resizes the window by side: - bspc config pointer_action2 resize_side - - # Mouse 3 button (right mouse) resize by corner: - bspc config pointer_action2 resize_corner - ''; - startupPrograms = [ "picom" "polybar primary" "polybar secondary" ]; - }; - }; - - services.sxhkd = - { - enable = true; - keybindings = { - "super + Return" = "kitty"; - - # - # bspwm hotkeys - # - - # quit/restart bspwm - "super + alt + {q,r}" = - "bspc {quit,wm -r}"; - - # close and kill - "super + {_,shift + }w" = - "bspc node -{c,k}"; - - # - # state/flags - # - - # set the window state - "super + {t,shift + t,s,f}" = - "bspc node -t {tiled,pseudo_tiled,floating,fullscreen}"; - - # set the node flags - "super + ctrl + {m,x,y,z}" = - "bspc node -g {marked,locked,sticky,private}"; - - # - # focus/swap - # - - # focus the node in the given direction - "super + {_,shift + }{h,j,k,l}" = - "bspc node -{f,s} {west,south,north,east}"; - - # focus the node for the given path jump - "super + {p,b,comma,period}" = - "bspc node -f @{parent,brother,first,second}"; - # focus the next/previous window in the current desktop - "super + {_,shift + }c" = "bspc node -f {next,prev}.local.!hidden.window"; - - # focus the next/previous desktop in the current monitor - "super + bracket{left,right}" = - "bspc desktop -f {prev,next}.local"; - - # focus the last node/desktop - "super + {grave,Tab}" = "bspc {node,desktop} -f last"; - - # focus the older or newer node in the focus history - "super + {o,i}" = '' - bspc wm -h off; \ - bspc node {older,newer} -f; \ - bspc wm -h on - ''; - - # focus or send to the given desktop - "super + {_,shift + }{1-9,0}" = - "bspc {desktop -f,node -d} '^{1-9,10}'"; - - # - # move/resize - # - - # expand a window by moving one of its side outward - "super + alt + {h,j,k,l}" = - " bspc node -z {left -20 0,bottom 0 20,top 0 -20,right 20 0}"; - - # contract a window by moving one of its side inward - "super + alt + shift + {h,j,k,l}" = - "bspc node -z {right -20 0,top 0 20,bottom 0 -20,left 20 0}"; - - # move a floating window - "super + {Left,Down,Up,Right}" = - " bspc node -v {-20 0,0 20,0 -20,20 0}"; - - "Super_L; @Super_L" = "rofi -show drun"; - }; - }; - - services.polybar = { - enable = true; - script = ""; # required but we start polybar via bspwm, so dont start it here. - config = rec { - colors = { - background = "#282A2E"; - # background = "#ff00ff"; - background-alt = "#373B41"; - foreground = "#C5C8C6"; - primary = "#F0C674"; - secondary = "#8ABEB7"; - alert = "#A54242"; - disabled = "#707880"; - }; - - common-bar = { - width = "100%"; - height = "24pt"; - radius = 10; - - #;dpi = 96 - - background = colors.background; - foreground = colors.foreground; - line-size = "3pt"; - - border-size = "4pt"; - border-color = "#00000000"; - - padding-left = 0; - padding-right = 1; - - module-margin = 1; - - separator = "|"; - separator-foreground = colors.disabled; - - font-0 = "monospace;2"; - wm-restack = "bspwm"; - - cursor-click = "pointer"; - cursor-scroll = "ns-resize"; - - enable-ipc = true; - }; - - "bar/primary" = common-bar // { - monitor = "DP-2"; - modules-left = "xworkspaces xwindow"; - modules-right = "filesystem memory cpu wlan date"; - - }; - - "bar/secondary" = common-bar // { - monitor = "HDMI-1"; - modules-left = "xworkspaces"; - modules-center = "date"; - }; - - "module/xworkspaces" = { - type = "internal/xworkspaces"; - - group-by-monitor = true; - pin-workspaces = true; - - label-active = "%name%"; - label-active-background = colors.background-alt; - label-active-underline = colors.primary; - label-active-padding = 1; - - label-occupied = "%name%"; - label-occupied-padding = 1; - - label-urgent = "%name%"; - label-urgent-background = colors.alert; - label-urgent-padding = 1; - - label-empty = "%name%"; - label-empty-foreground = colors.disabled; - label-empty-padding = 1; - }; - }; - extraConfig = '' - [module/systray] - type = internal/tray - - format-margin = 8pt - tray-spacing = 16pt - - [module/xwindow] - type = internal/xwindow - label = %title:0:60:...% - - [module/filesystem] - type = internal/fs - interval = 25 - - mount-0 = / - - label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%% - - label-unmounted = %mountpoint% not mounted - label-unmounted-foreground = ''${colors.disabled} - - [module/pulseaudio] - type = internal/pulseaudio - - format-volume-prefix = "VOL " - format-volume-prefix-foreground = ''${colors.primary} - format-volume = - - label-volume = %percentage%% - - label-muted = muted - label-muted-foreground = ''${colors.disabled} - - [module/xkeyboard] - type = internal/xkeyboard - blacklist-0 = num lock - - label-layout = %layout% - label-layout-foreground = ''${colors.primary} - - label-indicator-padding = 2 - label-indicator-margin = 1 - label-indicator-foreground = ''${colors.background} - label-indicator-background = ''${colors.secondary} - - [module/memory] - type = internal/memory - interval = 2 - format-prefix = "RAM " - format-prefix-foreground = ''${colors.primary} - label = %percentage_used:2%% - - [module/cpu] - type = internal/cpu - interval = 2 - format-prefix = "CPU " - format-prefix-foreground = ''${colors.primary} - label = %percentage:2%% - - [network-base] - type = internal/network - interval = 5 - format-connected = - format-disconnected = - label-disconnected = %{F#F0C674}%ifname%%{F#707880} disconnected - - [module/wlan] - inherit = network-base - interface-type = wireless - label-connected = %{F#F0C674}%ifname%%{F-} %essid% %local_ip% - - [module/eth] - inherit = network-base - interface-type = wired - label-connected = %{F#F0C674}%ifname%%{F-} %local_ip% - - [module/date] - type = internal/date - interval = 1 - - date = %l:%M%P - date-alt = %Y-%m-%d %H:%M:%S - - label = %date% - label-foreground = ''${colors.primary} - - [settings] - screenchange-reload = true - pseudo-transparency = true - - ; vim:ft=dosini - - ''; - }; - - services.picom = { - enable = true; - backend = "glx"; - - activeOpacity = 1; - inactiveOpacity = 0.75; - shadow = true; - vSync = true; - - settings = { - blur = { - method = "gaussian"; - size = 50; - deviation = 10.0; - }; - corner-radius = 15; - }; - }; - - # User software configurations - programs = { - bash = { - enable = true; - bashrcExtra = '' - function nxr () { - set -u - local pkg="$1" - shift - nix-shell -p "$pkg" --run "$pkg $@" - set +u - } - ''; - shellAliases = { - "git-override" = "git add . && git commit --amend --no-edit && git push --force-with-lease"; - }; - }; - git = { - enable = true; - userEmail = "alexmat2on@protonmail.com"; - userName = "alex"; - ignores = [ "*~" ]; - extraConfig = { - init.defaultBranch = "main"; - }; - }; - kitty = { - enable = true; - # TODO figure out how to get atau-nixpkgs working from the flake with different systems - # background_image ${atau-nixpkgs.atau-wallpapers}/share/backgrounds/atau-wallpapers/aos1.png - extraConfig = '' - background_tint 0.2 - background_image_layout centered - - modify_font cell_width 110% - - window_border_width 1 - window_margin_width 10 - window_padding_width 2 - ''; - theme = "Rosé Pine Dawn"; - font.package = pkgs.victor-mono; - font.name = "Victor Mono"; - font.size = 12; - }; - mpv = { - enable = true; - scriptOpts = { - "ytdl_hook" = { - "ytdl_path" = "${pkgs.yt-dlp}/bin/yt-dlp"; - }; - }; - }; - }; - # This value determines the Home Manager release that your # configuration is compatible with. This helps avoid breakage # when a new Home Manager release introduces backwards