タイル型ウィンドウマネージャxmonad
現在ウィンドウマネージャにxmonadを使用しています。
メリットとしては
マウスによるウィンドウの操作やパネルの重なりも設定によっては可能なのでかなり柔軟性は高いです。
万人にはおすすめできませんが、
ubuntuの余計なアニメーションや装飾に嫌気が差した方などにはおすすめです。
設定ファイルはこちら
dotfiles/xmonad.hs at master · fnwiya/dotfiles · GitHub
------------------------------------------------------------------------------- -- __ ____ __ _ -- -- \ \/ / \/ | ___ _ __ __ _ __| | -- -- \ /| |\/| |/ _ \| '_ \ / _` |/ _` | -- -- / \| | | | (_) | | | | (_| | (_| | -- -- /_/\_\_| |_|\___/|_| |_|\__,_|\__,_| -- -- -- ------------------------------------------------------------------------------- -- Import modules {{{ ------------------------------------------------------------------------------- import System.IO -- for xmobar import qualified Data.Map as M import Control.Monad (liftM2) -- myManageHookShift import XMonad import qualified XMonad.StackSet as W import XMonad.Actions.CycleWS import XMonad.Actions.FloatKeys import XMonad.Actions.WindowGo import qualified XMonad.Actions.FlexibleResize as Flex -- flexible resize import XMonad.Hooks.DynamicLog -- for xmobar import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.ManageDocks -- avoid xmobar area import XMonad.Hooks.ManageHelpers import XMonad.Layout import XMonad.Layout.Gaps import XMonad.Layout.NoBorders -- In Full mode, border is no use import XMonad.Layout.PerWorkspace -- Configure layouts on a per-workspace import XMonad.Layout.ResizableTile -- Resizable Horizontal border import XMonad.Layout.Simplest import XMonad.Layout.SimplestFloat import XMonad.Layout.Spacing -- this makes smart space around windows import XMonad.Layout.ToggleLayouts -- Full window at any time import XMonad.Layout.MultiToggle import XMonad.Layout.MultiToggle.Instances import XMonad.Layout.Fullscreen (fullscreenFull) import XMonad.Layout.Named import XMonad.Layout.MouseResizableTile import XMonad.Util.EZConfig -- removeKeys, additionalKeys import XMonad.Util.Run import XMonad.Util.Run(spawnPipe) -- spawnPipe, hPutStrLn import XMonad.Util.SpawnOnce import XMonad.Util.WorkspaceCompare import XMonad.Config.Desktop (desktopLayoutModifiers) --------------------------------------------------------------------------- }}} -- vars {{{ ------------------------------------------------------------------------------- modm = mod4Mask -- Super myWorkspaces = ["1", "2", "3", "4", "5", "6"] myFloatWorkspace = "3" myTerminal = "gnome-terminal" --myTerminal = "urxvt" -- Color Setting colorBlue = "#77A0D4" colorGreen = "#519CA5" colorRed = "#E15F67" colorGray = "#6E7E93" colorWhite = "#FDFDFE" colorNormalbg = "#333134" colorfg = "#D0CDD9" -- Border width borderwidth = 1 -- Border color mynormalBorderColor = colorGray myfocusedBorderColor = colorRed -- gapwidth gapwidth = 3 gwU = 0 gwD = 0 gwL = 0 gwR = 0 --------------------------------------------------------------------------- }}} -- main {{{ ------------------------------------------------------------------------------- main = do wsbar <- spawnPipe myWsBar xmonad $ ewmh defaultConfig { modMask = modm , terminal = myTerminal , workspaces = myWorkspaces , borderWidth = borderwidth , normalBorderColor = mynormalBorderColor , focusedBorderColor = myfocusedBorderColor , mouseBindings = myMouseBindings , startupHook = myStartupHook , manageHook = myManageHookShift <+> myManageHookFloat <+> manageDocks , layoutHook = avoidStruts $ ( toggleLayouts (noBorders Full) -- $ onWorkspace myFloatWorkspace simplestFloat $ myLayout ) , logHook = myLogHook wsbar } -------------------------------------------------------------------- }}} -- Keymap: {{{ ------------------------------------------------------------------------ -- xprop | grep WM_CLASS `additionalKeys` [ ((modm, xK_e), runOrRaise "emacs" (className =? "Emacs")) , ((modm, xK_s), runOrRaise "gnome-terminal" (className =? "Gnome-terminal")) , ((modm, xK_c), runOrRaise "google-chrome" (className =? "google-chrome")) , ((modm, xK_t), runOrRaise "thg" (className =? "thg")) , ((modm, xK_f), sendMessage (XMonad.Layout.MultiToggle.Toggle FULL)) ] `additionalKeysP` [ -- ("M-l", moveTo Next NonEmptyWS) -- , ("M-h", moveTo Prev NonEmptyWS) -- , ("M-S-h", shiftTo Prev EmptyWS) ] --------------------------------------------------------------------------- }}} -- myMousebindings: Bind mouse {{{ ------------------------------------------------------------------------------- myMouseBindings (XConfig {XMonad.modMask = modMask}) = M.fromList $ [ ((modMask, button1), (\w -> focus w >> mouseMoveWindow w >> windows W.shiftMaster)) -- set the window to floating mode and move by dragging , ((modMask, button2), (\w -> focus w >> windows W.shiftMaster)) -- raise the window to the top of the stack , ((modMask, button3), (\w -> focus w >> Flex.mouseResizeWindow w)) -- set the window to floating mode and resize by dragging ] --------------------------------------------------------------------------- }}} -- myLayout: Handle Window behaveior {{{ ------------------------------------------------------------------------------- myLayout = spacing gapwidth $ gaps [(U, gwU),(D, gwD),(L, gwL),(R, gwR)] $ (ResizableTall 1 (1/55) (1/2) []) -- ||| mouseResizableTile { draggerType = FixedDragger { gapWidth = 0, draggerWidth = 2 }} ||| Simplest --------------------------------------------------------------------------- }}} -- myStartupHook: Start up applications {{{ ------------------------------------------------------------------------------- myStartupHook = do spawnOnce "gnome-settings-daemon" spawnOnce "gnome-volume-control-applet" spawnOnce "unity-settings-daemon" spawnOnce "xscreensaver -no-splash" spawnOnce "$HOME/.dropbox-dist/dropboxd" spawnOnce "stalonetray" spawnOnce "xmodmap $HOME/.Xmodmap" --------------------------------------------------------------------------- }}} -- myManageHookShift: some window must created there {{{ ------------------------------------------------------------------------------- myManageHookShift = composeAll -- if you want to know className, type "$ xprop|grep CLASS" on shell [ className =? "Thg" --> mydoShift "5" , className =? "Emacs" --> mydoShift "2" ] where mydoShift = doF . liftM2 (.) W.greedyView W.shift --------------------------------------------------------------------------- }}} -- myManageHookFloat: new window will created in Float mode {{{ ------------------------------------------------------------------------------- myManageHookFloat = composeAll [ className =? "Gimp" --> doFloat , className =? "Shutter" --> doFloat , className =? "Nautilus" --> doFloat , isFullscreen --> doFullFloat ] --------------------------------------------------------------------------- }}} -- myLogHook: loghock settings {{{ ------------------------------------------------------------------------------- myLogHook h = dynamicLogWithPP $ wsPP { ppOutput = hPutStrLn h } --------------------------------------------------------------------------- }}} -- myWsBar: xmobar setting {{{ ------------------------------------------------------------------------------- myWsBar = "xmobar $HOME/.xmonad/xmobar.hs" wsPP = xmobarPP { ppOrder = \(ws:l:t:_) -> [ws,t] , ppCurrent = xmobarColor colorGreen colorNormalbg . \s -> "●" , ppUrgent = xmobarColor colorfg colorNormalbg . \s -> "●" , ppVisible = xmobarColor colorGreen colorNormalbg . \s -> "⦿" , ppHidden = xmobarColor colorfg colorNormalbg . \s -> "●" , ppHiddenNoWindows = xmobarColor colorfg colorNormalbg . \s -> "○" , ppTitle = xmobarColor colorGreen colorNormalbg , ppOutput = putStrLn , ppWsSep = " " , ppSep = " " } --------------------------------------------------------------------------- }}}
dotfiles/xmobar.hs at master · fnwiya/dotfiles · GitHub
Config { font = "xft:Sans-9:bold" , bgColor = "#333134" , fgColor = "#D0CDD9" , border = NoBorder , borderColor = "#D0CDD9" , position = TopW L 100 , lowerOnStart = False , commands = [ Run Cpu [ "-L","3" ,"-H","50" ,"--normal","green" ,"--high","red" ] 10 , Run Memory [ "-t","Mem: <usedratio>%" ] 10 , Run Swap [ ] 10 , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10 , Run Battery [ "-t", " <acstatus> " ,"-L", "20" ,"-H","80" ,"--low","#f44336" ,"--normal","#ffffff" ,"--", "-o","<left>%(<timeleft>)" ,"-O","Charging<left>%" ,"-i","<left>%" ] 50 , Run StdinReader ] , sepChar = "%" , alignSep = "}{" , template = "%cpu% | %memory% | %swap% } %StdinReader% { %battery% | %date% " }
feedlyでqiitaとmediumの特定のタグだけ購読する
高速grep the_silver_searcher
Ansible MeetUp簡易レポート
詳細レポはきっとどなたかが上げてくださると思うので早さ重視で。
全体として「明日から使える」感もあり夢も持てる素晴らしい会でした。
運営及び発表者のみなさんありがとうございます!
大きく話は2つ
1.Ansible2の話
2.Ansibleのツラいところをどうするか
1.Ansible2の話
- 拡張性がかなり高まった
DockerやOpenStackのモジュールも整備された。みんな色々作ってね。 - withが便利
OSの判定などをwhenでしなくてOK - sudoとかもう使わなくてOK
どうやるかは聞き取れませんでした(英語) - エラーメッセージがわかりやすくなりました
- 暗号化されたファイルの復元はAnsible-Vaultを使う。
そのままだと遅いので高速化のためのツールをいれる。
今後はwinへの対応やnetwork部分まで含めて構成管理できるように進化していく予定(3~4ヶ月に一度リリースする)
2.Ansibleのツラいところをどうするか
- Ansibleで全部やろうとすると無理がある
→全部やろうとしなくていい。スクリプトなどと組み合わせる。 - 秘伝のタレ化する
→ドキュメントが大事
1.ドキュメント上でAnsibleを実行する(Jupyterとの組み合わせ)
2.Ansibleのplaybookからドキュメントを生成する(目下製作中。mdファイルにしてくれるっぽい)
自分が現金レス化のために使っている財布の中身
windows10でunixコマンドが打てるようになるらしいが7~8の人はcashがおすすめ
windowsがbuild2016でunixコマンドをサポートすると発表してから少し経ちましたが、
やはり衝撃的な発表でしたね。
近年のMicrosoftは以前のクローズドな文化とは打って変わってオープンな姿勢ですごくいいなと思います。
とはいえwindows7や8の方もunicコマンドが打ちたい!となる時があると思います。
そんなときはCygwinやGowを使うのが主流だったかと思いますが、
より導入が簡単なものとしてcashをおすすめします。
導入方法はnpmからインストールするだけです。
> npm install cash -g
インストール後
> cash $
と打つとプロンプトがかわりunixコマンドが打てるようになります。
中身はES6を用いて記述されており、
コールドリーディングの素材としても非常におすすめです。