diff --git a/users/profiles/desktop/Xresources b/users/profiles/desktop/Xresources
new file mode 100644
index 00000000..c0c48f61
--- /dev/null
+++ b/users/profiles/desktop/Xresources
@@ -0,0 +1,80 @@
+!! Colors
+#define blk #1E2029
+#define bblk #282a36
+#define red #ffb86c
+#define bred #de935f
+#define grn #50fa7b
+#define bgrn #0189cc
+#define ylw #f0c674
+#define bylw #f9a03f
+#define blu #61bfff
+#define bblu #8be9fd
+#define mag #bd93f9
+#define bmag #ff79c6
+#define cyn #8be9fd
+#define bcyn #0189cc
+#define wht #f8f8f2
+#define bwht #e2e2dc
+#define bg blk
+#define fg wht
+
+*.foreground: fg
+*.background: bg
+*.cursorColor: mag
+
+*.color0: blk
+*.color8: bblk
+*.color1: red
+*.color9: bred
+*.color2: grn
+*.color10: bgrn
+*.color3: ylw
+*.color11: bylw
+*.color4: blu
+*.color12: bblu
+*.color5: mag
+*.color13: bmag
+*.color6: cyn
+*.color14: bcyn
+*.color7: wht
+*.color15: bwht
+
+! greys
+*.color234: #1E2029
+*.color235: #282a36
+*.color236: #373844
+*.color237: #44475a
+*.color239: #565761
+*.color240: #6272a4
+*.color241: #b6b6b2
+
+
+!! general
+st.scratch.font: JetBrainsMono:pixelsize=16
+
+
+!! xst
+st.font: JetBrainsMono:pixelsize=12
+st.borderpx: 10
+
+
+!! urxvt
+URxvt*depth: 32
+URxvt*.background: blk
+URxvt*.borderless: 1
+URxvt*.buffered: true
+URxvt*.cursorBlink: true
+URxvt*.font: xft:Fira Code:pixelsize=12
+URxvt*.internalBorder: 10
+URxvt*.letterSpace: 0
+URxvt*.lineSpace: 0
+URxvt*.loginShell: false
+URxvt*.matcher.button: 1
+URxvt*.matcher.rend.0: Uline Bold fg5
+URxvt*.saveLines: 5000
+URxvt*.scrollBar: false
+URxvt*.underlineColor: grey
+URxvt.clipboard.autocopy: true
+URxvt.iso14755: false
+URxvt.iso14755_52: false
+URxvt.perl-ext-common: default,matcher
diff --git a/users/profiles/desktop/bspwmrc b/users/profiles/desktop/bspwmrc
new file mode 100755
index 00000000..b942f75a
--- /dev/null
+++ b/users/profiles/desktop/bspwmrc
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+# case $HOSTNAME in
+# kuro) export LAN=eno1 ;;
+# shiro) export LAN=wlp3s0 ;;
+# esac
+
+export MONITOR=$(xrandr -q | grep primary | cut -d' ' -f1)
+export MONITORS=( $(xrandr -q | grep ' connected' | cut -d' ' -f1) )
+MONITOR=${MONITOR:-${MONITORS[0]}}
+
+# Only have workspaces for primary monitor
+bspc monitor $MONITOR -d {1,2,3,4,5}
+
+bspc config remove_disabled_monitors true
+bspc config remove_unplugged_monitors true
+
+
+# Rules
+bspc rule -r '*'
+
+bspc rule -a Pinentry state=floating center=on
+bspc rule -a Emacs split_ratio=0.28 state=tiled
+bspc rule -a Firefox split_ratio=0.32
+bspc rule -a feh state=fullscreen
+bspc rule -a 'Emacs:org*' state=floating
+bspc rule -a 'Emacs:scratch' state=floating
+bspc rule -a 'Emacs:emacs-everywhere' state=floating sticky=on
+bspc rule -a '*:scratch' state=floating sticky=on center=on border=off rectangle=1000x800+0+0
+
+#
+for file in $XDG_CONFIG_HOME/bspwm/rc.d/*; do
+ source "$file"
+done
diff --git a/users/profiles/desktop/default.nix b/users/profiles/desktop/default.nix
new file mode 100644
index 00000000..607efec8
--- /dev/null
+++ b/users/profiles/desktop/default.nix
@@ -0,0 +1,99 @@
+{
+ # Enable bspwm and sxhkd
+ xsession.windowManager.bspwm = {
+ enable = true;
+ extraConfig = ''
+ bspc config remove_disabled_monitors true
+ bspc config remove_unplugged_monitors true
+
+ bspc config borderless_monocle true
+ bspc config gapless_monocle true
+
+ bspc config border_width 1
+ bspc config window_gap 4
+
+ bspc config normal_border_color "#181a23"
+ bspc config active_border_color "#181a23"
+ bspc config focused_border_color "#bd93f9"
+ bspc config presel_feedback_color "#bd93f9"
+
+ # Extra padding for polybar
+ bspc config -m primary top_padding 34
+ bspc config -m primary bottom_padding 0
+
+ # Load polybar
+ for file in $XDG_CONFIG_HOME/bspwm/rc.d/*; do
+ source "$file"
+ done
+ '';
+ }
+ services.sxhkd.enable = true;
+
+ # Add gtk theme for Dracular and Paper
+ # Set wallpaper
+
+ # Install themes
+ user.packages = with pkgs; [
+ unstable.dracula-theme
+ paper-icon-theme
+ ];
+
+ # Font stuff
+ fonts = {
+ fonts = with pkgs; [
+ fire-code
+ hermit
+ hack
+ fire-code-symbols
+ siji
+ font-awesome-ttf
+ ];
+ fontconfig.defaultFonts = {
+ sansSerif = ["Hermit"];
+ monospace = ["Hermit"];
+ };
+ };
+
+ # Move required config files around
+ home.configFile = {
+ "bspwm/rc.d/polybar".source = ./run.sh;
+ "sxhkdrc".source = ./sxhkdrc;
+ "rofi/theme" = {
+ source = ./rofi;
+ recursive = true;
+ };
+ "polybar" = {
+ source = ./polybar;
+ recursive = true;
+ };
+ "dunst/dunstrc".source = ./dunstrc;
+ };
+
+ # Login screen
+ services.xserver.displayManager.lightdm.greeters.mini.extraConfig = ''
+ text-color = "#ff79c6"
+ password-background-color = "#1E2029"
+ window-color = "#181a23"
+ border-color = "#181a23"
+ '';
+
+ # Compositor
+ services.picom = {
+ fade = true;
+ fadeDelta = 1;
+ fadeSteps = [ 0.01 0.012 ];
+ shadow = true;
+ shadowOffsets = [ (-10) (-10) ];
+ shadowOpacity = 0.22;
+ # activeOpacity = "1.00";
+ # inactiveOpacity = "0.92";
+ settings = {
+ shadow-radius = 12;
+ # blur-background = true;
+ # blur-background-frame = true;
+ # blur-background-fixed = true;
+ blur-kern = "7x7box";
+ blur-strength = 320;
+ };
+ };
+}
diff --git a/users/profiles/desktop/dunstrc b/users/profiles/desktop/dunstrc
new file mode 100644
index 00000000..8fcfe622
--- /dev/null
+++ b/users/profiles/desktop/dunstrc
@@ -0,0 +1,49 @@
+[global]
+alignment = left
+bounce_freq = 0
+browser = firefox -new-tab
+corner_radius = 2
+dmenu = rofi -dmenu -p dunst:
+follow = none
+font = Fira Sans 11
+format = "%s\n%b"
+frame_color = "#1a1c25"
+frame_width = 1
+# geometry [{width}]x{height}][+/-{x}+/-{y}]
+geometry = "440x15-26+26"
+history_length = 20
+horizontal_padding = 16
+icon_position = right
+idle_threshold = 120
+ignore_newline = no
+indicate_hidden = yes
+line_height = 0
+markup = full
+max_icon_size = 64
+monitor = 0
+padding = 20
+separator_color = auto
+separator_height = 4
+show_age_threshold = 60
+show_indicators = yes
+shrink = no
+sort = yes
+startup_notification = false
+sticky_history = yes
+transparency = 5
+word_wrap = yes
+
+[urgency_low]
+background = "#1E2029"
+foreground = "#bbc2cf"
+timeout = 8
+
+[urgency_normal]
+background = "#2a2d39"
+foreground = "#bbc2cf"
+timeout = 14
+
+[urgency_critical]
+background = "#cc6666"
+foreground = "#1E2029"
+timeout = 0
diff --git a/users/profiles/desktop/polybar.conf b/users/profiles/desktop/polybar.conf
new file mode 100644
index 00000000..6d89840e
--- /dev/null
+++ b/users/profiles/desktop/polybar.conf
@@ -0,0 +1,385 @@
+[colors]
+black = ${xrdb:color0}
+bblack = ${xrdb:color8}
+red = ${xrdb:color1}
+bred = ${xrdb:color9}
+green = ${xrdb:color2}
+bgreen = ${xrdb:color10}
+yellow = ${xrdb:color3}
+byellow = ${xrdb:color11}
+blue = ${xrdb:color4}
+bblue = ${xrdb:color12}
+magenta = ${xrdb:color5}
+bmagenta = ${xrdb:color13}
+cyan = ${xrdb:color6}
+bcyan = ${xrdb:color14}
+white = ${xrdb:color7}
+bwhite = ${xrdb:color15}
+
+bg = ${xrdb:background}
+fg = ${colors.magenta}
+bg-alt = #1E2029
+fg-alt = #373844
+bg-dark = #181a23
+
+alert = ${colors.yellow}
+accent = #604c7e
+
+
+[global/wm]
+margin-top = 0
+margin-bottom = 34
+
+[bar/main]
+monitor = ${env:MONITOR}
+monitor-strict = true
+enable-ipc = true
+wm-restack = bspwm
+# REQUIRED to move the window with hideit.sh
+override-redirect = true
+fixed-center = true
+
+background = ${colors.bg}
+foreground = ${colors.fg}
+
+width = 100%
+height = 34
+offset-x = 0
+offset-y = 0
+# bottom = true
+
+overline-size = 0
+overline-color = #f00
+underline-size = 0
+underline-color = #00f
+
+border-bottom-size = 0
+border-top-size = 1
+border-color = ${colors.bg-dark}
+
+padding-left = 2
+padding-right = 2
+module-margin-left = 0
+module-margin-right = 0
+
+font-0 = "Fira Code:pixelsize=9;2"
+font-1 = "Wuncon Siji:pixelsize=12;2"
+font-2 = "Siji:pixelsize=10;2"
+
+; modules-left = volume pad cpu memory pad pkg mail
+modules-left = pulseaudio pad cpu memory pad fs
+modules-center = bspwm
+modules-right = syncthing redshift wlan pad network-up pad network-down pad battery pad date
+
+;tray-position = center
+;tray-padding = 2
+;tray-transparent = true
+;tray-background = #0063ff
+
+[module/bspwm]
+type = internal/bspwm
+pin-workspaces = true
+enable-click = true
+
+# ws-icon-0 = 1;
+# ws-icon-1 = 2;
+# ws-icon-2 = 3;
+# ws-icon-3 = 4;
+# ws-icon-4 = 5;
+# ws-icon-5 = 6;
+ws-icon-default =
+
+format =
+label-padding = 1
+
+label-focused = %icon%
+label-focused-background = ${colors.bg-dark}
+label-focused-foreground = ${colors.fg}
+# label-focused-underline = ${colors.magenta}
+; label-focused-foreground = ${xrdb:color2}
+label-focused-padding = 1
+
+label-occupied = %icon%
+label-occupied-foreground = ${colors.accent}
+label-occupied-padding = 1
+
+; label-urgent = %icon%
+label-urgent-foreground = ${colors.alert}
+; label-urgent-background = ${colors.alert}
+label-urgent-padding = 1
+
+label-empty = %icon%
+label-empty-foreground = ${colors.fg-alt}
+label-empty-padding = 1
+
+[module/date]
+type = internal/date
+interval = 5
+
+label = %date% %time%
+date = %A, %h %d
+date-alt = %Y-%m-%d
+time = %I:%M %p
+time-alt = %H:%M:%S
+format-prefix = ""
+format-prefix-padding = 1
+; format-prefix-background = ${colors.bg-alt}
+format-prefix-foreground = ${colors.accent}
+; format-underline = ${xrdb:color4}
+
+[module/fs]
+type = internal/fs
+mount-0 = /
+mount-1 = /mnt/projects ; for desktops
+mount-2 = /home ; for laptop
+interval = 30
+
+; Available tags:
+; (default)
+;
+;
+;
+format-mounted = ""
+format-mounted-foreground = ${colors.accent}
+; Available tokens:
+; %mountpoint%
+; %type%
+; %fsname%
+; %percentage_free%
+; %percentage_used%
+; %total%
+; %free%
+; %used%
+; Default: %mountpoint% %percentage_free%%
+
+; Available tags:
+; (default)
+format-unmounted =
+label-unmounted =
+label-unmounted-foreground = ${colors.fg-alt}
+
+bar-used-indicator =
+bar-used-width = 8
+bar-used-foreground-0 = ${colors.fg}
+bar-used-foreground-1 = ${colors.fg}
+bar-used-foreground-2 = ${colors.yellow}
+bar-used-foreground-3 = ${colors.alert}
+bar-used-foreground-4 = ${colors.alert}
+bar-used-fill = |
+bar-used-empty = ¦
+bar-used-empty-foreground = ${colors.fg-alt}
+
+[module/xwindow]
+type = internal/xwindow
+label = %title:0:80:...%
+label-padding-left = 2
+
+; [module/mpd]
+; type = internal/mpd
+; host = /home/hlissner/.config/mpd/mpd.sock
+;
+; format-online =
+; format-padding = 5
+;
+; label-song-maxlen = 45
+; label-song-ellipsis = true
+;
+; icon-prev =
+; icon-seekb =
+; icon-stop =
+; icon-play =
+; icon-pause =
+; icon-next =
+; icon-seekf =
+;
+; icon-random =
+; icon-repeat =
+;
+; toggle-on-foreground = ${colors.fg}
+; toggle-off-foreground = #66
+
+[module/cpu]
+type = internal/cpu
+interval = 2
+format =
+format-prefix = ""
+format-foreground = ${colors.accent}
+; format-underline = #f90000
+; label = %percentage%%
+format-padding = 1
+
+bar-load-indicator =
+bar-load-width = 8
+bar-load-foreground-0 = ${colors.fg}
+bar-load-foreground-1 = ${colors.fg}
+bar-load-foreground-2 = ${colors.yellow}
+bar-load-foreground-3 = ${colors.alert}
+bar-load-foreground-4 = ${colors.alert}
+bar-load-fill = |
+bar-load-empty = ¦
+bar-load-empty-foreground = ${colors.fg-alt}
+
+[module/memory]
+type = internal/memory
+interval = 3
+format =
+format-prefix = ""
+format-prefix-foreground = ${colors.accent}
+; format-underline = #4bffdc
+; label = %percentage_used%%
+format-padding-left = 1
+
+; Only applies if is used
+bar-used-indicator =
+bar-used-width = 8
+bar-used-foreground-0 = ${colors.fg}
+bar-used-foreground-1 = ${colors.fg}
+bar-used-foreground-2 = ${colors.yellow}
+bar-used-foreground-3 = ${colors.alert}
+bar-used-foreground-4 = ${colors.alert}
+bar-used-fill = |
+bar-used-empty = ¦
+bar-used-empty-foreground = ${colors.fg-alt}
+
+[module/wlan]
+type = internal/network
+interface = ${env:WLP:wlp3s0}
+interval = 3.0
+
+format-connected =
+format-disconnected =
+format-disconnected-foreground =
+
+; label-connected =
+; label-disconnected = !
+; label-disconnected-foreground = ${colors.red}
+
+ramp-signal-0 =
+ramp-signal-0-foreground = ${colors.yellow}
+ramp-signal-1 =
+ramp-signal-1-foreground = ${colors.yellow}
+ramp-signal-2 =
+ramp-signal-2-foreground = ${colors.yellow}
+ramp-signal-3 =
+ramp-signal-3-foreground = ${colors.accent}
+ramp-signal-4 =
+ramp-signal-4-foreground = ${colors.fg}
+
+[module/network-up]
+type = internal/network
+interface = ${env:LAN:eno1}
+interval = 4.0
+label-connected = "%upspeed%"
+format-connected-prefix = " "
+format-connected-prefix-foreground = ${colors.accent}
+format-connected-foreground = ${colors.fg}
+format-connected-background =
+format-connected-underline =
+format-disconnected-prefix = " "
+format-disconnected-prefix-foreground = ${colors.alert}
+format-disconnected-foreground = ${colors.alert}
+
+[module/network-down]
+type = internal/network
+interface = ${env:LAN:eno1}
+interval = 4.0
+label-connected = "%downspeed%"
+format-connected-prefix = " "
+format-connected-prefix-foreground = ${colors.accent}
+format-connected-foreground = ${colors.fg}
+format-connected-background =
+format-connected-underline =
+format-disconnected-prefix = " "
+format-disconnected-prefix-foreground = ${colors.alert}
+format-disconnected-foreground = ${colors.alert}
+
+[module/pulseaudio]
+type = internal/pulseaudio
+
+; format-volume =
+format-volume =
+; label-volume = " "
+label-volume-foreground = ${colors.accent}
+
+; format-muted-prefix = " "
+format-muted-foreground = ${colors.alert}
+label-muted =
+
+bar-volume-width = 8
+# bar-volume-foreground-0 = ${colors.magenta}
+# bar-volume-foreground-1 = ${colors.magenta}
+# bar-volume-foreground-2 = ${colors.magenta}
+# bar-volume-foreground-3 = ${colors.magenta}
+# bar-volume-foreground-4 = ${colors.magenta}
+# bar-volume-foreground-5 = ${colors.magenta}
+# bar-volume-foreground-6 = ${colors.magenta}
+bar-volume-gradient = false
+bar-volume-indicator = |
+bar-volume-indicator-font = 1
+bar-volume-indicator-foreground = #ff
+bar-volume-fill = ─
+bar-volume-fill-font = 1
+bar-volume-empty = ─
+bar-volume-empty-font = 1
+bar-volume-empty-foreground = ${colors.fg-alt}
+
+; Only applies if is used
+ramp-volume-0 =
+ramp-volume-1 =
+ramp-volume-2 =
+
+[module/battery]
+type = internal/battery
+battery = BAT0
+adapter = ADP1
+full-at = 98
+
+format-charging =
+format-charging-underline = #ffb52a
+
+format-discharging =
+format-discharging-underline = ${self.format-charging-underline}
+
+format-full-prefix = " "
+format-full-prefix-foreground = ${colors.fg-alt}
+format-full-underline = ${self.format-charging-underline}
+
+ramp-capacity-0 =
+ramp-capacity-1 =
+ramp-capacity-2 =
+ramp-capacity-0-foreground = ${colors.red}
+ramp-capacity-1-foreground = #575864
+ramp-capacity-2-foreground = ${colors.fg-alt}
+
+animation-charging-0 =
+animation-charging-1 =
+animation-charging-2 =
+animation-charging-framerate = 1000
+animation-charging-foreground = ${colors.fg}
+
+
+;=====================================================
+; Custom scripts
+;=====================================================
+
+[module/pad]
+type = custom/text
+content = " "
+content-foreground = ${colors.fg-alt}
+
+[module/redshift]
+type = custom/script
+exec = ~/.config/polybar/modules/redshift
+exec-if = pgrep -x redshift
+interval = 60
+format-padding = 1
+
+[module/syncthing]
+type = custom/script
+exec = echo 1
+exec-if = systemctl is-active syncthing
+format = ""
+format-foreground = ${colors.fg}
+interval = 30
+
+; vim:ft=dosini
diff --git a/users/profiles/desktop/polybar/config b/users/profiles/desktop/polybar/config
new file mode 100644
index 00000000..6d89840e
--- /dev/null
+++ b/users/profiles/desktop/polybar/config
@@ -0,0 +1,385 @@
+[colors]
+black = ${xrdb:color0}
+bblack = ${xrdb:color8}
+red = ${xrdb:color1}
+bred = ${xrdb:color9}
+green = ${xrdb:color2}
+bgreen = ${xrdb:color10}
+yellow = ${xrdb:color3}
+byellow = ${xrdb:color11}
+blue = ${xrdb:color4}
+bblue = ${xrdb:color12}
+magenta = ${xrdb:color5}
+bmagenta = ${xrdb:color13}
+cyan = ${xrdb:color6}
+bcyan = ${xrdb:color14}
+white = ${xrdb:color7}
+bwhite = ${xrdb:color15}
+
+bg = ${xrdb:background}
+fg = ${colors.magenta}
+bg-alt = #1E2029
+fg-alt = #373844
+bg-dark = #181a23
+
+alert = ${colors.yellow}
+accent = #604c7e
+
+
+[global/wm]
+margin-top = 0
+margin-bottom = 34
+
+[bar/main]
+monitor = ${env:MONITOR}
+monitor-strict = true
+enable-ipc = true
+wm-restack = bspwm
+# REQUIRED to move the window with hideit.sh
+override-redirect = true
+fixed-center = true
+
+background = ${colors.bg}
+foreground = ${colors.fg}
+
+width = 100%
+height = 34
+offset-x = 0
+offset-y = 0
+# bottom = true
+
+overline-size = 0
+overline-color = #f00
+underline-size = 0
+underline-color = #00f
+
+border-bottom-size = 0
+border-top-size = 1
+border-color = ${colors.bg-dark}
+
+padding-left = 2
+padding-right = 2
+module-margin-left = 0
+module-margin-right = 0
+
+font-0 = "Fira Code:pixelsize=9;2"
+font-1 = "Wuncon Siji:pixelsize=12;2"
+font-2 = "Siji:pixelsize=10;2"
+
+; modules-left = volume pad cpu memory pad pkg mail
+modules-left = pulseaudio pad cpu memory pad fs
+modules-center = bspwm
+modules-right = syncthing redshift wlan pad network-up pad network-down pad battery pad date
+
+;tray-position = center
+;tray-padding = 2
+;tray-transparent = true
+;tray-background = #0063ff
+
+[module/bspwm]
+type = internal/bspwm
+pin-workspaces = true
+enable-click = true
+
+# ws-icon-0 = 1;
+# ws-icon-1 = 2;
+# ws-icon-2 = 3;
+# ws-icon-3 = 4;
+# ws-icon-4 = 5;
+# ws-icon-5 = 6;
+ws-icon-default =
+
+format =
+label-padding = 1
+
+label-focused = %icon%
+label-focused-background = ${colors.bg-dark}
+label-focused-foreground = ${colors.fg}
+# label-focused-underline = ${colors.magenta}
+; label-focused-foreground = ${xrdb:color2}
+label-focused-padding = 1
+
+label-occupied = %icon%
+label-occupied-foreground = ${colors.accent}
+label-occupied-padding = 1
+
+; label-urgent = %icon%
+label-urgent-foreground = ${colors.alert}
+; label-urgent-background = ${colors.alert}
+label-urgent-padding = 1
+
+label-empty = %icon%
+label-empty-foreground = ${colors.fg-alt}
+label-empty-padding = 1
+
+[module/date]
+type = internal/date
+interval = 5
+
+label = %date% %time%
+date = %A, %h %d
+date-alt = %Y-%m-%d
+time = %I:%M %p
+time-alt = %H:%M:%S
+format-prefix = ""
+format-prefix-padding = 1
+; format-prefix-background = ${colors.bg-alt}
+format-prefix-foreground = ${colors.accent}
+; format-underline = ${xrdb:color4}
+
+[module/fs]
+type = internal/fs
+mount-0 = /
+mount-1 = /mnt/projects ; for desktops
+mount-2 = /home ; for laptop
+interval = 30
+
+; Available tags:
+; (default)
+;
+;
+;
+format-mounted = ""
+format-mounted-foreground = ${colors.accent}
+; Available tokens:
+; %mountpoint%
+; %type%
+; %fsname%
+; %percentage_free%
+; %percentage_used%
+; %total%
+; %free%
+; %used%
+; Default: %mountpoint% %percentage_free%%
+
+; Available tags:
+; (default)
+format-unmounted =
+label-unmounted =
+label-unmounted-foreground = ${colors.fg-alt}
+
+bar-used-indicator =
+bar-used-width = 8
+bar-used-foreground-0 = ${colors.fg}
+bar-used-foreground-1 = ${colors.fg}
+bar-used-foreground-2 = ${colors.yellow}
+bar-used-foreground-3 = ${colors.alert}
+bar-used-foreground-4 = ${colors.alert}
+bar-used-fill = |
+bar-used-empty = ¦
+bar-used-empty-foreground = ${colors.fg-alt}
+
+[module/xwindow]
+type = internal/xwindow
+label = %title:0:80:...%
+label-padding-left = 2
+
+; [module/mpd]
+; type = internal/mpd
+; host = /home/hlissner/.config/mpd/mpd.sock
+;
+; format-online =
+; format-padding = 5
+;
+; label-song-maxlen = 45
+; label-song-ellipsis = true
+;
+; icon-prev =
+; icon-seekb =
+; icon-stop =
+; icon-play =
+; icon-pause =
+; icon-next =
+; icon-seekf =
+;
+; icon-random =
+; icon-repeat =
+;
+; toggle-on-foreground = ${colors.fg}
+; toggle-off-foreground = #66
+
+[module/cpu]
+type = internal/cpu
+interval = 2
+format =
+format-prefix = ""
+format-foreground = ${colors.accent}
+; format-underline = #f90000
+; label = %percentage%%
+format-padding = 1
+
+bar-load-indicator =
+bar-load-width = 8
+bar-load-foreground-0 = ${colors.fg}
+bar-load-foreground-1 = ${colors.fg}
+bar-load-foreground-2 = ${colors.yellow}
+bar-load-foreground-3 = ${colors.alert}
+bar-load-foreground-4 = ${colors.alert}
+bar-load-fill = |
+bar-load-empty = ¦
+bar-load-empty-foreground = ${colors.fg-alt}
+
+[module/memory]
+type = internal/memory
+interval = 3
+format =
+format-prefix = ""
+format-prefix-foreground = ${colors.accent}
+; format-underline = #4bffdc
+; label = %percentage_used%%
+format-padding-left = 1
+
+; Only applies if is used
+bar-used-indicator =
+bar-used-width = 8
+bar-used-foreground-0 = ${colors.fg}
+bar-used-foreground-1 = ${colors.fg}
+bar-used-foreground-2 = ${colors.yellow}
+bar-used-foreground-3 = ${colors.alert}
+bar-used-foreground-4 = ${colors.alert}
+bar-used-fill = |
+bar-used-empty = ¦
+bar-used-empty-foreground = ${colors.fg-alt}
+
+[module/wlan]
+type = internal/network
+interface = ${env:WLP:wlp3s0}
+interval = 3.0
+
+format-connected =
+format-disconnected =
+format-disconnected-foreground =
+
+; label-connected =
+; label-disconnected = !
+; label-disconnected-foreground = ${colors.red}
+
+ramp-signal-0 =
+ramp-signal-0-foreground = ${colors.yellow}
+ramp-signal-1 =
+ramp-signal-1-foreground = ${colors.yellow}
+ramp-signal-2 =
+ramp-signal-2-foreground = ${colors.yellow}
+ramp-signal-3 =
+ramp-signal-3-foreground = ${colors.accent}
+ramp-signal-4 =
+ramp-signal-4-foreground = ${colors.fg}
+
+[module/network-up]
+type = internal/network
+interface = ${env:LAN:eno1}
+interval = 4.0
+label-connected = "%upspeed%"
+format-connected-prefix = " "
+format-connected-prefix-foreground = ${colors.accent}
+format-connected-foreground = ${colors.fg}
+format-connected-background =
+format-connected-underline =
+format-disconnected-prefix = " "
+format-disconnected-prefix-foreground = ${colors.alert}
+format-disconnected-foreground = ${colors.alert}
+
+[module/network-down]
+type = internal/network
+interface = ${env:LAN:eno1}
+interval = 4.0
+label-connected = "%downspeed%"
+format-connected-prefix = " "
+format-connected-prefix-foreground = ${colors.accent}
+format-connected-foreground = ${colors.fg}
+format-connected-background =
+format-connected-underline =
+format-disconnected-prefix = " "
+format-disconnected-prefix-foreground = ${colors.alert}
+format-disconnected-foreground = ${colors.alert}
+
+[module/pulseaudio]
+type = internal/pulseaudio
+
+; format-volume =
+format-volume =
+; label-volume = " "
+label-volume-foreground = ${colors.accent}
+
+; format-muted-prefix = " "
+format-muted-foreground = ${colors.alert}
+label-muted =
+
+bar-volume-width = 8
+# bar-volume-foreground-0 = ${colors.magenta}
+# bar-volume-foreground-1 = ${colors.magenta}
+# bar-volume-foreground-2 = ${colors.magenta}
+# bar-volume-foreground-3 = ${colors.magenta}
+# bar-volume-foreground-4 = ${colors.magenta}
+# bar-volume-foreground-5 = ${colors.magenta}
+# bar-volume-foreground-6 = ${colors.magenta}
+bar-volume-gradient = false
+bar-volume-indicator = |
+bar-volume-indicator-font = 1
+bar-volume-indicator-foreground = #ff
+bar-volume-fill = ─
+bar-volume-fill-font = 1
+bar-volume-empty = ─
+bar-volume-empty-font = 1
+bar-volume-empty-foreground = ${colors.fg-alt}
+
+; Only applies if is used
+ramp-volume-0 =
+ramp-volume-1 =
+ramp-volume-2 =
+
+[module/battery]
+type = internal/battery
+battery = BAT0
+adapter = ADP1
+full-at = 98
+
+format-charging =
+format-charging-underline = #ffb52a
+
+format-discharging =
+format-discharging-underline = ${self.format-charging-underline}
+
+format-full-prefix = " "
+format-full-prefix-foreground = ${colors.fg-alt}
+format-full-underline = ${self.format-charging-underline}
+
+ramp-capacity-0 =
+ramp-capacity-1 =
+ramp-capacity-2 =
+ramp-capacity-0-foreground = ${colors.red}
+ramp-capacity-1-foreground = #575864
+ramp-capacity-2-foreground = ${colors.fg-alt}
+
+animation-charging-0 =
+animation-charging-1 =
+animation-charging-2 =
+animation-charging-framerate = 1000
+animation-charging-foreground = ${colors.fg}
+
+
+;=====================================================
+; Custom scripts
+;=====================================================
+
+[module/pad]
+type = custom/text
+content = " "
+content-foreground = ${colors.fg-alt}
+
+[module/redshift]
+type = custom/script
+exec = ~/.config/polybar/modules/redshift
+exec-if = pgrep -x redshift
+interval = 60
+format-padding = 1
+
+[module/syncthing]
+type = custom/script
+exec = echo 1
+exec-if = systemctl is-active syncthing
+format = ""
+format-foreground = ${colors.fg}
+interval = 30
+
+; vim:ft=dosini
diff --git a/users/profiles/desktop/polybar/modules/redshift b/users/profiles/desktop/polybar/modules/redshift
new file mode 100755
index 00000000..9a0b05f0
--- /dev/null
+++ b/users/profiles/desktop/polybar/modules/redshift
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+
+# Specifying the icon(s) in the script
+# This allows us to change its appearance conditionally
+pgrep -x redshift &> /dev/null
+if [[ $? -eq 0 ]]; then
+ temp=$(redshift -p 2>/dev/null | grep temp | cut -d' ' -f3)
+ temp=${temp//K/}
+fi
+
+icon=""
+# OPTIONAL: Append ' ${temp}K' after $icon
+if [[ -z $temp ]]; then
+ echo "%{F#65737E}$icon" # Greyed out (not running)
+elif [[ $temp -ge 5000 ]]; then
+ echo "%{F#8FA1B3}$icon" # Blue
+elif [[ $temp -ge 4000 ]]; then
+ echo "%{F#EBCB8B}$icon" # Yellow
+else
+ echo "%{F#D08770}$icon" # Orange
+fi
diff --git a/users/profiles/desktop/polybar/run.sh b/users/profiles/desktop/polybar/run.sh
new file mode 100644
index 00000000..6b4536c9
--- /dev/null
+++ b/users/profiles/desktop/polybar/run.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+pkill -u $UID -x polybar
+while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
+
+polybar main >$XDG_DATA_HOME/polybar.log 2>&1 &
+echo 'Polybar launched...'
diff --git a/users/profiles/desktop/rofi/appmenu.rasi b/users/profiles/desktop/rofi/appmenu.rasi
new file mode 100644
index 00000000..a4d62c5c
--- /dev/null
+++ b/users/profiles/desktop/rofi/appmenu.rasi
@@ -0,0 +1,10 @@
+/* -*- mode: css; -*- */
+@import "config.rasi"
+
+textbox-icon {
+ str: " ";
+}
+
+prompt {
+ enabled: false;
+}
diff --git a/users/profiles/desktop/rofi/base.cyclemenu.rasi b/users/profiles/desktop/rofi/base.cyclemenu.rasi
new file mode 100644
index 00000000..3de4010b
--- /dev/null
+++ b/users/profiles/desktop/rofi/base.cyclemenu.rasi
@@ -0,0 +1,21 @@
+/* -*- mode: css; -*- */
+@import "config.rasi"
+
+window {
+ y-offset: 0;
+ children: [ listview ];
+ width: 500px;
+}
+
+listview {
+ scrollbar: false;
+}
+
+element {
+ padding: 30px;
+ background-color: @bg-light;
+}
+element.selected {
+ background-color: @accent;
+ text-color: @bg;
+}
diff --git a/users/profiles/desktop/rofi/bookmarkmenu.rasi b/users/profiles/desktop/rofi/bookmarkmenu.rasi
new file mode 100644
index 00000000..0cb69f97
--- /dev/null
+++ b/users/profiles/desktop/rofi/bookmarkmenu.rasi
@@ -0,0 +1,14 @@
+/* -*- mode: css; -*- */
+@import "config.rasi"
+
+listview {
+ columns: 1;
+}
+
+textbox-icon {
+ str: " ";
+}
+
+prompt {
+ enabled: false;
+}
diff --git a/users/profiles/desktop/rofi/config.rasi b/users/profiles/desktop/rofi/config.rasi
new file mode 100644
index 00000000..57f4d5c0
--- /dev/null
+++ b/users/profiles/desktop/rofi/config.rasi
@@ -0,0 +1,137 @@
+/* -*- mode: css; -*- */
+configuration {
+ icon-theme: "Paper";
+ cycle: true;
+ disable-history: false;
+ monitor: "-4";
+
+ /* Vim-esque C-j/C-k as up/down in rofi */
+ kb-accept-entry: "Return,Control+m,KP_Enter";
+ kb-row-down: "Down,Control+n,Control+j";
+ kb-remove-to-eol: "";
+ kb-row-up: "Up,Control+p,Control+k";
+}
+
+* {
+ accent: #bd93f9;
+ bg: #1E2029FA;
+ bg-light: #1c1c1c;
+ bg-focus: #282a36;
+ bg-dark: #181a23;
+ fg: #bbc2cf;
+ fg-list: #bbc2cf;
+ on: #8BD49C;
+ off: #cc6666;
+
+ magenta: #bd93f9;
+ blue: #61bfff;
+
+ text-font: "Fira Sans 15";
+ text-mono-font: "Fira Code 13";
+ /* icon-font: "Hurmit Nerd Font Mono 26"; */
+ icon-font: "FontAwesome 20";
+
+ background-color: transparent;
+ text-color: @fg-list;
+ font: @text-font;
+ border-color: @bg-dark;
+}
+
+
+/**** Layout ****/
+window {
+ width: 1000px;
+ y-offset: -50px;
+ anchor: north;
+ location: center;
+ border: 1px;
+ border-radius: 6px 6px 0 0;
+ children: [ inputbar, listview ];
+
+}
+
+listview {
+ lines: 12;
+ fixed-height: false;
+ /* reverse: true; */
+ columns: 2;
+ scrollbar: true;
+ spacing: 1px;
+ /* Remove strange gap between listview and inputbar */
+ margin: -2px 0 0;
+}
+
+/*
+ TODO Not supported in stable branch of rofi
+ @media only (max-height: 1080px) {
+ window {
+ y-offset: -30%;
+ }
+ listview {
+ lines: 14;
+ }
+ }
+*/
+
+scrollbar {
+ handle-width: 1px;
+}
+inputbar {
+ children: [ textbox-icon, prompt, entry ];
+ border: 0 0 0;
+}
+textbox-icon, prompt {
+ padding: 11px;
+ expand: false;
+ border: 0 1px 0 0;
+ margin: 0 -2px 0 0;
+}
+textbox-icon {
+ padding: 7px 4px 0;
+}
+entry, element {
+ padding: 10px 13px;
+}
+textbox {
+ padding: 24px;
+ margin: 20px;
+}
+
+
+/**** Looks ****/
+scrollbar {
+ background-color: @bg-dark;
+ handle-color: @accent;
+ border-color: @bg-dark;
+}
+listview, inputbar {
+ background-color: @bg-dark;
+}
+textbox-icon, prompt, entry {
+ text-color: @accent;
+}
+prompt, entry {
+ background-color: @bg-focus;
+}
+textbox-icon, prompt {
+ background-color: #2f313d;
+}
+prompt {
+ background-color: @bg-focus;
+}
+textbox-icon {
+ font: @icon-font;
+}
+entry {
+ font: @text-font-mono;
+ text-color: @fg;
+}
+
+element {
+ background-color: @bg;
+ text-color: @fg;
+}
+element selected {
+ background-color: @bg-dark;
+ text-color: @accent;
+}
diff --git a/users/profiles/desktop/rofi/filemenu.rasi b/users/profiles/desktop/rofi/filemenu.rasi
new file mode 100644
index 00000000..7f2d3209
--- /dev/null
+++ b/users/profiles/desktop/rofi/filemenu.rasi
@@ -0,0 +1,11 @@
+/* -*- mode: css; -*- */
+
+@import "config.rasi"
+
+textbox-icon {
+ str: " ";
+}
+
+prompt {
+ enabled: true;
+}
diff --git a/users/profiles/desktop/rofi/passmenu.rasi b/users/profiles/desktop/rofi/passmenu.rasi
new file mode 100644
index 00000000..901a8c31
--- /dev/null
+++ b/users/profiles/desktop/rofi/passmenu.rasi
@@ -0,0 +1,10 @@
+/* -*- mode: css; -*- */
+@import "config.rasi"
+
+listview {
+ columns: 1;
+}
+
+textbox-icon {
+ str: " ";
+}
diff --git a/users/profiles/desktop/rofi/powermenu.rasi b/users/profiles/desktop/rofi/powermenu.rasi
new file mode 100644
index 00000000..83681185
--- /dev/null
+++ b/users/profiles/desktop/rofi/powermenu.rasi
@@ -0,0 +1,23 @@
+/** -*- mode: css; -*-
+ * This theme is intended for a 5 items wide menu on a 1920x1080 pixels resolution.
+ * You may have to tweak values such as the window padding if you have a different resolution.
+ */
+@import "appmenu.rasi"
+
+window {
+ children: [ listview ];
+ width: 500px;
+}
+
+listview {
+ scrollbar: false;
+}
+
+element {
+ padding: 30px;
+ background-color: @bg-light;
+}
+element.selected {
+ background-color: @accent;
+ text-color: @bg;
+}
diff --git a/users/profiles/desktop/rofi/windowmenu.rasi b/users/profiles/desktop/rofi/windowmenu.rasi
new file mode 100644
index 00000000..3003bfb2
--- /dev/null
+++ b/users/profiles/desktop/rofi/windowmenu.rasi
@@ -0,0 +1,27 @@
+/* -*- mode: css; -*- */
+
+@import "config.rasi"
+
+listview {
+ columns: 1;
+}
+
+inputbar {
+ width: 1100px;
+}
+
+textbox-icon {
+ str: " ";
+}
+
+prompt {
+ enabled: false;
+}
+
+/**
+ * Elements are tab-delimited, which look weird in the default variable-pitch
+ * font, so use a monospace one.
+ */
+element {
+ font: "Fira Code 12";
+}
diff --git a/users/profiles/desktop/run.sh b/users/profiles/desktop/run.sh
new file mode 100644
index 00000000..6b4536c9
--- /dev/null
+++ b/users/profiles/desktop/run.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+
+pkill -u $UID -x polybar
+while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done
+
+polybar main >$XDG_DATA_HOME/polybar.log 2>&1 &
+echo 'Polybar launched...'
diff --git a/users/profiles/desktop/sxhkdrc b/users/profiles/desktop/sxhkdrc
new file mode 100644
index 00000000..d9acf138
--- /dev/null
+++ b/users/profiles/desktop/sxhkdrc
@@ -0,0 +1,129 @@
+super + alt + Escape
+ bspc quit
+
+super + {_,shift + }q
+ bspc node -{c,k}
+
+super + t
+ bspc desktop -l next
+
+super + apostrophe
+ bspc window -s last
+
+# Attach to a detached session. If none is available create a new one, rather
+# than attach to one that is already attached to elsewhere.
+super + Return
+ kitty
+
+ctrl + super + Return
+ xst -e bash -c "(tmux ls | grep -qEv 'attached|scratch' && tmux at) || tmux"
+
+# Open a disposable, floating terminal window, for quick shell commands.
+super + grave
+ scratch
+
+# Open a disposable scratch buffer in a floating Emacs window, to run arbitrary
+# code or quickly note something down.
+super + shift + grave
+ emacsclient --eval "(open-scratch-frame)"
+
+# Invoke emacs-everywhere at point.
+super + e
+ emacsclient --eval "(emacs-everywhere)"
+
+super + space
+ $DOTFILES_BIN/rofi/appmenu
+
+super + Tab
+ $DOTFILES_BIN/rofi/windowmenu
+
+super + p
+ $DOTFILES_BIN/rofi/bwmenu
+
+super + shift + p
+ $DOTFILES_BIN/rofi/bwmenu -r
+
+super + slash
+ $DOTFILES_BIN/rofi/filemenu -x
+
+super + Escape
+ pkill -USR1 -x sxhkd
+
+
+#
+##
+
+## Toggle floating/fullscreen
+super + {_,ctrl + }f
+ bspc node -t ~{floating,fullscreen}
+
+
+super + {_,ctrl +}{h,j,k,l}
+ $DOTFILES_BIN/bspwm/focus {_,-m }{west,south,north,east}
+
+super + shift + {_,ctrl +}{h,j,k,l}
+ $DOTFILES_BIN/bspwm/swap {_,-m }{west,south,north,east}
+
+## Resize by preselection
+super + alt + {1-9}
+ $DOTFILES/bin/bspwm/presel 0.{1-9}
+
+super + alt + {h,j,k,l}
+ bspc node -p {west,south,north,east}
+
+super + alt + Return
+ $DOTFILES/bin/bspwm/subtract-presel
+
+super + alt + Delete
+ bspc node -p cancel
+
+super + {_,shift +}{1-9,0}
+ bspc {desktop -f,node -d} {1-9,10};
+
+# expand a window by moving one of its side outward
+super + {Left,Down,Up,Right}
+ bspc node -z {left -40 0,bottom 0 40,top 0 -40,right 40 0}
+
+# contract a window by moving one of its side inward
+super + ctrl + {Left,Down,Up,Right}
+ bspc node -z {right -40 0,top 0 40,bottom 0 -40,left 40 0}
+
+# move a floating window
+super + shift + {Left,Down,Up,Right}
+ bspc node -v {-40 0,0 40,0 -40,40 0}
+
+
+#
+## Media keys
+
+# screenshot region
+Print
+ scrcap
+# screencast region to mp4
+super + Print
+ scrrec -s ~/recordings/$(date +%F-%T).mp4
+# screencast region to gif
+super + ctrl + Print
+ scrrec -s ~/recordings/$(date +%F-%T).gif
+
+XF86MonBrightnessUp
+ light -A 5
+XF86MonBrightnessDown
+ light -U 5
+
+XF86AudioMute
+ amixer -q set Master toggle
+XF86AudioLowerVolume
+ amixer -q set Master 10%- unmute
+XF86AudioRaiseVolume
+ amixer -q set Master 10%+ unmute
+
+XF86Audio{Play,Pause}
+ spt-send toggle
+XF86AudioNext
+ spt-send next
+XF86AudioPrev
+ spt-send prev
+
+# X86Search
+