diff --git a/configuration.nix b/configuration.nix index d26664c..eb73003 100644 --- a/configuration.nix +++ b/configuration.nix @@ -99,7 +99,12 @@ # List packages installed in system profile. To search, run: # $ nix search wget - fonts.fonts = with pkgs; [ jetbrains-mono dejavu_fonts ]; + fonts.fonts = with pkgs; [ + jetbrains-mono + dejavu_fonts + noto-fonts-emoji + iosevka + ]; environment.systemPackages = with pkgs; [ vim neovim neofetch pfetch tmux fff diff --git a/dotfiles/bspwm/bspwmrc b/dotfiles/bspwm/bspwmrc new file mode 100755 index 0000000..7be0187 --- /dev/null +++ b/dotfiles/bspwm/bspwmrc @@ -0,0 +1,28 @@ +#! /bin/sh + +killall picom +picom & +nitrogen --restore & +~/.config/polybar/launch.bspwm.sh + + +pgrep -x sxhkd > /dev/null || sxhkd & + +#bspc monitor -d I II III IV V VI VII VIII IX X +bspc monitor -d 1 2 3 4 5 6 + +bspc config border_width 1 +bspc config window_gap 20 + +bspc config top_padding 25 +bspc config split_ratio 0.50 +bspc config borderless_monocle true +bspc config gapless_monocle true + +bspc rule -a Gimp desktop='^8' state=floating follow=on +bspc rule -a Spotify desktop='^6' + +# only add if nothing is there +#if test "$(mpc playlist | wc -l)" -eq 0 ; then +# mpc ls | mpc add +#fi diff --git a/dotfiles/bspwm/polybar/config b/dotfiles/bspwm/polybar/config new file mode 100644 index 0000000..715b477 --- /dev/null +++ b/dotfiles/bspwm/polybar/config @@ -0,0 +1,204 @@ +;========================================================== +; +; +; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗ +; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗ +; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝ +; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗ +; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║ +; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ +; +; +; To learn more about how to configure Polybar +; go to https://github.com/polybar/polybar +; +; The README contains a lot of information +; +;========================================================== + +[colors] +background = #222 +background-alt = #444 +;foreground = ${xrdb:color7:#222} +foreground = #dfdfdf +foreground-alt = #555 +primary = #cec0af +secondary = #242e35 +alert = #bd2c40 +black = #000 +white = #fff +grey = #aaa +darkgrey = #555 +red = #f00 +green = #0f0 +blue = #2d02d0 +yellow = #d2b55b + +[bar/main] +modules-center = date +font-0 = Jetbrains Mono:style=Regular +height = 30 +width = 320 +offset-x = 15 + +offset-y = 15 +background = ${colors.primary} +radius=5 +override-redirect=true + +[module/date] +type = internal/date +date = "%h-%d-20%y %r" +label-foreground = #000000 + +[bar/pulse] +modules-center = pulseaudio +height = 30 +width = 200 +offset-y = 15 +#offset-x = 1300 +offset-x = 350 +radius=5 +override-redirect=true +background = ${colors.secondary} +foreground = #fff +font-0 = Jetbrains Mono:style=Regular +font-1 = FontAwesome:style=Regular +font-2 = "Iosevka:pixelsize=12;0" +font-3 = RobotoMono Nerd Font:pixelsize=12;1 + +[bar/bspwm] +modules-center = bspwm +height = 30 +width = 350 +offset-y = 15 +offset-x = 565 +radius=5 +background = ${colors.secondary} +font-0 = Jetbrains Mono:style=Regular +font-1 = "Iosevka:pixelsize=12;0" + +[module/bspwm] +type=internal/bspwm +#label-focused = %index% +label-focused = ● +#label-focused-background = ${colors.blue} +label-focused-underline= #ffb52a +label-focused-padding = 2 +#label-occupied = %index% +label-occupied = ○ +label-occupied-padding = 2 +#label-urgent = %index%! +label-urgent = ○ +label-urgent-background = ${colors.alert} +label-urgent-padding = 2 +#label-empty = %index% +label-empty = ○ +label-empty-foreground = ${colors.foreground-alt} +label-empty-padding = 2 + + +[module/xworkspaces] +type = internal/xworkspaces + +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 + +[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 = %H:%M +#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/dotfiles/bspwm/polybar/launch.sh b/dotfiles/bspwm/polybar/launch.sh new file mode 100755 index 0000000..576e0bc --- /dev/null +++ b/dotfiles/bspwm/polybar/launch.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Terminate already running bar instances +pkill polybar + +# Wait until the processes have been shut down +while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done + +# Launch Polybar, using default config location ~/.config/polybar/config + +newver() { + polybar main & sleep 0.5 + polybar pulse & + polybar bspwm & +} + +newver + +echo "Polybar launched..." diff --git a/dotfiles/bspwm/sxhkdrc b/dotfiles/bspwm/sxhkdrc new file mode 100644 index 0000000..9c2b154 --- /dev/null +++ b/dotfiles/bspwm/sxhkdrc @@ -0,0 +1,142 @@ +# +# wm independent hotkeys +# + +# terminal emulator +super + Return + kitty +# browser +super + shift + w + brave + +# program launcher +super + {p,space} + dmenu_run -fn "Fira Code:size=14" + +# make sxhkd reload its configuration files: +super + Escape + pkill -USR1 -x sxhkd + +# +# bspwm hotkeys +# + +# quit/restart bspwm +super + shift + r + bspc wm -r + +super + shift + p + ~/.config/polybar/launch.bspwm.sh + +super + shift + e + ~/scripts/bin/quit.sh + +# close and kill + +super + shift + q + bspc node -c + +# alternate between the tiled and monocle layout +super + m + bspc desktop -l next + +# send the newest marked node to the newest preselected node +super + y + bspc node newest.marked.local -n newest.!automatic.local + +# swap the current node and the biggest window +super + g + bspc node -s biggest.window + +# +# 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}' + +# +# preselect +# + +# preselect the direction +super + ctrl + {h,j,k,l} + bspc node -p {west,south,north,east} + +# preselect the ratio +super + ctrl + {1-9} + bspc node -o 0.{1-9} + +# cancel the preselection for the focused node +super + ctrl + space + bspc node -p cancel + +# cancel the preselection for the focused desktop +super + ctrl + shift + space + bspc query -N -d | xargs -I id -n 1 bspc node id -p cancel + +# +# 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} + +# old alt keybindings +# + +alt + {Up,Down} + pactl set-sink-volume 0 {+5%,-5%} + +# screenshot capability +super + shift + s + mkdir -p ~/screenshots + scrot ~/screenshots/%Y-%m-%d-%T-screenshot.png diff --git a/dotfiles/bspwm/xinitrc b/dotfiles/bspwm/xinitrc new file mode 100644 index 0000000..d9241b6 --- /dev/null +++ b/dotfiles/bspwm/xinitrc @@ -0,0 +1,14 @@ +#!/bin/bash + +setxkbmap -option caps:escape +brightnessctl set 50% + +source "/etc/X11/xinit/xinitrc.d/50-systemd-user.sh" + +eval "$(gnome-keyring-daemon --start)" +export SSH_AUTH_SOCK + +# USE BSPWM ONLY!!! (only place where configs fucking work) +export MANAGER=bspwm +exec $MANAGER + diff --git a/dotfiles/cwm.sh b/dotfiles/cwm/cwm.sh similarity index 100% rename from dotfiles/cwm.sh rename to dotfiles/cwm/cwm.sh diff --git a/dotfiles/cwmrc b/dotfiles/cwm/cwmrc similarity index 100% rename from dotfiles/cwmrc rename to dotfiles/cwm/cwmrc diff --git a/dotfiles/cwm/xinitrc b/dotfiles/cwm/xinitrc new file mode 100644 index 0000000..3919a04 --- /dev/null +++ b/dotfiles/cwm/xinitrc @@ -0,0 +1,2 @@ +xrandr -s 1600x900 +exec dbus-run-session "$HOME/cwm.sh" diff --git a/rices/bspwm.nix b/rices/bspwm.nix new file mode 100644 index 0000000..56b4546 --- /dev/null +++ b/rices/bspwm.nix @@ -0,0 +1,84 @@ +{ config, pkgs, ... }: +let + home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/master.tar.gz"; +in +{ + imports = [ + (import "${home-manager}/nixos") + ]; + + services.xserver.displayManager.startx.enable = true; + + home-manager.users.junikim = { + # Home Manager needs a bit of information about you and the + # paths it should manage. + home.username = "junikim"; + home.homeDirectory = "/home/junikim"; + + # 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 + # incompatible changes. + # + # You can update Home Manager without changing this value. See + # the Home Manager release notes for a list of state version + # changes in each release. + home.stateVersion = "22.05"; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + + programs.starship.enable = true; + + home.packages = with pkgs; [ + vim xclip neofetch tmux + fff + nodejs shellcheck + dash + wget brave + bspwm polybarFull kitty nitrogen dmenu picom + nfs-utils gcc gnumake pulsemixer + ]; + + programs.neovim = { + enable = true; + plugins = with pkgs.vimPlugins; [ + coc-nvim + neovim-sensible + vim-airline + vim-airline-themes + vim-nix + ]; + extraConfig = builtins.readFile ../dotfiles/init.vim; + }; + + programs.git = { + enable = true; + userName = "Juni Kim"; + userEmail = "junikimm717@gmail.com"; + }; + + programs.zsh = { + oh-my-zsh = { + enable = true; + theme = "robbyrussell"; + }; + }; + + home.file = { + #".config/nvim/init.vim".source = ./dotfiles/init.vim; + ".config/polybar" = { + source = ../dotfiles/bspwm/polybar; + recursive = true; + }; + ".config/kitty/kitty.conf".source = ../dotfiles/kitty.conf; + ".config/picom/picom.conf".source = ../dotfiles/picom.conf; + ".config/nixpkgs/config.nix".source = ../dotfiles/config.nix; + ".config/bspwm/bspwmrc".source = ../dotfiles/bspwm/bspwmrc; + ".config/sxhkd/sxhkdrc".source = ../dotfiles/bspwm/sxhkdrc; + ".xinitrc".source = ../dotfiles/bspwm/xinitrc; + ".tmux.conf".source = ../dotfiles/tmux.conf; + ".zshrc".source = ../dotfiles/zshrc; + }; + }; +} diff --git a/rices/cwm.nix b/rices/cwm.nix index 4ace1f2..0bb0810 100644 --- a/rices/cwm.nix +++ b/rices/cwm.nix @@ -74,9 +74,9 @@ in ".config/kitty/kitty.conf".source = ../dotfiles/kitty.conf; ".config/picom/picom.conf".source = ../dotfiles/picom.conf; ".config/nixpkgs/config.nix".source = ../dotfiles/config.nix; - ".cwmrc".source = ../dotfiles/cwmrc; - "cwm.sh".source = ../dotfiles/cwm.sh; - ".xinitrc".source = ../dotfiles/xinitrc; + ".cwmrc".source = ../dotfiles/cwm/cwmrc; + "cwm.sh".source = ../dotfiles/cwm/cwm.sh; + ".xinitrc".source = ../dotfiles/cwm/xinitrc; ".tmux.conf".source = ../dotfiles/tmux.conf; ".zshrc".source = ../dotfiles/zshrc; };