Help us understand the problem. What is going on with this article?

Rofiの設定

More than 1 year has passed since last update.

はじめに

私はArch Linuxでi3wmを使っています。これまでランチャーはi3wmの標準のdmenuを使っていました。しかし、dmenuはカスタマイズ性とおしゃれさに欠けるのでRofiに移行しました。

Rofiの設定ファイル

#.config/rofi/config
rofi.modi:  window,drun,system:~/.config/rofi/rofi_system.sh
rofi.sidebar-mode:  true
rofi.hide-scrollbar: true
rofi.kb-cancel: Escape,Control+bracketleft
rofi.kb-mode-previous: Alt+u
rofi.kb-mode-next: Alt+i
rofi.theme: /usr/share/rofi/themes/Arc-Dark.rasi

modiに有効にするモードを設定します。独自のモードも作れます。
kb-(コマンド)にはキーバインドを設定します。rofi -show keysでキーバインドのの設定が見れるので、気に入らないキーバインドを変更します。
themeでテーマを設定する。rofi-theme-selectorでテーマのpreviewを見ながら設定を変更できます。

独自のモード

シェルスクリプトで記述します。表示したい項目を改行区切りで標準出力に出力します。選択すると選択した文字列を引数として再度シェルスクリプトを実行します。

#!/usr/bin/env bash

set -euCo pipefail

function main() {
  # 表示したい項目と実際に実行するコマンドを連想配列として定義する。
  local -Ar menu=(
    ['Lock']='dm-tool lock'
    ['Logout']='i3-msg exit'
    ['Poweroff']='systemctl poweroff'
    ['Reboot']='systemctl reboot'
  )

  local -r IFS=$'\n'
  # 引数があるなら$1に対応するコマンドを実行する。
  # 引数がないなら連想配列のkeyを表示する。
  [[ $# -ne 0 ]] && eval "${menu[$1]}" || echo "${!menu[*]}"
}

main $@

2018-04-02-132029_1366x768_scrot.png

コマンドを実行時に確認を取る

独自のモードでpoweroffを実行するのですが、誤って実行する可能性があります。なので、実行を行う時に確認をとるようにシェルスクリプトを変更します。選択すると(項目名 / yes, 項目名 / no)が表示され、yesを選択するとコマンドを実行する。noを選択すると元に戻る。

#!/usr/bin/env bash

set -euCo pipefail

declare -Ar menu=(
  ['Logout']='i3-msg exit'
  ['Poweroff']='systemctl poweroff'
  ['Reboot']='systemctl reboot'
)

function print_keys() {
  local -r IFS=$'\n'
  echo "${!menu[*]}"
}

function main() {
  local -r yes='yes' no='no'

  if [[ $# -eq 0 ]]; then
    print_keys
  elif [[ $# -eq 1 ]]; then
    echo $1 ${no}
    echo $1 ${yes}
  elif [[ $2 == ${yes} ]]; then
    eval "${menu[$1]}"
  elif [[ $2 == ${no} ]]; then
    print_keys
  fi
}

main $@

2018-04-02-132428_1366x768_scrot.png

tayusa
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away