├── .xmonad ├── widgets │ ├── time │ ├── alsa-volume │ ├── battery │ └── connection ├── xmobar.hs └── xmonad.hs ├── README.md ├── .zprofile ├── .xmodmap ├── .xinitrc └── .Xresources /.xmonad/widgets/time: -------------------------------------------------------------------------------- 1 | date '+%d %h %H:%M' 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## dotfiles 2 | 3 | This is the default config files provided by Happy Hacking Linux. 4 | -------------------------------------------------------------------------------- /.zprofile: -------------------------------------------------------------------------------- 1 | if [ -z "$DISPLAY" ] && [ -n "$XDG_VTNR" ] && [ "$XDG_VTNR" -eq 1 ]; then 2 | exec startx 3 | fi 4 | -------------------------------------------------------------------------------- /.xmodmap: -------------------------------------------------------------------------------- 1 | remove Lock = Caps_Lock 2 | remove Control = Control_R 3 | keysym Caps_Lock = Control_R 4 | add Lock = Caps_Lock 5 | add Control = Control_R 6 | keycode 96 = Insert 7 | -------------------------------------------------------------------------------- /.xinitrc: -------------------------------------------------------------------------------- 1 | xrdb -merge .Xresources 2 | unclutter -idle 1 & 3 | setterm -blank 0 4 | xset s off 5 | xmodmap .xmodmap 6 | xset -r 135 7 | xrandr --output VGA-1 --auto 8 | feh --bg-fill ~/wallpaper.jpg & 9 | exec xmonad 10 | -------------------------------------------------------------------------------- /.xmonad/widgets/alsa-volume: -------------------------------------------------------------------------------- 1 | vol=$(amixer sget Master | awk -F"[][%]" '/dB/ { print $2 }') 2 | off=$(amixer sget Master | grep "off") 3 | bar="" 4 | 5 | color_high="#cc0000" 6 | color_normal="#880000" 7 | color_low="#330000" 8 | 9 | color=$color_high 10 | 11 | if [ $vol -lt 60 ]; then 12 | color=$color_normal 13 | fi 14 | 15 | if [ $vol -lt 20 ]; then 16 | color=$color_low 17 | fi 18 | 19 | let stripe=$vol/20 20 | while [ $stripe -gt 0 ]; do 21 | bar="$bar|" 22 | let stripe=stripe-1 23 | done 24 | 25 | if [[ -z "${bar// }" ]]; then 26 | if [ $vol -gt 0 ]; then 27 | bar="|" 28 | else 29 | bar="-" 30 | fi 31 | fi 32 | 33 | if [[ -n "${off// }" ]]; then 34 | bar="-" 35 | fi 36 | 37 | echo "$bar" 38 | 39 | -------------------------------------------------------------------------------- /.xmonad/widgets/battery: -------------------------------------------------------------------------------- 1 | # Flashing battery status script coded to be used with Xmobar 2 | # 3 | # Usage Example: 4 | # > get_battery_status 5 | # BAT: 100% 6 | # 7 | # Azer Koculu 8 | # 9 | # Thu Nov 4 11:05:58 EET 2010 10 | 11 | flash=$(date +%s) 12 | bat=$(acpi | grep 'Battery' | sed 's/Battery\s[0-9]*: \w*, //' | sed 's/\%.*//') 13 | state=$(acpi | grep 'Battery' | sed 's/Battery\s[0-9]*: //' | sed 's/, [0-9][0-9]*\%.*//' | sed 's/Charging/^/' | sed 's/Discharging/v/' | sed 's/Full//' | sed 's/Unknown//' ) 14 | label="Battery:" 15 | 16 | color_high="#666" 17 | color_normal="#996600" 18 | color_low="#aa3300" 19 | 20 | color=$color_high 21 | 22 | if [ $bat -lt 70 ]; then 23 | color=$color_normal 24 | fi 25 | 26 | if [ $bat -lt 20 ]; then 27 | color=$color_low 28 | fi 29 | 30 | if [ $((flash % 2)) -eq 0 ]; then 31 | if [ $bat -lt 20 ]; then 32 | color="#222" 33 | fi 34 | fi 35 | 36 | echo "$label $state$bat%" 37 | -------------------------------------------------------------------------------- /.xmonad/xmobar.hs: -------------------------------------------------------------------------------- 1 | Config { font = "xft:Monaco:style=regular:pixelsize=13:antialias=true,hinting=true" 2 | , bgColor = "#222" 3 | , fgColor = "#666" 4 | , position = Top 5 | , lowerOnStart = True 6 | , commands = [ 7 | Run Com ".xmonad/widgets/battery" ["-s","-r"] "battery" 10 8 | , Run Com ".xmonad/widgets/alsa-volume" ["-s","-r"] "volume" 10 9 | , Run Com ".xmonad/widgets/time" ["-s","-r"] "time" 10 10 | , Run Cpu ["-t", "CPU: %", "-L","3","-H","50","--normal","#657b83","--high","#657b83"] 10 11 | , Run Memory ["-t", "Memory: %","-L","3","-H","50","--normal","#657b83","--high","#657b83"] 10 12 | , Run Com ".xmonad/widgets/connection" ["-s","-r"] "connection" 10 13 | , Run DynNetwork [ "--template" , ": kB/s|kB/s" 14 | , "--Low" , "1000" -- units: kB/s 15 | , "--High" , "5000" -- units: kB/s 16 | , "--low" , "darkgreen" 17 | , "--normal" , "darkorange" 18 | , "--high" , "darkred" 19 | ] 10 20 | , Run StdinReader 21 | ] 22 | , sepChar = "%" 23 | , alignSep = "}{" 24 | , template = " %StdinReader% }{ %cpu% | %memory% %connection% | %battery% | %volume% | %time% " 25 | } 26 | -------------------------------------------------------------------------------- /.xmonad/widgets/connection: -------------------------------------------------------------------------------- 1 | RECEIVING_FILE="/tmp/xmobar-conn-receiving-bytes" 2 | SENDING_FILE="/tmp/xmobar-conn-sending-bytes" 3 | 4 | receiving () { 5 | current=`cat /sys/class/net/$1/statistics/rx_bytes` 6 | if [ ! -f $RECEIVING_FILE ]; then 7 | echo $current > $RECEIVING_FILE 8 | return 1 9 | fi 10 | 11 | last=`cat $RECEIVING_FILE` 12 | 13 | echo $current > $RECEIVING_FILE 14 | 15 | diff=`expr $current - $last` 16 | kb=`expr $diff / 1024` 17 | mb=$(echo $diff | awk '{printf "%.2f", $diff/1024/1024}') 18 | 19 | label="" 20 | color="" 21 | 22 | if [ $kb -gt "999" ]; then 23 | color="#ff3300" 24 | label="$mb" 25 | elif [ $kb -gt "500" ]; then 26 | color="#ffaa00" 27 | label="$mb" 28 | elif [ $kb -gt "100" ]; then 29 | color="#ffcc00" 30 | label="$mb" 31 | elif [ $kb -gt "100" ]; then 32 | color="#ffee00" 33 | label="$mb" 34 | elif [ $kb -gt "10" ]; then 35 | color="#657b83" 36 | label="$mb" 37 | fi 38 | 39 | if [ ! $label == "" ]; then 40 | echo " In: $label mB/s" 41 | fi 42 | } 43 | 44 | sending () { 45 | current=`cat /sys/class/net/$1/statistics/tx_bytes` 46 | if [ ! -f $SENDING_FILE ]; then 47 | echo $current > $SENDING_FILE 48 | return 1 49 | fi 50 | 51 | last=`cat $SENDING_FILE` 52 | 53 | echo $current > $SENDING_FILE 54 | 55 | diff=`expr $current - $last` 56 | kb=`expr $diff / 1024` 57 | mb=$(echo $diff | awk '{printf "%.2f", $diff/1024/1024}') 58 | 59 | label="" 60 | color="" 61 | 62 | if [ $kb -gt "999" ]; then 63 | color="#993300" 64 | label="$mb" 65 | elif [ $kb -gt "500" ]; then 66 | color="#996600" 67 | label="$mb" 68 | elif [ $kb -gt "100" ]; then 69 | color="#998800" 70 | label="$mb" 71 | elif [ $kb -gt "100" ]; then 72 | color="#999900" 73 | label="$mb" 74 | elif [ $kb -gt "10" ]; then 75 | color="#657b83" 76 | label="$mb" 77 | fi 78 | 79 | if [ ! $label == "" ]; then 80 | echo " Out: $label mB/s" 81 | fi 82 | } 83 | 84 | gateway=`ip r | grep default | cut -d ' ' -f 3` 85 | test=$(ping -q -w 1 -c 1 $gateway> /dev/null && echo 1 || echo 0) 86 | interface=$(route | grep '^default' | grep -o '[^ ]*$') 87 | receiving=$(receiving $interface) 88 | sending=$(sending $interface) 89 | network="$receiving$sending" 90 | 91 | if [ ! -z "$network" -a "$network" != " " ]; then 92 | echo "|$network" 93 | exit 0 94 | elif [ $test -eq 1 ]; then 95 | label="Online" 96 | color="#008899" 97 | else 98 | label="Offline" 99 | color="#aa3300" 100 | fi 101 | 102 | echo "| $label" 103 | -------------------------------------------------------------------------------- /.Xresources: -------------------------------------------------------------------------------- 1 | Xft.dpi: 96 2 | Xft.antialias: true 3 | Xft.rgba: rgb 4 | Xft.hinting: true 5 | Xft.hintstyle: hintslight 6 | 7 | URxvt.perl-ext-common: default,clipboard,url-select,keyboard-select 8 | URxvt.url-select.launcher: firefox 9 | URxvt.url-select.underline: true 10 | URxvt.keysym.M-u: perl:url-select:select_next 11 | URxvt.keysym.M-Escape: perl:keyboard-select:activate 12 | URxvt.keysym.M-s: perl:keyboard-select:search 13 | URxvt.keysym.M-w: perl:clipboard:copy 14 | URxvt.keysym.M-p: perl:clipboard:paste 15 | URxvt.keysym.M-C-p: perl:clipboard:paste_escaped 16 | 17 | URxvt.scrollBar: false 18 | URxvt.saveLines: 4096 19 | URxvt.internalBorder: 3 20 | URxvt.externalBorder: 0 21 | URxvt.highlightSelection: true 22 | URxvt.letterSpace: 0 23 | URxvt.lineSpace: 4 24 | URxvt.loginShell: true 25 | URxvt*termName: rxvt-unicode-256color 26 | 27 | URxvt.saveLines: 10000 28 | URxvt.xftAntialias: true 29 | URxvt.font: xft:Monaco:style=regular:pixelsize=13:antialias=true,hinting=true, xft:dejavu sans mono:pixelsize=13:antialias=true,hinting=true, xft:Noto Emoji:pixelsize=13, xft:Symbola 30 | URxvt.boldFont: xft:Monaco:style=regular:pixelsize=13:antialias=true,hinting=true, xft:dejavu sans mono:pixelsize=13:antialias=true,hinting=true 31 | URxvt.italicFont: xft:Monaco:pixelsize=13:antialias=true:hinting=true, xft:dejavu sans mono:pixelsize=13:antialias=true,hinting=true 32 | URxvt.boldItalicFont: xft:Monaco:pixelsize=13:antialias=true:hinting=true, xft:dejavu sans mono:pixelsize=13:antialias=true,hinting=true 33 | 34 | URxvt.urlLauncher: w3 35 | URxvt.matcher.button: 1 36 | 37 | !URxvt.perl-ext: default,url-select 38 | !URxvt.keysym.M-u: perl:url-select:select_next 39 | !URxvt.underlineURLs: true 40 | 41 | !URxvt.depth: 32 42 | !URxvt.background: [95]#000000 43 | 44 | URxvt.depth: 32 45 | URxvt.background: [75]#000000 46 | 47 | !URxvt.transparent:true 48 | !URxvt.shading: 14 49 | 50 | Urxvt.secondaryScroll: true 51 | 52 | ! 53 | ! Color 54 | ! 55 | 56 | URxvt.keysym.M-C-0: command:\033]710;xft: Inconsolata:pixelsize=10:hinting=true:dpi=96\007 57 | URxvt.keysym.M-C-1: command:\033]710;xft: Inconsolata:pixelsize=12:hinting=true:dpi=96\007 58 | URxvt.keysym.M-C-2: command:\033]710;xft: Inconsolata:pixelsize=14:hinting=true:dpi=96\007 59 | URxvt.keysym.M-C-3: command:\033]710;xft: Inconsolata:pixelsize=16:hinting=true:dpi=96\007 60 | URxvt.keysym.M-C-4: command:\033]710;xft: Inconsolata:pixelsize=20:hinting=true:dpi=96\007 61 | URxvt.keysym.M-C-5: command:\033]710;xft: Inconsolata:pixelsize=26:hinting=true:dpi=96\007 62 | URxvt.keysym.M-C-6: command:\033]710;xft: Inconsolata:pixelsize=36:hinting=true:dpi=96\007 63 | 64 | dzen2.font: -*-fixed-*-*-*-*-*-*-*-*-*-*-*-* 65 | dzen2.foreground: #22EE11 66 | dzen2.background: black 67 | 68 | 69 | 70 | 71 | ! Solarized color scheme for the X Window System 72 | ! 73 | ! http://ethanschoonover.com/solarized 74 | 75 | URxvt.background: [95]#002b36 76 | URxvt.borderColor: [95]#002b36 77 | URxvt.scrollColor: [95]#002b36 78 | URxvt.foreground: #839496 79 | URxvt.fading: 40 80 | URxvt.fadeColor: #002b36 81 | URxvt.cursorColor: #93a1a1 82 | URxvt.pointerColorBackground: #586e75 83 | URxvt.pointerColorForeground: #93a1a1 84 | 85 | *color0: #073643 86 | *color1: #dc322f 87 | *color2: #859900 88 | *color3: #b58900 89 | *color4: #268bd2 90 | *color5: #d33682 91 | *color6: #2aa198 92 | *color7: #eee8d5 93 | *color9: #cb4b16 94 | *color8: #002b36 95 | *color10: #586e75 96 | *color11: #657b83 97 | *color12: #839496 98 | *color13: #6c71c4 99 | *color14: #93a1a1 100 | *color15: #fdf6e3 101 | -------------------------------------------------------------------------------- /.xmonad/xmonad.hs: -------------------------------------------------------------------------------- 1 | import XMonad 2 | import XMonad.Hooks.DynamicLog 3 | import XMonad.Hooks.ManageDocks 4 | import XMonad.Util.Run(spawnPipe) 5 | import XMonad.Util.EZConfig(additionalKeys) 6 | import System.IO 7 | import System.Posix.Env 8 | 9 | import qualified XMonad.StackSet as W 10 | import qualified Data.Map as M 11 | --import qualified System.IO.UTF8 as U 12 | import qualified XMonad.Actions.Search as S 13 | import qualified XMonad.Actions.Submap as SM 14 | import qualified XMonad.Prompt as P 15 | 16 | import XMonad.Layout.WindowNavigation 17 | import XMonad.Layout.Tabbed 18 | import XMonad.Layout.TwoPane 19 | import XMonad.Layout.MosaicAlt 20 | import XMonad.Layout.Combo 21 | import XMonad.Layout.WindowNavigation 22 | import XMonad.Layout.Cross 23 | import XMonad.Layout.MultiToggle 24 | import XMonad.Layout.MultiToggle.Instances 25 | 26 | 27 | import XMonad.Layout.PerWorkspace 28 | 29 | import XMonad.Layout.NoBorders 30 | import XMonad.Actions.NoBorders 31 | import XMonad.Actions.WithAll 32 | 33 | myManageHook = composeAll 34 | [ 35 | className =? "Emacs" --> doF (W.shift "code"), 36 | className =? "delicious-surf" --> doF (W.shift "www"), 37 | className =? "Firefox" --> doF (W.shift "www"), 38 | className =? "chromium" --> doF (W.shift "www") 39 | ] 40 | 41 | myKeys = 42 | [ 43 | ((mod4Mask, xK_p), spawn "dmenu_run -fn 'Monaco-10' -nb '#222' -nf '#999' -sb '#aa3300'"), 44 | ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s"), 45 | ((mod4Mask, xK_o), sendMessage ToggleStruts), 46 | ((mod4Mask, xK_a), windows (W.view "code")), 47 | ((mod4Mask, xK_s), windows (W.view "www")), 48 | ((mod4Mask, xK_d), windows (W.view "home")), 49 | ((mod4Mask, xK_b), withAll toggleBorder), 50 | ((0, xK_Print), spawn "scrot") 51 | -- multimedia keys 52 | -- XF86AudioLowerVolume 53 | , ((0 , 0x1008ff11), spawn "amixer set Master 15-") 54 | -- XF86AudioRaiseVolume 55 | , ((0 , 0x1008ff13), spawn "amixer set Master 15+") 56 | -- XF86AudioMute 57 | , ((0 , 0x1008ff12), spawn "amixer -q -D pulse sset Master toggle") 58 | -- XF86AudioNext 59 | , ((0 , 0x1008ff17), spawn "playerctl next") 60 | -- XF86AudioPrev 61 | , ((0 , 0x1008ff16), spawn "playerctl previous") 62 | -- XF86AudioPlay 63 | , ((0 , 0x1008ff14), spawn "playerctl play-pause") 64 | -- XF86MonBrightnessDown 65 | , ((0 , 0x1008ff03), spawn "light -U 20") 66 | -- XF86MonBrightnessUp 67 | , ((0 , 0x1008ff02), spawn "light -A 20") 68 | -- XF86KbdBrightnessDown 69 | , ((0 , 0x1008ff06), spawn "light -k -U 20") 70 | -- XF86KbdBrightnessUp 71 | , ((0 , 0x1008ff05), spawn "light -k -A 20") 72 | ] 73 | where modMask = mod1Mask 74 | modShft = modMask .|. shiftMask 75 | modCtrl = modMask .|. controlMask 76 | modShCr = modMask .|. shiftMask .|. controlMask 77 | modMod2 = mod2Mask 78 | modM1Cr = modMask .|. mod2Mask .|. controlMask 79 | search = SM.submap $ searchMap $ S.promptSearch P.defaultXPConfig 80 | nilMask = 0 81 | jstShft = shiftMask 82 | searchMap m = M.fromList $ 83 | [ ((nilMask, xK_g), m S.google), 84 | ((nilMask, xK_w), m S.wikipedia), 85 | ((nilMask, xK_i), m S.imdb) 86 | ] 87 | 88 | myTabConfig = defaultTheme { inactiveColor = "#050505", activeColor = "#050505", inactiveBorderColor = "#050505", inactiveTextColor = "#666666", activeBorderColor = "#050505", activeTextColor = "#eeeeee"} 89 | 90 | main = do 91 | putEnv "BROWSER=w3" 92 | xmproc <- spawnPipe "xmobar $HOME/.xmonad/xmobar.hs" 93 | xmonad $ docks $ defaultConfig { 94 | -- basic conf 95 | modMask = mod4Mask, 96 | terminal = "urxvt", 97 | borderWidth = 2, 98 | workspaces = ["home","www","code", "4", "5", "6", "7", "8", "9"], 99 | -- colors 100 | normalBorderColor = "#002b36", 101 | focusedBorderColor = "#657b83", 102 | -- hooks 103 | manageHook = myManageHook <+> manageDocks, 104 | -- layoutHook = avoidStruts $ layoutHook defaultConfig, 105 | layoutHook = windowNavigation $ 106 | smartBorders $ 107 | avoidStruts $ 108 | (onWorkspace "code" (Mirror webdev ||| webdev ||| tall ||| Full)) $ 109 | (avoidStruts (tall ||| Mirror tall ||| noBorders (tabbed shrinkText myTabConfig) ||| noBorders Full ||| onWorkspace "www" (tabbed shrinkText myTabConfig) tall)) ||| simpleCross, 110 | logHook = dynamicLogWithPP $ xmobarPP 111 | { ppOutput = hPutStrLn xmproc 112 | , ppTitle = xmobarColor "green" "" . shorten 100 113 | } 114 | } `additionalKeys` myKeys 115 | where 116 | tall = Tall 1 (3/100) (488/792) 117 | webdev = Tall 1 0 (70/100) 118 | -- mosaic = MosaicAlt M.empty 119 | -- combo = combineTwo (TwoPane 0.03 (3/10)) (mosaic) (Full) 120 | --------------------------------------------------------------------------------