mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-07-12 07:32:40 +02:00
feat: nixos configs & docs
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
imports = [
|
||||
./fcitx5
|
||||
./i3
|
||||
./programs
|
||||
./rofi
|
||||
./shell
|
||||
];
|
||||
|
||||
# Home Manager needs a bit of information about you and the
|
||||
# paths it should manage.
|
||||
home = {
|
||||
username = "ryan";
|
||||
homeDirectory = "/home/ryan";
|
||||
|
||||
# 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.
|
||||
stateVersion = "22.11";
|
||||
};
|
||||
|
||||
# Let Home Manager install and manage itself.
|
||||
programs.home-manager.enable = true;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
i18n.inputMethod = {
|
||||
enabled = "fcitx5";
|
||||
fcitx5.addons =
|
||||
let
|
||||
# 为了不使用默认的 rime-data,改用我自定义的小鹤音形数据,这里需要 override
|
||||
# 参考 https://github.com/NixOS/nixpkgs/blob/e4246ae1e7f78b7087dce9c9da10d28d3725025f/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
|
||||
config.packageOverrides = pkgs: {
|
||||
fcitx5-rime = pkgs.fcitx5-rime.override {rimeDataPkgs = [
|
||||
# 小鹤音形配置,配置来自 flypy.com 官方网盘的鼠须管配置压缩包「小鹤音形“鼠须管”for macOS.zip」
|
||||
# 我仅修改了 default.yaml 文件,将其中的半角括号改为了直角括号「 与 」。
|
||||
./rime-data-flypy
|
||||
];};
|
||||
};
|
||||
in
|
||||
with pkgs; [
|
||||
fcitx5-rime
|
||||
fcitx5-configtool
|
||||
fcitx5-chinese-addons
|
||||
];
|
||||
};
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,152 @@
|
||||
# 小鹤双拼自定义方案配置
|
||||
# encoding: utf-8
|
||||
|
||||
config_version: "0.38"
|
||||
|
||||
schema_list:
|
||||
- schema: flypy
|
||||
|
||||
switcher:
|
||||
caption: 〔方案选单〕
|
||||
hotkeys:
|
||||
- Control+grave
|
||||
- Control+Shift+grave
|
||||
- F4
|
||||
save_options:
|
||||
- full_shape
|
||||
- ascii_punct
|
||||
- simplification
|
||||
fold_options: true
|
||||
abbreviate_options: true
|
||||
#option_list_separator: '/'
|
||||
|
||||
menu:
|
||||
page_size: 5
|
||||
|
||||
punctuator:
|
||||
full_shape:
|
||||
' ' : { commit: ' ' }
|
||||
',' : { commit: , }
|
||||
'.' : { commit: 。 }
|
||||
'<' : [ 《, 〈, «, ‹ ]
|
||||
'>' : [ 》, 〉, », › ]
|
||||
'/' : { commit: 、 }
|
||||
'?' : { commit: ? }
|
||||
';' : { commit: ; }
|
||||
':' : { commit: : }
|
||||
'''' : { pair: [ '‘', '’' ] }
|
||||
'"' : { pair: [ '“', '”' ] }
|
||||
'\' : { commit: 、 }
|
||||
'|' : '|'
|
||||
'`' : `
|
||||
'~' : ~
|
||||
'!' : { commit: ! }
|
||||
'@' : '@'
|
||||
'#' : '#'
|
||||
'%' : '%'
|
||||
'$' : [ ¥, '$', '€', '£', '¥', '¢', '¤' ]
|
||||
'^' : { commit: …… }
|
||||
'&' : &
|
||||
'*' : '*'
|
||||
'(' : (
|
||||
')' : )
|
||||
'-' : -
|
||||
'_' : ——
|
||||
'+' : +
|
||||
'=' : =
|
||||
'[' : [ 「, 【, 〔, [ ]
|
||||
']' : [ 」, 】, 〕, ] ]
|
||||
'{' : [ 『, 〖, { ]
|
||||
'}' : [ 』, 〗, } ]
|
||||
half_shape:
|
||||
',' : { commit: , }
|
||||
'.' : { commit: 。 }
|
||||
'<' : [ 《, 〈, «, ‹ ]
|
||||
'>' : [ 》, 〉, », › ]
|
||||
'/' : { commit: 、 }
|
||||
'?' : { commit: ? }
|
||||
';' : { commit: ; }
|
||||
':' : { commit: : }
|
||||
'''' : { pair: [ '‘', '’' ] }
|
||||
'"' : { pair: [ '“', '”' ] }
|
||||
'\' : { commit: 、 }
|
||||
'|' : '|'
|
||||
'`' : '`'
|
||||
'~' : { commit: ~ }
|
||||
'!' : { commit: ! }
|
||||
'@' : '@'
|
||||
'#' : '#'
|
||||
'%' : { commit: '%' }
|
||||
'$' : { commit: "$" }
|
||||
'^' : { commit: …… }
|
||||
'&' : '&'
|
||||
'*' : { commit: '*' }
|
||||
'(' : (
|
||||
')' : )
|
||||
'-' : '-'
|
||||
'_' : ——
|
||||
'+' : '+'
|
||||
'=' : '='
|
||||
# '[' : { commit: '【' }
|
||||
# ']' : { commit: '】' }
|
||||
# '{' : { commit: '{' }
|
||||
# '}' : { commit: '}' }
|
||||
'[' : { commit: '「' }
|
||||
']' : { commit: '」' }
|
||||
'{' : { commit: '『' }
|
||||
'}' : { commit: '』' }
|
||||
|
||||
key_binder:
|
||||
bindings:
|
||||
# Emacs style
|
||||
- { when: composing, accept: Control+p, send: Up }
|
||||
- { when: composing, accept: Control+n, send: Down }
|
||||
- { when: composing, accept: Control+b, send: Left }
|
||||
- { when: composing, accept: Control+f, send: Right }
|
||||
- { when: composing, accept: Control+a, send: Home }
|
||||
- { when: composing, accept: Control+e, send: End }
|
||||
- { when: composing, accept: Control+d, send: Delete }
|
||||
- { when: composing, accept: Control+k, send: Shift+Delete }
|
||||
- { when: composing, accept: Control+h, send: BackSpace }
|
||||
- { when: composing, accept: Control+g, send: Escape }
|
||||
- { when: composing, accept: Control+bracketleft, send: Escape }
|
||||
- { when: composing, accept: Alt+v, send: Page_Up }
|
||||
- { when: composing, accept: Control+v, send: Page_Down }
|
||||
# move by word
|
||||
- { when: composing, accept: ISO_Left_Tab, send: Shift+Left }
|
||||
- { when: composing, accept: Shift+Tab, send: Shift+Left }
|
||||
- { when: composing, accept: Tab, send: Shift+Right }
|
||||
# flip page
|
||||
- { when: has_menu, accept: minus, send: Page_Up }
|
||||
- { when: has_menu, accept: equal, send: Page_Down }
|
||||
- { when: paging, accept: comma, send: Page_Up }
|
||||
- { when: has_menu, accept: period, send: Page_Down }
|
||||
# hotkey switch
|
||||
- { when: always, accept: Control+Shift+1, select: .next }
|
||||
- { when: always, accept: Control+Shift+2, toggle: ascii_mode }
|
||||
- { when: always, accept: Control+Shift+3, toggle: full_shape }
|
||||
- { when: always, accept: Control+Shift+4, toggle: simplification }
|
||||
- { when: always, accept: Control+Shift+5, toggle: extended_charset }
|
||||
- { when: always, accept: Control+Shift+exclam, select: .next }
|
||||
- { when: always, accept: Control+Shift+at, toggle: ascii_mode }
|
||||
- { when: always, accept: Control+Shift+numbersign, toggle: full_shape }
|
||||
- { when: always, accept: Control+Shift+dollar, toggle: simplification }
|
||||
- { when: always, accept: Control+Shift+percent, toggle: extended_charset }
|
||||
- { when: always, accept: Shift+space, toggle: full_shape }
|
||||
- { when: always, accept: Control+period, toggle: ascii_punct }
|
||||
|
||||
recognizer:
|
||||
patterns:
|
||||
uppercase: "[A-Z][-_+.'0-9A-Za-z]*$"
|
||||
reverse_lookup: "[a-z`]*`+[a-z`]*"
|
||||
punct: ""
|
||||
|
||||
ascii_composer:
|
||||
good_old_caps_lock: true
|
||||
switch_key:
|
||||
Shift_L: inline_ascii
|
||||
Shift_R: commit_text
|
||||
Control_L: noop
|
||||
Control_R: noop
|
||||
Caps_Lock: clear
|
||||
Eisu_toggle: clear
|
||||
@@ -0,0 +1,163 @@
|
||||
# Rime schema settings
|
||||
# encoding: utf-8
|
||||
|
||||
schema:
|
||||
schema_id: flypy
|
||||
name: 小鹤音形
|
||||
version: "10.9.3"
|
||||
author:
|
||||
- 方案设计:何海峰 <flypy@qq.com>
|
||||
description: |
|
||||
小鹤音形输入法
|
||||
|
||||
punctuator:
|
||||
import_preset: default
|
||||
|
||||
switches:
|
||||
- name: ascii_mode
|
||||
reset: 0
|
||||
# states: [ 中文, 英文 ]
|
||||
- name: full_shape
|
||||
# states: [ 半角, 全角 ]
|
||||
- name: simplification
|
||||
# states: [ 简, 繁 ]
|
||||
reset: 0
|
||||
- name: ascii_punct
|
||||
# states: [ 。,, ., ]
|
||||
reset: 0
|
||||
|
||||
engine:
|
||||
processors:
|
||||
- ascii_composer
|
||||
- recognizer
|
||||
- key_binder
|
||||
- speller
|
||||
- punctuator
|
||||
- selector
|
||||
- navigator
|
||||
- express_editor
|
||||
segmentors:
|
||||
- ascii_segmentor
|
||||
- matcher
|
||||
- abc_segmentor
|
||||
- punct_segmentor
|
||||
- fallback_segmentor
|
||||
translators:
|
||||
- punct_translator
|
||||
- table_translator
|
||||
- lua_translator@date_translator
|
||||
- lua_translator@time_translator
|
||||
- table_translator@custom_phraseVD
|
||||
- table_translator@custom_phraseXT
|
||||
- table_translator@custom_phraseYH
|
||||
- table_translator@custom_phraseQMZ
|
||||
- reverse_lookup_translator
|
||||
- history_translator@history
|
||||
- lua_translator@calculator_translator
|
||||
filters:
|
||||
- simplifier
|
||||
- simplifier@simplification
|
||||
- uniquifier
|
||||
|
||||
speller:
|
||||
alphabet: "abcdefghijklmnopqrstuvwxyz;'"
|
||||
initials: ';abcdefghijklmnopqrstuvwxyz'
|
||||
finals: "'"
|
||||
#delimiter: " '"
|
||||
max_code_length: 4
|
||||
auto_select: true #顶字上屏
|
||||
auto_select_pattern: ^;.$|^\w{4}$
|
||||
auto_clear: max_length #manual|auto|max_length 空码按下一键确认清屏|空码自动清|达到最长码时后码顶上清屏
|
||||
|
||||
translator:
|
||||
dictionary: flypy
|
||||
enable_charset_filter: false
|
||||
enable_sentence: false
|
||||
enable_completion: false # 编码提示开关
|
||||
enable_user_dict: false
|
||||
disable_user_dict_for_patterns:
|
||||
- "^z.*$"
|
||||
|
||||
|
||||
history:
|
||||
input: ;f
|
||||
size: 1 #重复前几次上屏
|
||||
initial_quality: 1 #首选
|
||||
|
||||
simplification:
|
||||
opencc_config: s2tw.json
|
||||
option_name: simplification
|
||||
tips: all #简繁对照
|
||||
|
||||
custom_phraseVD:
|
||||
dictionary: ""
|
||||
user_dict: flypy_top
|
||||
db_class: stabledb
|
||||
enable_sentence: false
|
||||
enable_completion: false
|
||||
initial_quality: 0 #用户词和系统词重码 置顶
|
||||
|
||||
custom_phraseXT:
|
||||
dictionary: ""
|
||||
user_dict: flypy_sys
|
||||
db_class: stabledb
|
||||
enable_sentence: false
|
||||
enable_completion: false
|
||||
initial_quality: -1 #本表词和系统词重码居后
|
||||
|
||||
custom_phraseYH:
|
||||
dictionary: ""
|
||||
user_dict: flypy_user
|
||||
db_class: stabledb
|
||||
enable_sentence: false
|
||||
enable_completion: false
|
||||
initial_quality: -1 #用户词和系统词重码居后
|
||||
|
||||
custom_phraseQMZ:
|
||||
dictionary: ""
|
||||
user_dict: flypy_full
|
||||
db_class: stabledb
|
||||
enable_sentence: false
|
||||
enable_completion: false
|
||||
initial_quality: -1 #和系统词重码时居后
|
||||
|
||||
reverse_lookup:
|
||||
dictionary: flypydz
|
||||
comment_format:
|
||||
# - xform/^/〔/
|
||||
# - xform/$/〕/
|
||||
- xform/ / /
|
||||
|
||||
|
||||
key_binder:
|
||||
import_preset: default #方案切换相关
|
||||
bindings:
|
||||
- {accept: bracketleft, send: Page_Up, when: paging} # [上翻页
|
||||
- {accept: bracketright, send: Page_Down, when: has_menu} # ]下翻页
|
||||
- {accept: comma, send: comma, when: paging} #注销逗号翻页
|
||||
- {accept: period, send: period, when: has_menu} #注销句号翻页
|
||||
- {accept: semicolon, send: 2, when: has_menu} #分号次选
|
||||
# - {accept: Release+semicolon, send: semicolon, when: has_menu} #如启用此行,则分号引导符号功能无效
|
||||
- {accept: Release+period, send: period, when: composing} #句号顶屏
|
||||
- {accept: Release+comma, send: comma, when: composing} #逗号顶屏
|
||||
- {accept: "Tab", send: Escape, when: composing}
|
||||
- {accept: "Shift_R", send: Escape, when: composing}
|
||||
- {accept: "Shift+space", toggle: full_shape, when: always} #切换全半角
|
||||
- {accept: "Control+period", toggle: ascii_punct, when: always} #切换中英标点
|
||||
- {accept: "Control+j", toggle: simplification, when: always} #切换简繁
|
||||
|
||||
recognizer:
|
||||
import_preset: default
|
||||
patterns:
|
||||
#uppercase: "[A-Z][-_+.'0-9A-Za-z]*$"
|
||||
uppercase: "" #中文状态大写锁定直接上屏
|
||||
reverse_lookup: "[a-z`]*`+[a-z`]*"
|
||||
punct: ""
|
||||
expression: "^=.*$"
|
||||
|
||||
menu:
|
||||
page_size: 5 #候选项数
|
||||
|
||||
style:
|
||||
horizontal: true #竖排为false
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,51 @@
|
||||
# coding: utf-8
|
||||
# 置顶词库(与系统词条重码时居前)
|
||||
#
|
||||
# 编码格式:字词+Tab符+编码(用户词库本身有重码则还需后面+Tab符+权重,权重大者居前,权重数字随意)
|
||||
#
|
||||
# ------------ 强调一下 ------------
|
||||
#
|
||||
# 词条和编码之间的不是空格,而是Tab符,如果你不知道,就复制下面编码中的空白处
|
||||
# 或者按住键盘 G 键,切换到功能键盘,使用上面的Tab键
|
||||
#
|
||||
# ---------------------------------------
|
||||
#
|
||||
# 分号冒号编码只能放此文件才能调频,如分号做次选需删除权重,外接键盘适用
|
||||
: ;
|
||||
; ; 90
|
||||
# 如用户词无重或和系统词条重码时居前,则无需权重(如想居于系统词条后,请把词条放到flypy_user.txt文件内)
|
||||
# 虽然文本码表编辑较为方便,但不适合导入大量条目
|
||||
# 置顶用户词库,下一行开始添加,部署后生效
|
||||
|
||||
# 全码词
|
||||
即可 jike
|
||||
知道 vidc
|
||||
只能 ving
|
||||
简单 jmdj
|
||||
计算 jisr
|
||||
一下 yixx
|
||||
一直 yivi
|
||||
只是 viui
|
||||
按时 anui
|
||||
而是 erui
|
||||
成为 igww
|
||||
小时 xnui
|
||||
简直 jmvi
|
||||
任务 rfwu
|
||||
时间 uijm
|
||||
水平 uvpk
|
||||
试试 uiui
|
||||
神似 ufsi
|
||||
传统 irts
|
||||
台湾 tdwj
|
||||
反应 fjyk
|
||||
每周 mwvz
|
||||
联系 lmxi
|
||||
现金 xmjb
|
||||
期间 qijm
|
||||
极其 jiqi
|
||||
在线 zdxm
|
||||
只会 vihv
|
||||
一片 yipm
|
||||
美丽 mwli
|
||||
几位 jiww
|
||||
@@ -0,0 +1,520 @@
|
||||
# coding: utf-8
|
||||
# 用户词库
|
||||
# 与系统词条重码时居后,如想居前,请把词条放到flypy_top.txt文件内
|
||||
#
|
||||
# 编码格式:字词+Tab符+编码(用户词库本身有重码则还需后面+Tab符+权重,权重大者居前,权重数字随意)
|
||||
#
|
||||
# -------- 强调一下 --------
|
||||
#
|
||||
# 词条和编码之间的不是空格,而是Tab符
|
||||
# 按住键盘 G 键,切换到功能键盘,使用上面的Tab键
|
||||
#
|
||||
# -------------------------------
|
||||
#
|
||||
# 系统次选词放在flypy_sys.txt文件内,可修改删除
|
||||
# 简词补全放本文件内,不需要可删除
|
||||
# 用户词库,下行开始添加,编码格式见上,部署后生效
|
||||
|
||||
# 全码词
|
||||
即使 jiui
|
||||
回忆 hvyi
|
||||
华为 hxww
|
||||
一边 yibm
|
||||
两边 llbm
|
||||
整句 vgju
|
||||
按键 anjm
|
||||
单元 djyr
|
||||
反思 fjsi
|
||||
大于 dayu
|
||||
改编 gdbm
|
||||
打架 dajx
|
||||
叫唤 jnhr
|
||||
尝尝 ihih
|
||||
背景 bwjk
|
||||
伤害 uhhd
|
||||
程度 igdu
|
||||
附件 fujm
|
||||
世纪 uiji
|
||||
假如 jxru
|
||||
统一 tsyi
|
||||
不再 buzd
|
||||
猥琐 wwso
|
||||
险恶 xmee
|
||||
恶毒 eedu
|
||||
达到 dadc
|
||||
回复 hvfu
|
||||
指定 vidk
|
||||
链接 lmjp
|
||||
束缚 uufu
|
||||
征服 vgfu
|
||||
歧视 qiui
|
||||
为止 wwvi
|
||||
瑕疵 xxci
|
||||
微信 wwxb
|
||||
妥妥当当 ttdd
|
||||
反悔 fjhv
|
||||
补全 buqr
|
||||
举例 juli
|
||||
音形 ybxk
|
||||
想想 xlxl
|
||||
导出 dciu
|
||||
把守 bauz
|
||||
把戏 baxi
|
||||
报仇 bciz
|
||||
宝剑 bcjm
|
||||
报幕 bcmu
|
||||
保鲜 bcxm
|
||||
拜年 bdnm
|
||||
摆脱 bdto
|
||||
鼻塞 bise
|
||||
编程 bmig
|
||||
辩解 bmjp
|
||||
便签 bmqm
|
||||
表哥 bnge
|
||||
博学 boxt
|
||||
波音 boyb
|
||||
憋屈 bpqu
|
||||
背部 bwbu
|
||||
采风 cdfg
|
||||
猜忌 cdji
|
||||
伺候 cihz
|
||||
餐馆 cjgr
|
||||
残局 cjju
|
||||
惨死 cjsi
|
||||
撺掇 crdo
|
||||
存管 cygr
|
||||
搭车 daie
|
||||
打理 dali
|
||||
倒逼 dcbi
|
||||
呆板 ddbj
|
||||
代购 ddgz
|
||||
带回 ddhv
|
||||
代驾 ddjx
|
||||
得志 devi
|
||||
得以 deyi
|
||||
登记 dgji
|
||||
当众 dhvs
|
||||
地痞 dipi
|
||||
淡季 djji
|
||||
顶住 dkvu
|
||||
屌丝 dnsi
|
||||
跌价 dpjx
|
||||
断点 drdm
|
||||
短篇 drpm
|
||||
短线 drxm
|
||||
动机 dsji
|
||||
独唱 duih
|
||||
独自 duzi
|
||||
对账 dvvh
|
||||
儿媳 erxi
|
||||
发火 faho
|
||||
发力 fali
|
||||
发型 faxk
|
||||
发炎 fayj
|
||||
分割 ffge
|
||||
粉红 ffhs
|
||||
分界 ffjp
|
||||
奋力 ffli
|
||||
分神 ffuf
|
||||
风力 fgli
|
||||
奉献 fgxm
|
||||
访客 fhke
|
||||
防守 fhuz
|
||||
防伪 fhww
|
||||
反腐 fjfu
|
||||
凡人 fjrf
|
||||
反之 fjvi
|
||||
抚慰 fuww
|
||||
废了 fwle
|
||||
费时 fwui
|
||||
飞舞 fwwu
|
||||
搞鬼 gcgv
|
||||
高超 gcic
|
||||
搞清 gcqk
|
||||
鸽子 gezi
|
||||
钢笔 ghbi
|
||||
纲要 ghyc
|
||||
光纤 glxm
|
||||
国徽 gohv
|
||||
国民 gomb
|
||||
裹挟 goxp
|
||||
聒噪 gozc
|
||||
惯例 grli
|
||||
关头 grtz
|
||||
公会 gshv
|
||||
共计 gsji
|
||||
功名 gsmk
|
||||
攻破 gspo
|
||||
共用 gsys
|
||||
公子 gszi
|
||||
古文 guwf
|
||||
桂花 gvhx
|
||||
龟速 gvsu
|
||||
浩瀚 hchj
|
||||
豪绅 hcuf
|
||||
何妨 hefh
|
||||
何尝 heih
|
||||
汉奸 hjjm
|
||||
皇权 hlqr
|
||||
火势 houi
|
||||
火灾 hozd
|
||||
换了 hrle
|
||||
换手 hruz
|
||||
宏图 hstu
|
||||
回报 hvbc
|
||||
徽章 hvvh
|
||||
滑雪 hxxt
|
||||
后腿 hztv
|
||||
后市 hzui
|
||||
插画 iahx
|
||||
查出 iaiu
|
||||
撤诉 iesu
|
||||
车展 ievj
|
||||
城堡 igbc
|
||||
诚实 igui
|
||||
诚信 igxb
|
||||
尝到 ihdc
|
||||
长篇 ihpm
|
||||
场子 ihzi
|
||||
迟了 iile
|
||||
创伤 iluh
|
||||
传导 irdc
|
||||
冲高 isgc
|
||||
重组 iszu
|
||||
橱柜 iugv
|
||||
初衷 iuvs
|
||||
出于 iuyu
|
||||
春节 iyjp
|
||||
踌躇 iziu
|
||||
浆糊 jlhu
|
||||
奖金 jljb
|
||||
剑鞘 jmqn
|
||||
监听 jmtk
|
||||
浇灌 jngr
|
||||
接口 jpkz
|
||||
解围 jpww
|
||||
纠葛 jqge
|
||||
军师 jyui
|
||||
客服 kefu
|
||||
堪称 kjig
|
||||
快了 kkle
|
||||
空缺 ksqt
|
||||
亏钱 kvqm
|
||||
喟叹 kvtj
|
||||
跨过 kxgo
|
||||
扣缴 kzjn
|
||||
扣税 kzuv
|
||||
老实 lcui
|
||||
理发 lifa
|
||||
理工 ligs
|
||||
零星 lkxk
|
||||
连同 lmts
|
||||
列支 lpvi
|
||||
榴莲 lqlm
|
||||
乱象 lrxl
|
||||
聋子 lszi
|
||||
履行 lvxk
|
||||
论剑 lyjm
|
||||
毛线 mcxm
|
||||
毛衣 mcyi
|
||||
迈过 mdgo
|
||||
迈出 mdiu
|
||||
迈入 mdru
|
||||
懵逼 mgbi
|
||||
蜜蜂 mifg
|
||||
秘籍 miji
|
||||
满族 mjzu
|
||||
明知 mkvi
|
||||
明晰 mkxi
|
||||
免礼 mmli
|
||||
免谈 mmtj
|
||||
末位 moww
|
||||
木板 mubj
|
||||
美食 mwui
|
||||
年级 nmji
|
||||
碾碎 nmsv
|
||||
农妇 nsfu
|
||||
农畜 nsiu
|
||||
奴隶 nuli
|
||||
内侧 nwce
|
||||
内里 nwli
|
||||
牌照 pdvc
|
||||
派息 pdxi
|
||||
盘升 pjug
|
||||
瓶颈 pkjk
|
||||
漂移 pnyi
|
||||
颇费 pofw
|
||||
破例 poli
|
||||
岂不 qibu
|
||||
清静 qkjk
|
||||
青涩 qkse
|
||||
情谊 qkyi
|
||||
枪毙 qlbi
|
||||
墙纸 qlvi
|
||||
潜力 qmli
|
||||
嵌套 qmtc
|
||||
瞧瞧 qnqn
|
||||
权力 qrli
|
||||
全套 qrtc
|
||||
躯壳 quqn
|
||||
取笑 quxn
|
||||
忍了 rfle
|
||||
任职 rfvi
|
||||
韧性 rfxk
|
||||
若是 roui
|
||||
乳汁 ruvi
|
||||
入眼 ruyj
|
||||
扫货 scho
|
||||
私信 sixb
|
||||
司仪 siyi
|
||||
散布 sjbu
|
||||
三维 sjww
|
||||
缩编 sobm
|
||||
索贿 sohv
|
||||
所幸 soxk
|
||||
算出 sriu
|
||||
算术 sruu
|
||||
俗世 suui
|
||||
随即 svji
|
||||
叨扰 tcrc
|
||||
抬高 tdgc
|
||||
特制 tevi
|
||||
剔除 tiiu
|
||||
体制 tivi
|
||||
体温 tiwf
|
||||
毯子 tjzi
|
||||
停播 tkbo
|
||||
跳高 tngc
|
||||
跳空 tnks
|
||||
条例 tnli
|
||||
条约 tnyt
|
||||
拖鞋 toxp
|
||||
童话 tshx
|
||||
同城 tsig
|
||||
通气 tsqi
|
||||
同事 tsui
|
||||
腿部 tvbu
|
||||
推导 tvdc
|
||||
退费 tvfw
|
||||
偷窥 tzkv
|
||||
投降 tzxl
|
||||
傻了 uale
|
||||
涉及 ueji
|
||||
赊账 uevh
|
||||
深化 ufhx
|
||||
神坛 uftj
|
||||
身姿 ufzi
|
||||
剩菜 ugcd
|
||||
升幅 ugfu
|
||||
生化 ughx
|
||||
生姜 ugjl
|
||||
生理 ugli
|
||||
声明 ugmk
|
||||
上场 uhih
|
||||
使馆 uigr
|
||||
使坏 uihk
|
||||
闪亮 ujll
|
||||
说到 uodc
|
||||
书摊 uutj
|
||||
书信 uuxb
|
||||
水利 uvli
|
||||
水文 uvwf
|
||||
收到 uzdc
|
||||
收工 uzgs
|
||||
收获 uzho
|
||||
收集 uzji
|
||||
受理 uzli
|
||||
手拿 uzna
|
||||
受伤 uzuh
|
||||
手下 uzxx
|
||||
照办 vcbj
|
||||
着凉 vcll
|
||||
朝霞 vcxx
|
||||
债券 vdqr
|
||||
宅子 vdzi
|
||||
哲理 veli
|
||||
正途 vgtu
|
||||
只管 vigr
|
||||
值钱 viqm
|
||||
质问 viwf
|
||||
战线 vjxm
|
||||
转圜 vrhr
|
||||
转头 vrtz
|
||||
专项 vrxl
|
||||
专研 vryj
|
||||
仲裁 vscd
|
||||
终点 vsdm
|
||||
重力 vsli
|
||||
忠实 vsui
|
||||
中心 vsxb
|
||||
主体 vuti
|
||||
注释 vuui
|
||||
坠毁 vvhv
|
||||
皱起 vzqi
|
||||
外接 wdjp
|
||||
外壳 wdke
|
||||
外貌 wdmc
|
||||
外甥 wdug
|
||||
文殊 wfuu
|
||||
蚊子 wfzi
|
||||
王八 whba
|
||||
王后 whhz
|
||||
旺季 whji
|
||||
往上 whuh
|
||||
王者 whve
|
||||
网友 whyz
|
||||
晚了 wjle
|
||||
玩转 wjvr
|
||||
玩意 wjyi
|
||||
微风 wwfg
|
||||
心算 xbsr
|
||||
幸好 xkhc
|
||||
行程 xkig
|
||||
性急 xkji
|
||||
醒了 xkle
|
||||
兴致 xkvi
|
||||
想必 xlbi
|
||||
享福 xlfu
|
||||
相连 xllm
|
||||
象棋 xlqi
|
||||
相思 xlsi
|
||||
相通 xlts
|
||||
巷子 xlzi
|
||||
消化 xnhx
|
||||
歇着 xpve
|
||||
雄起 xsqi
|
||||
兄长 xsvh
|
||||
雄伟 xsww
|
||||
续保 xubc
|
||||
虚实 xuui
|
||||
下蛋 xxdj
|
||||
药店 ycdm
|
||||
钥匙 ycui
|
||||
阉割 yjge
|
||||
严厉 yjli
|
||||
远离 yrli
|
||||
油锅 yzgo
|
||||
杂质 zavi
|
||||
造反 zcfj
|
||||
造就 zcjq
|
||||
糟了 zcle
|
||||
早起 zcqi
|
||||
宰客 zdke
|
||||
字符 zifu
|
||||
自贡 zigs
|
||||
资深 ziuf
|
||||
资讯 zixy
|
||||
作假 zojx
|
||||
做了 zole
|
||||
踪迹 zsji
|
||||
宗旨 zsvi
|
||||
纵向 zsxl
|
||||
纵有 zsyz
|
||||
阻止 zuvi
|
||||
走近 zzjb
|
||||
博而不精 bebj
|
||||
白日飞升 brfu
|
||||
不着边际 bvbj
|
||||
嘟嘟囔囔 ddnn
|
||||
分门别类 fmbl
|
||||
飞扬跋扈 fybh
|
||||
隔岸观火 gagh
|
||||
高屋建瓴 gwjl
|
||||
花繁叶茂 hfym
|
||||
金发碧眼 jfby
|
||||
将功补过 jgbg
|
||||
将计就计 jjjj
|
||||
济济一堂 jjyt
|
||||
迷迷糊糊 mmhh
|
||||
美若天仙 mrtx
|
||||
卖主求荣 mvqr
|
||||
破破烂烂 ppll
|
||||
千娇百媚 qjbm
|
||||
人欢马叫 rhmj
|
||||
扰人清梦 rrqm
|
||||
条条框框 ttkk
|
||||
甜甜蜜蜜 ttmm
|
||||
头痛欲裂 ttyl
|
||||
首当其冲 udqi
|
||||
深情厚谊 uqhy
|
||||
时日无多 urwd
|
||||
食色性也 usxy
|
||||
生死攸关 usyg
|
||||
我必犯人 wbfr
|
||||
为期不远 wqby
|
||||
万丈深渊 wvuy
|
||||
毋庸讳言 wyhy
|
||||
霞光万道 xgwd
|
||||
有法必依 yfby
|
||||
一飞冲天 yfit
|
||||
一清二白 yqeb
|
||||
一物降一物 ywxw
|
||||
余情未了 yqwl
|
||||
自毁长城 zhii
|
||||
自取其辱 zqqr
|
||||
在情在理 zqzl
|
||||
毕其功于一役 bqgy
|
||||
百思不得其解 bsbj
|
||||
狗咬吕洞宾 gylb
|
||||
横挑鼻子竖挑眼 htby
|
||||
回头一笑百媚生 htyu
|
||||
吃香的喝辣的 ixdd
|
||||
临时抱佛脚 lubj
|
||||
摸着石头过河 mvuh
|
||||
哪能不湿鞋 nnbx
|
||||
年年岁岁花相似 nnss
|
||||
哪有不湿鞋 nybx
|
||||
十年生死两茫茫 unum
|
||||
睁只眼闭只眼 vvyy
|
||||
无规矩不成方圆 wgjy
|
||||
香港中文大学 xgvx
|
||||
一个天上一个地下 ygtx
|
||||
一亩三分地 ymsd
|
||||
一年之计在于春 ynvi
|
||||
远亲不如近邻 yqbl
|
||||
一朝权在手 yvqu
|
||||
一问三不知 ywsv
|
||||
彩蛋 cddj
|
||||
过渡 godu
|
||||
好吗 hcma
|
||||
何时 heui
|
||||
哪边 nabm
|
||||
哪次 naci
|
||||
哪点 nadm
|
||||
哪儿 naer
|
||||
哪个 nage
|
||||
哪里 nali
|
||||
哪天 natm
|
||||
哪种 navs
|
||||
哪位 naww
|
||||
哪些 naxp
|
||||
哪样 nayh
|
||||
倒是 dcui
|
||||
登陆 dglu
|
||||
低效 dixn
|
||||
胆子 djzi
|
||||
反查 fjia
|
||||
高速 gcsu
|
||||
高效 gcxn
|
||||
国情 goqk
|
||||
官网 grwh
|
||||
活着 hove
|
||||
话费 hxfw
|
||||
超卖 icmd
|
||||
卖点 mddm
|
||||
卖家 mdjx
|
||||
卖票 mdpn
|
||||
卖主 mdvu
|
||||
明明 mkmk
|
||||
每期 mwqi
|
||||
没人 mwrf
|
||||
赏赐 uhci
|
||||
谁知 uvvi
|
||||
稳健 wfjm
|
||||
拥护 yshu
|
||||
宗师 zsui
|
||||
按理 anli
|
||||
黯然 anrj
|
||||
暗自 anzi
|
||||
五笔 wubi
|
||||
座位 zoww
|
||||
@@ -0,0 +1,402 @@
|
||||
-- Rime Script >https://github.com/baopaau/rime-lua-collection/blob/master/calculator_translator.lua
|
||||
-- 簡易計算器(執行任何Lua表達式)
|
||||
--
|
||||
-- 格式:=<exp>
|
||||
-- Lambda語法糖:\<arg>.<exp>|
|
||||
--
|
||||
-- 例子:
|
||||
-- =1+1 輸出 2
|
||||
-- =floor(9^(8/7)*cos(deg(6))) 輸出 -3
|
||||
-- =e^pi>pi^e 輸出 true
|
||||
-- =max({1,7,2}) 輸出 7
|
||||
-- =map({1,2,3},\x.x^2|) 輸出 {1, 4, 9}
|
||||
-- =map(range(-5,5),\x.x*pi/4|,deriv(sin)) 輸出 {-0.7071, -1, -0.7071, 0, 0.7071, 1, 0.7071, 0, -0.7071, -1}
|
||||
-- =$(range(-5,5,0.01))(map,\x.-60*x^2-16*x+20|)(max)() 輸出 21.066
|
||||
-- =test(\x.trunc(sin(x),1e-3)==trunc(deriv(cos)(x),1e-3)|,range(-2,2,0.1)) 輸出 true
|
||||
--
|
||||
-- 安装:
|
||||
-- - 將本文件保存至 <rime>/lua/
|
||||
-- - 在 <rime>/rime.lua 新增一行:
|
||||
-- `calculator_translator = require("calculator_translator")`
|
||||
-- - 在 <rime>/<schema>.schema.yaml 新增:
|
||||
-- `engine/translators/@next: lua_translator@calculator_translator`
|
||||
-- `recognizer/patterns/expression: "^=.*$"`
|
||||
-- 註:
|
||||
-- - <rime> 替換爲RIME的共享目錄
|
||||
-- - <schema> 替換爲自己的方案ID
|
||||
-- - 如目錄/文件不存在,請自行創建
|
||||
|
||||
-- 定義全局函數、常數(注意命名空間污染)
|
||||
cos = math.cos
|
||||
sin = math.sin
|
||||
tan = math.tan
|
||||
acos = math.acos
|
||||
asin = math.asin
|
||||
atan = math.atan
|
||||
rad = math.rad
|
||||
deg = math.deg
|
||||
|
||||
abs = math.abs
|
||||
floor = math.floor
|
||||
ceil = math.ceil
|
||||
mod = math.fmod
|
||||
trunc = function (x, dc)
|
||||
if dc == nil then
|
||||
return math.modf(x)
|
||||
end
|
||||
return x - mod(x, dc)
|
||||
end
|
||||
|
||||
round = function (x, dc)
|
||||
dc = dc or 1
|
||||
local dif = mod(x, dc)
|
||||
if abs(dif) > dc / 2 then
|
||||
return x < 0 and x - dif - dc or x - dif + dc
|
||||
end
|
||||
return x - dif
|
||||
end
|
||||
|
||||
random = math.random
|
||||
randomseed = math.randomseed
|
||||
|
||||
inf = math.huge
|
||||
MAX_INT = math.maxinteger
|
||||
MIN_INT = math.mininteger
|
||||
pi = math.pi
|
||||
sqrt = math.sqrt
|
||||
exp = math.exp
|
||||
e = exp(1)
|
||||
ln = math.log
|
||||
log = function (x, base)
|
||||
base = base or 10
|
||||
return ln(x)/ln(base)
|
||||
end
|
||||
|
||||
min = function (arr)
|
||||
local m = inf
|
||||
for k, x in ipairs(arr) do
|
||||
m = x < m and x or m
|
||||
end
|
||||
return m
|
||||
end
|
||||
|
||||
max = function (arr)
|
||||
local m = -inf
|
||||
for k, x in ipairs(arr) do
|
||||
m = x > m and x or m
|
||||
end
|
||||
return m
|
||||
end
|
||||
|
||||
sum = function (t)
|
||||
local acc = 0
|
||||
for k,v in ipairs(t) do
|
||||
acc = acc + v
|
||||
end
|
||||
return acc
|
||||
end
|
||||
|
||||
avg = function (t)
|
||||
return sum(t) / #t
|
||||
end
|
||||
|
||||
isinteger = function (x)
|
||||
return math.fmod(x, 1) == 0
|
||||
end
|
||||
|
||||
-- iterator . array
|
||||
array = function (...)
|
||||
local arr = {}
|
||||
for v in ... do
|
||||
arr[#arr + 1] = v
|
||||
end
|
||||
return arr
|
||||
end
|
||||
|
||||
-- iterator <- [form, to)
|
||||
irange = function (from, to, step)
|
||||
if to == nil then
|
||||
to = from
|
||||
from = 0
|
||||
end
|
||||
step = step or 1
|
||||
local i = from - step
|
||||
to = to - step
|
||||
return function()
|
||||
if i < to then
|
||||
i = i + step
|
||||
return i
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- array <- [form, to)
|
||||
range = function (from, to, step)
|
||||
return array(irange(from, to, step))
|
||||
end
|
||||
|
||||
-- array . reversed iterator
|
||||
irev = function (arr)
|
||||
local i = #arr + 1
|
||||
return function()
|
||||
if i > 1 then
|
||||
i = i - 1
|
||||
return arr[i]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- array . reversed array
|
||||
arev = function (arr)
|
||||
return array(irev(arr))
|
||||
end
|
||||
|
||||
test = function (f, t)
|
||||
for k,v in ipairs(t) do
|
||||
if not f(v) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- # Functional
|
||||
map = function (t, ...)
|
||||
local ta = {}
|
||||
for k,v in pairs(t) do
|
||||
local tmp = v
|
||||
for _,f in pairs({...}) do tmp = f(tmp) end
|
||||
ta[k] = tmp
|
||||
end
|
||||
return ta
|
||||
end
|
||||
|
||||
filter = function (t, ...)
|
||||
local ta = {}
|
||||
local i = 1
|
||||
for k,v in pairs(t) do
|
||||
local erase = false
|
||||
for _,f in pairs({...}) do
|
||||
if not f(v) then
|
||||
erase = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if not erase then
|
||||
ta[i] = v
|
||||
i = i + 1
|
||||
end
|
||||
end
|
||||
return ta
|
||||
end
|
||||
|
||||
-- e.g: foldr({2,3},\n,x.x^n|,2) = 81
|
||||
foldr = function (t, f, acc)
|
||||
for k,v in pairs(t) do
|
||||
acc = f(acc, v)
|
||||
end
|
||||
return acc
|
||||
end
|
||||
|
||||
-- e.g: foldl({2,3},\n,x.x^n|,2) = 512
|
||||
foldl = function (t, f, acc)
|
||||
for v in irev(t) do
|
||||
acc = f(acc, v)
|
||||
end
|
||||
return acc
|
||||
end
|
||||
|
||||
-- 調用鏈生成函數(HOF for method chaining)
|
||||
-- e.g: chain(range(-5,5))(map,\x.x/5|)(map,sin)(map,\x.e^x*10|)(map,floor)()
|
||||
-- = floor(map(map(map(range(-5,5),\x.x/5|),sin),\x.e^x*10|))
|
||||
-- = {4, 4, 5, 6, 8, 10, 12, 14, 17, 20}
|
||||
-- 可以用 $ 代替 chain
|
||||
chain = function (t)
|
||||
local ta = t
|
||||
local function cf(f, ...)
|
||||
if f ~= nil then
|
||||
ta = f(ta, ...)
|
||||
return cf
|
||||
else
|
||||
return ta
|
||||
end
|
||||
end
|
||||
return cf
|
||||
end
|
||||
|
||||
-- # Statistics
|
||||
fac = function (n)
|
||||
local acc = 1
|
||||
for i = 2,n do
|
||||
acc = acc * i
|
||||
end
|
||||
return acc
|
||||
end
|
||||
|
||||
nPr = function (n, r)
|
||||
return fac(n) / fac(n - r)
|
||||
end
|
||||
|
||||
nCr = function (n, r)
|
||||
return nPr(n,r) / fac(r)
|
||||
end
|
||||
|
||||
MSE = function (t)
|
||||
local ss = 0
|
||||
local s = 0
|
||||
local n = #t
|
||||
for k,v in ipairs(t) do
|
||||
ss = ss + v*v
|
||||
s = s + v
|
||||
end
|
||||
return sqrt((n*ss - s*s) / (n*n))
|
||||
end
|
||||
|
||||
-- # Linear Algebra
|
||||
|
||||
|
||||
-- # Calculus
|
||||
-- Linear approximation
|
||||
lapproxd = function (f, delta)
|
||||
local delta = delta or 1e-8
|
||||
return function (x)
|
||||
return (f(x+delta) - f(x)) / delta
|
||||
end
|
||||
end
|
||||
|
||||
-- Symmetric approximation
|
||||
sapproxd = function (f, delta)
|
||||
local delta = delta or 1e-8
|
||||
return function (x)
|
||||
return (f(x+delta) - f(x-delta)) / delta / 2
|
||||
end
|
||||
end
|
||||
|
||||
-- 近似導數
|
||||
deriv = function (f, delta, dc)
|
||||
dc = dc or 1e-4
|
||||
local fd = sapproxd(f, delta)
|
||||
return function (x)
|
||||
return round(fd(x), dc)
|
||||
end
|
||||
end
|
||||
|
||||
-- Trapezoidal rule
|
||||
trapzo = function (f, a, b, n)
|
||||
local dif = b - a
|
||||
local acc = 0
|
||||
for i = 1, n-1 do
|
||||
acc = acc + f(a + dif * (i/n))
|
||||
end
|
||||
acc = acc * 2 + f(a) + f(b)
|
||||
acc = acc * dif / n / 2
|
||||
return acc
|
||||
end
|
||||
|
||||
-- 近似積分
|
||||
integ = function (f, delta, dc)
|
||||
delta = delta or 1e-4
|
||||
dc = dc or 1e-4
|
||||
return function (a, b)
|
||||
if b == nil then
|
||||
b = a
|
||||
a = 0
|
||||
end
|
||||
local n = round(abs(b - a) / delta)
|
||||
return round(trapzo(f, a, b, n), dc)
|
||||
end
|
||||
end
|
||||
|
||||
-- Runge-Kutta
|
||||
rk4 = function (f, timestep)
|
||||
local timestep = timestep or 0.01
|
||||
return function (start_x, start_y, time)
|
||||
local x = start_x
|
||||
local y = start_y
|
||||
local t = time
|
||||
-- loop until i >= t
|
||||
for i = 0, t, timestep do
|
||||
local k1 = f(x, y)
|
||||
local k2 = f(x + (timestep/2), y + (timestep/2)*k1)
|
||||
local k3 = f(x + (timestep/2), y + (timestep/2)*k2)
|
||||
local k4 = f(x + timestep, y + timestep*k3)
|
||||
y = y + (timestep/6)*(k1 + 2*k2 + 2*k3 + k4)
|
||||
x = x + timestep
|
||||
end
|
||||
return y
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- # System
|
||||
date = os.date
|
||||
time = os.time
|
||||
path = function ()
|
||||
return debug.getinfo(1).source:match("@?(.*/)")
|
||||
end
|
||||
|
||||
|
||||
local function serialize(obj)
|
||||
local type = type(obj)
|
||||
if type == "number" then
|
||||
return isinteger(obj) and floor(obj) or obj
|
||||
elseif type == "boolean" then
|
||||
return tostring(obj)
|
||||
elseif type == "string" then
|
||||
return '"'..obj..'"'
|
||||
elseif type == "table" then
|
||||
local str = "{"
|
||||
local i = 1
|
||||
for k, v in pairs(obj) do
|
||||
if i ~= k then
|
||||
str = str.."["..serialize(k).."]="
|
||||
end
|
||||
str = str..serialize(v)..", "
|
||||
i = i + 1
|
||||
end
|
||||
str = str:len() > 3 and str:sub(0,-3) or str
|
||||
return str.."}"
|
||||
elseif pcall(obj) then -- function類型
|
||||
return "callable"
|
||||
end
|
||||
return obj
|
||||
end
|
||||
|
||||
-- greedy:隨時求值(每次變化都會求值,否則結尾爲特定字符時求值)
|
||||
local greedy = true
|
||||
|
||||
local function calculator_translator(input, seg)
|
||||
if string.sub(input, 1, 1) ~= "=" then return end
|
||||
|
||||
local expfin = greedy or string.sub(input, -1, -1) == ";"
|
||||
local exp = (greedy or not expfin) and string.sub(input, 2, -1) or string.sub(input, 2, -2)
|
||||
|
||||
-- 空格輸入可能
|
||||
exp = exp:gsub("#", " ")
|
||||
|
||||
|
||||
if not expfin then return end
|
||||
|
||||
local expe = exp
|
||||
-- 鏈式調用語法糖
|
||||
expe = expe:gsub("%$", " chain ")
|
||||
-- lambda語法糖
|
||||
do
|
||||
local count
|
||||
repeat
|
||||
expe, count = expe:gsub("\\%s*([%a%d%s,_]-)%s*%.(.-)|", " (function (%1) return %2 end) ")
|
||||
until count == 0
|
||||
end
|
||||
--yield(Candidate("number", seg.start, seg._end, expe, "展開"))
|
||||
|
||||
-- 防止危險操作,禁用os和io命名空間
|
||||
if expe:find("i?os?%.") then return end
|
||||
-- return語句保證了只有合法的Lua表達式才可執行
|
||||
local result = load("return "..expe)()
|
||||
if result == nil then return end
|
||||
|
||||
result = serialize(result)
|
||||
yield(Candidate("number", seg.start, seg._end, exp.."="..result, ""))
|
||||
end
|
||||
|
||||
return calculator_translator
|
||||
@@ -0,0 +1,17 @@
|
||||
function date_translator(input, seg)
|
||||
if (input == "orq") then
|
||||
--- Candidate(type, start, end, text, comment)
|
||||
yield(Candidate("date", seg.start, seg._end, os.date("%Y年%m月%d日"), ""))
|
||||
yield(Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), " "))
|
||||
end
|
||||
end
|
||||
|
||||
function time_translator(input, seg)
|
||||
if (input == "ouj") then
|
||||
local cand = Candidate("time", seg.start, seg._end, os.date("%H:%M"), " ")
|
||||
cand.quality = 1
|
||||
yield(cand)
|
||||
end
|
||||
end
|
||||
|
||||
calculator_translator = require("calculator_translator")
|
||||
@@ -0,0 +1,39 @@
|
||||
customization:
|
||||
distribution_code_name: squirrel
|
||||
distribution_version: 0.14.0
|
||||
generator: "squirrel::UIStyleSettings"
|
||||
modified_time: "2019-06-23"
|
||||
rime_version: 1.5.3
|
||||
patch:
|
||||
"preset_color_schemes/metro":
|
||||
author: "flypy.com"
|
||||
back_color: 0xffffff # 候选条背景色
|
||||
border_color_width: 1
|
||||
#border_color: 0xe89f00 # 边框色
|
||||
#preedit_back_color: 0xf0403516 #新增,未知其意
|
||||
border_height: 8 # 窗口边界高度,大于圆角半径才生效
|
||||
border_width: 8 # 窗口边界宽度,大于圆角半径才生效
|
||||
candidate_format: "%c\u2005%@\u2005" # 用 1/6 em 空格 U+2005 来控制编号 %c 和候选词 %@ 前后的空间。
|
||||
corner_radius: 6 # 窗口圆角半径
|
||||
#hilited_corner_radius: 6 # 高亮圆角
|
||||
hilited_text_color: 0x000000 # 编码高亮
|
||||
hilited_back_color: 0xffffff # 编码背景高亮
|
||||
hilited_candidate_label_color: 0xeeeeee # 首选编号色
|
||||
hilited_candidate_text_color: 0xffffff # 首选文字色
|
||||
hilited_candidate_back_color: 0xe89f00 # 首选背景色
|
||||
hilited_comment_text_color: 0xcccccc # 首选提示字母色
|
||||
label_color: 0x555555 # 次选编号色
|
||||
candidate_text_color: 0x000000 # 次选文字色
|
||||
candidate_back_color: 0xffffff # 次选背景色
|
||||
comment_text_color: 0x555555 # 次选提示字母色
|
||||
horizontal: true # 候选窗横向显示
|
||||
font_point: 18 # 候选窗文字字号
|
||||
label_font_point: 14 # 候选窗编号字号
|
||||
inline_preedit: true # 开启嵌入编码
|
||||
name: "metro"
|
||||
text_color: 0x333333 # 编码行文字颜色,24位色值,16进制,BGR顺序
|
||||
"style/line_spacing": 12 # 候选词的行间距
|
||||
"style/color_scheme": metro
|
||||
"style/display_tray_icon": false
|
||||
"style/text_orientation": horizontal # horizontal | vertical
|
||||
|
||||
@@ -0,0 +1,372 @@
|
||||
# Squirrel settings
|
||||
# encoding: utf-8
|
||||
|
||||
config_version: '0.37'
|
||||
|
||||
us_keyboard_layout: true
|
||||
|
||||
# for veteran chord-typist
|
||||
chord_duration: 0.1 # seconds
|
||||
|
||||
# options: always | never | appropriate
|
||||
show_notifications_when: appropriate
|
||||
|
||||
style:
|
||||
color_scheme: native
|
||||
# optional: define both light and dark color schemes to match system appearance
|
||||
#color_scheme: solarized_light
|
||||
#color_scheme_dark: solarized_dark
|
||||
|
||||
# Deprecated since 0.36, Squirrel 0.15
|
||||
#horizontal: false
|
||||
# NOTE: do not set a default value for `candidate_list_layout`, in order to
|
||||
# keep the deprecated `horizontal` option working for existing users.
|
||||
#candidate_list_layout: stacked # stacked | linear
|
||||
text_orientation: horizontal # horizontal | vertical
|
||||
inline_preedit: true
|
||||
|
||||
corner_radius: 10
|
||||
hilited_corner_radius: 0
|
||||
border_height: 0
|
||||
border_width: 0
|
||||
# space between candidates in stacked layout
|
||||
line_spacing: 5
|
||||
# space between preedit and candidates in non-inline mode
|
||||
spacing: 10
|
||||
|
||||
#candidate_format: '%c. %@'
|
||||
|
||||
# adjust the base line of vertical text
|
||||
#base_offset: 6
|
||||
font_face: 'Lucida Grande'
|
||||
font_point: 21
|
||||
#label_font_face: 'Lucida Grande'
|
||||
label_font_point: 18
|
||||
#comment_font_face: 'Lucida Grande'
|
||||
comment_font_point: 18
|
||||
|
||||
preset_color_schemes:
|
||||
native:
|
||||
name: 系統配色
|
||||
|
||||
aqua:
|
||||
name: 碧水/Aqua
|
||||
author: 佛振 <chen.sst@gmail.com>
|
||||
text_color: 0x606060
|
||||
back_color: 0xeeeceeee
|
||||
candidate_text_color: 0x000000
|
||||
hilited_text_color: 0x000000
|
||||
hilited_candidate_text_color: 0xffffff
|
||||
hilited_candidate_back_color: 0xeefa3a0a
|
||||
comment_text_color: 0x5a5a5a
|
||||
hilited_comment_text_color: 0xfcac9d
|
||||
|
||||
azure:
|
||||
name: 青天/Azure
|
||||
author: 佛振 <chen.sst@gmail.com>
|
||||
text_color: 0xcfa677
|
||||
candidate_text_color: 0xffeacc
|
||||
back_color: 0xee8b4e01
|
||||
hilited_text_color: 0xffeacc
|
||||
hilited_candidate_text_color: 0x7ffeff
|
||||
hilited_candidate_back_color: 0x00000000
|
||||
comment_text_color: 0xc69664
|
||||
|
||||
luna:
|
||||
name: 明月/Luna
|
||||
author: 佛振 <chen.sst@gmail.com>
|
||||
text_color: 0xa5a5a5
|
||||
back_color: 0xdd000000
|
||||
candidate_text_color: 0xeceeee
|
||||
hilited_text_color: 0x7fffff
|
||||
hilited_candidate_text_color: 0x7fffff
|
||||
hilited_candidate_back_color: 0x40000000
|
||||
comment_text_color: 0xa5a5a5
|
||||
hilited_comment_text_color: 0x449c9d
|
||||
|
||||
ink:
|
||||
name: 墨池/Ink
|
||||
author: 佛振 <chen.sst@gmail.com>
|
||||
text_color: 0x5a5a5a
|
||||
back_color: 0xeeffffff
|
||||
candidate_text_color: 0x000000
|
||||
hilited_text_color: 0x000000
|
||||
#hilited_back_color: 0xdddddd
|
||||
hilited_candidate_text_color: 0xffffff
|
||||
hilited_candidate_back_color: 0xcc000000
|
||||
comment_text_color: 0x5a5a5a
|
||||
hilited_comment_text_color: 0x808080
|
||||
|
||||
lost_temple:
|
||||
name: 孤寺/Lost Temple
|
||||
author: 佛振 <chen.sst@gmail.com>, based on ir_black
|
||||
text_color: 0xe8f3f6
|
||||
back_color: 0xee303030
|
||||
hilited_text_color: 0x82e6ca
|
||||
hilited_candidate_text_color: 0x000000
|
||||
hilited_candidate_back_color: 0x82e6ca
|
||||
comment_text_color: 0xbb82e6ca
|
||||
hilited_comment_text_color: 0xbb203d34
|
||||
|
||||
dark_temple:
|
||||
name: 暗堂/Dark Temple
|
||||
author: 佛振 <chen.sst@gmail.com>, based on ir_black
|
||||
text_color: 0x92f6da
|
||||
back_color: 0x222222
|
||||
candidate_text_color: 0xd8e3e6
|
||||
hilited_text_color: 0xffcf9a
|
||||
hilited_back_color: 0x222222
|
||||
hilited_candidate_text_color: 0x92f6da
|
||||
hilited_candidate_back_color: 0x10000000 # 0x333333
|
||||
comment_text_color: 0x606cff
|
||||
|
||||
psionics:
|
||||
name: 幽能/Psionics
|
||||
author: 雨過之後、佛振
|
||||
text_color: 0xc2c2c2
|
||||
back_color: 0x444444
|
||||
candidate_text_color: 0xeeeeee
|
||||
hilited_text_color: 0xeeeeee
|
||||
hilited_back_color: 0x444444
|
||||
hilited_candidate_label_color: 0xfafafa
|
||||
hilited_candidate_text_color: 0xfafafa
|
||||
hilited_candidate_back_color: 0xd4bc00
|
||||
comment_text_color: 0x808080
|
||||
hilited_comment_text_color: 0x444444
|
||||
|
||||
purity_of_form:
|
||||
name: 純粹的形式/Purity of Form
|
||||
author: 雨過之後、佛振
|
||||
text_color: 0xc2c2c2
|
||||
back_color: 0x444444
|
||||
candidate_text_color: 0xeeeeee
|
||||
hilited_text_color: 0xeeeeee
|
||||
hilited_back_color: 0x444444
|
||||
hilited_candidate_text_color: 0x000000
|
||||
hilited_candidate_back_color: 0xfafafa
|
||||
comment_text_color: 0x808080
|
||||
|
||||
purity_of_essence:
|
||||
name: 純粹的本質/Purity of Essence
|
||||
author: 佛振
|
||||
text_color: 0x2c2ccc
|
||||
back_color: 0xfafafa
|
||||
candidate_text_color: 0x000000
|
||||
hilited_text_color: 0x000000
|
||||
hilited_back_color: 0xfafafa
|
||||
hilited_candidate_text_color: 0xeeeeee
|
||||
hilited_candidate_back_color: 0x444444
|
||||
comment_text_color: 0x808080
|
||||
|
||||
starcraft:
|
||||
name: 星際我爭霸/StarCraft
|
||||
author: Contralisk <contralisk@gmail.com>, original artwork by Blizzard Entertainment
|
||||
text_color: 0xccaa88
|
||||
candidate_text_color: 0x30bb55
|
||||
back_color: 0xee000000
|
||||
border_color: 0x1010a0
|
||||
hilited_text_color: 0xfecb96
|
||||
hilited_back_color: 0x000000
|
||||
hilited_candidate_text_color: 0x70ffaf
|
||||
hilited_candidate_back_color: 0x00000000
|
||||
comment_text_color: 0x1010d0
|
||||
hilited_comment_text_color: 0x1010f0
|
||||
|
||||
google:
|
||||
name: 谷歌/Google
|
||||
author: skoj <skoj@qq.com>
|
||||
text_color: 0x666666 #拼音串
|
||||
candidate_text_color: 0x000000 #非第一候选项
|
||||
back_color: 0xFFFFFF #背景
|
||||
border_color: 0xE2E2E2 #边框
|
||||
hilited_text_color: 0x000000 #拼音串高亮
|
||||
hilited_back_color: 0xFFFFFF #拼音串高亮背景
|
||||
hilited_candidate_text_color: 0xFFFFFF #第一候选项
|
||||
hilited_candidate_back_color: 0xCE7539 #第一候选项背景
|
||||
comment_text_color: 0x6D6D6D #注解文字
|
||||
hilited_comment_text_color: 0xEBC6B0 #注解文字高亮
|
||||
|
||||
solarized_rock:
|
||||
name: 曬經石/Solarized Rock
|
||||
author: "Aben <tntaben@gmail.com>, based on Ethan Schoonover's Solarized color scheme"
|
||||
back_color: 0x362b00
|
||||
border_color: 0x362b00
|
||||
text_color: 0x8236d3
|
||||
hilited_text_color: 0x98a12a
|
||||
candidate_text_color: 0x969483
|
||||
comment_text_color: 0xc098a12a
|
||||
hilited_candidate_text_color: 0xffffff
|
||||
hilited_candidate_back_color: 0x8236d3
|
||||
hilited_comment_text_color: 0x362b00
|
||||
|
||||
clean_white:
|
||||
name: 简约白/Clean White
|
||||
author: Chongyu Zhu <lembacon@gmail.com>, based on 搜狗「简约白」
|
||||
horizontal: true
|
||||
candidate_format: '%c %@'
|
||||
corner_radius: 6
|
||||
border_height: 6
|
||||
border_width: 6
|
||||
font_point: 16
|
||||
label_font_point: 12
|
||||
label_color: 0x888888
|
||||
text_color: 0x808080
|
||||
hilited_text_color: 0x000000
|
||||
candidate_text_color: 0x000000
|
||||
comment_text_color: 0x808080
|
||||
back_color: 0xeeeeee
|
||||
hilited_candidate_label_color: 0xa0c98915
|
||||
hilited_candidate_text_color: 0xc98915
|
||||
hilited_candidate_back_color: 0xeeeeee
|
||||
|
||||
apathy:
|
||||
name: 冷漠/Apathy
|
||||
author: LIANG Hai
|
||||
horizontal: true # 水平排列
|
||||
inline_preedit: true #单行显示,false双行显示
|
||||
candidate_format: "%c\u2005%@\u2005" # 编号 %c 和候选词 %@ 前后的空间
|
||||
corner_radius: 5 #候选条圆角
|
||||
border_height: 0
|
||||
border_width: 0
|
||||
back_color: 0xFFFFFF #候选条背景色
|
||||
font_face: "PingFangSC-Regular,HanaMinB" #候选词字体
|
||||
font_point: 16 #候选字词大小
|
||||
text_color: 0x424242 #高亮选中词颜色
|
||||
label_font_face: "STHeitiSC-Light" #候选词编号字体
|
||||
label_font_point: 12 #候选编号大小
|
||||
hilited_candidate_text_color: 0xEE6E00 #候选文字颜色
|
||||
hilited_candidate_back_color: 0xFFF0E4 #候选文字背景色
|
||||
comment_text_color: 0x999999 #拼音等提示文字颜色
|
||||
|
||||
dust:
|
||||
name: 浮尘/Dust
|
||||
author: Superoutman <asticosmo@gmail.com>
|
||||
horizontal: true # 水平排列
|
||||
inline_preedit: true #单行显示,false双行显示
|
||||
candidate_format: "%c\u2005%@\u2005" # 用 1/6 em 空格 U+2005 来控制编号 %c 和候选词 %@ 前后的空间。
|
||||
corner_radius: 2 #候选条圆角
|
||||
border_height: 3 # 窗口边界高度,大于圆角半径才生效
|
||||
border_width: 8 # 窗口边界宽度,大于圆角半径才生效
|
||||
back_color: 0xeeffffff #候选条背景色
|
||||
border_color: 0xE0B693 # 边框色
|
||||
font_face: "HYQiHei-55S Book,HanaMinA Regular" #候选词字体
|
||||
font_point: 14 #候选字词大小
|
||||
label_font_face: "SimHei" #候选词编号字体
|
||||
label_font_point: 10 #候选编号大小
|
||||
label_color: 0xcbcbcb # 预选栏编号颜色
|
||||
candidate_text_color: 0x555555 # 预选项文字颜色
|
||||
text_color: 0x424242 # 拼音行文字颜色,24位色值,16进制,BGR顺序
|
||||
comment_text_color: 0x999999 # 拼音等提示文字颜色
|
||||
hilited_text_color: 0x9e9e9e # 高亮拼音 (需要开启内嵌编码)
|
||||
hilited_candidate_text_color: 0x000000 # 第一候选项文字颜色
|
||||
hilited_candidate_back_color: 0xfff0e4 # 第一候选项背景背景色
|
||||
hilited_candidate_label_color: 0x555555 # 第一候选项编号颜色
|
||||
hilited_comment_text_color: 0x9e9e9e # 注解文字高亮
|
||||
|
||||
mojave_dark:
|
||||
name: 沙漠夜/Mojave Dark
|
||||
author: xiehuc <xiehuc@gmail.com>
|
||||
horizontal: true # 水平排列
|
||||
inline_preedit: true # 单行显示,false双行显示
|
||||
candidate_format: "%c\u2005%@" # 用 1/6 em 空格 U+2005 来控制编号 %c 和候选词 %@ 前后的空间。
|
||||
corner_radius: 5 # 候选条圆角
|
||||
hilited_corner_radius: 3 # 高亮圆角
|
||||
border_height: 6 # 窗口边界高度,大于圆角半径才生效
|
||||
border_width: 6 # 窗口边界宽度,大于圆角半径才生效
|
||||
font_face: "PingFangSC" # 候选词字体
|
||||
font_point: 16 # 候选字词大小
|
||||
label_font_point: 14 # 候选编号大小
|
||||
|
||||
text_color: 0xdedddd # 拼音行文字颜色,24位色值,16进制,BGR顺序
|
||||
back_color: 0x252320 # 候选条背景色
|
||||
label_color: 0x888785 # 预选栏编号颜色
|
||||
border_color: 0x020202 # 边框色
|
||||
candidate_text_color: 0xdedddd # 预选项文字颜色
|
||||
hilited_text_color: 0xdedddd # 高亮拼音 (需要开启内嵌编码)
|
||||
hilited_back_color: 0x252320 # 高亮拼音 (需要开启内嵌编码)
|
||||
hilited_candidate_text_color: 0xffffff # 第一候选项文字颜色
|
||||
hilited_candidate_back_color: 0xcb5d00 # 第一候选项背景背景色
|
||||
hilited_candidate_label_color: 0xffffff # 第一候选项编号颜色
|
||||
comment_text_color: 0xdedddd # 拼音等提示文字颜色
|
||||
#hilited_comment_text_color: 0xdedddd # 注解文字高亮
|
||||
|
||||
solarized_light:
|
||||
name: 曬經・日/Solarized Light
|
||||
author: 雪齋 <lyc20041@gmail.com>
|
||||
color_space: display_p3 # Only available on macOS 10.12+
|
||||
back_color: 0xf0E5F6FB #Lab 97, 0, 10
|
||||
border_color: 0xf0EDFFFF #Lab 100, 0, 10
|
||||
preedit_back_color: 0xf0D7E8ED #Lab 92, 0, 10
|
||||
candidate_text_color: 0x3942CB #Lab 50, 65, 45
|
||||
label_color: 0x2566C6 #Lab 55, 45, 65
|
||||
comment_text_color: 0x8144C2 #Lab 50, 65, -5
|
||||
text_color: 0x756E5D #Lab 45, -7, -7
|
||||
hilited_back_color: 0xf0C9DADF #Lab 87, 0, 10
|
||||
hilited_candidate_back_color: 0x403516 #Lab 20, -12, -12
|
||||
hilited_candidate_text_color: 0x989F52 #Lab 60, -35, -5
|
||||
hilited_candidate_label_color: 0xCC8947 #Lab 55, -10, -45
|
||||
hilited_comment_text_color: 0x289989 #Lab 60, -20, 65
|
||||
hilited_text_color: 0xBE706D #Lab 50, 15, -45
|
||||
|
||||
solarized_dark:
|
||||
name: 曬經・月/Solarized Dark
|
||||
author: 雪齋 <lyc20041@gmail.com>
|
||||
color_space: display_p3 # Only available on macOS 10.12+
|
||||
back_color: 0xf0352A0A #Lab 15, -12, -12
|
||||
border_color: 0xf02A1F00 #Lab 10, -12, -12
|
||||
preedit_back_color: 0xf0403516 #Lab 20, -12, -12
|
||||
candidate_text_color: 0x989F52 #Lab 60, -35, -5
|
||||
label_color: 0xCC8947 #Lab 55, -10, -45
|
||||
comment_text_color: 0x289989 #Lab 60, -20, 65
|
||||
text_color: 0xA1A095 #Lab 65, -05, -02
|
||||
hilited_back_color: 0xf04C4022 #Lab 25, -12, -12
|
||||
hilited_candidate_back_color: 0xD7E8ED #Lab 92, 0, 10
|
||||
hilited_candidate_text_color: 0x3942CB #Lab 50, 65, 45
|
||||
hilited_candidate_label_color: 0x2566C6 #Lab 55, 45, 65
|
||||
hilited_comment_text_color: 0x8144C2 #Lab 50, 65, -5
|
||||
hilited_text_color: 0x2C8BAE #Lab 60, 10, 65
|
||||
|
||||
app_options:
|
||||
com.apple.Spotlight:
|
||||
ascii_mode: true
|
||||
com.alfredapp.Alfred:
|
||||
ascii_mode: true
|
||||
com.runningwithcrayons.Alfred-2:
|
||||
ascii_mode: true
|
||||
com.blacktree.Quicksilver:
|
||||
ascii_mode: true
|
||||
com.apple.Terminal:
|
||||
ascii_mode: true
|
||||
no_inline: true
|
||||
com.googlecode.iterm2:
|
||||
ascii_mode: true
|
||||
no_inline: true
|
||||
org.vim.MacVim:
|
||||
ascii_mode: true # 初始爲西文模式
|
||||
no_inline: true # 不使用行內編輯
|
||||
vim_mode: true # 退出VIM插入模式自動切換輸入法狀態
|
||||
com.apple.dt.Xcode:
|
||||
ascii_mode: true
|
||||
com.barebones.textwrangler:
|
||||
ascii_mode: true
|
||||
com.macromates.TextMate.preview:
|
||||
ascii_mode: true
|
||||
com.github.atom:
|
||||
ascii_mode: true
|
||||
com.microsoft.VSCode:
|
||||
ascii_mode: true
|
||||
com.sublimetext.2:
|
||||
ascii_mode: true
|
||||
org.gnu.Aquamacs:
|
||||
ascii_mode: true
|
||||
org.gnu.Emacs:
|
||||
ascii_mode: true
|
||||
no_inline: true
|
||||
co.zeit.hyper:
|
||||
ascii_mode: true
|
||||
com.google.Chrome:
|
||||
# 規避 https://github.com/rime/squirrel/issues/435
|
||||
inline: true
|
||||
ru.keepcoder.Telegram:
|
||||
# 規避 https://github.com/rime/squirrel/issues/475
|
||||
inline: true
|
||||
+537
@@ -0,0 +1,537 @@
|
||||
# This file is a modified version based on default i3-config-wizard config
|
||||
# Maintainer: ryan4yin [xiaoyin_c@qq.com]
|
||||
|
||||
#######################
|
||||
# config starts here: #
|
||||
#######################
|
||||
|
||||
# Font for window titles. Will also be used by the bar unless a different font
|
||||
# is used in the bar {} block below.
|
||||
# This font is widely installed, provides lots of unicode glyphs, right-to-left
|
||||
# text rendering and scalability on retina/hidpi displays (thanks to pango).
|
||||
font pango: Noto Sans Regular 10
|
||||
|
||||
# set the mod key to the winkey:
|
||||
set $mod Mod4
|
||||
|
||||
#####################
|
||||
# workspace layout: #
|
||||
#####################
|
||||
|
||||
# default i3 tiling mode:
|
||||
workspace_layout default
|
||||
|
||||
# i3 stacking layout:
|
||||
# Each window will be fullscreen and tabbed top to bottom.
|
||||
#workspace_layout stacking
|
||||
|
||||
# i3 tabbed layout:
|
||||
# Each new window will open fullscreen as a tab (left to right)
|
||||
#workspace_layout tabbed
|
||||
|
||||
##############################
|
||||
# extra options for windows: #
|
||||
##############################
|
||||
|
||||
#border indicator on windows:
|
||||
new_window pixel 1
|
||||
|
||||
# thin borders
|
||||
# hide_edge_borders both
|
||||
|
||||
# Set inner/outer gaps
|
||||
gaps inner 6
|
||||
gaps outer 3
|
||||
|
||||
# show window title bars (not officially supported with i3gaps)
|
||||
#default_border normal
|
||||
|
||||
# window title alignment
|
||||
#title_align center
|
||||
|
||||
# Use Mouse+$mod to drag floating windows to their wanted position
|
||||
floating_modifier $mod
|
||||
|
||||
# switch/iterate between workspaces
|
||||
bindsym $mod+Tab workspace next
|
||||
bindsym $mod+Shift+Tab workspace prev
|
||||
|
||||
# switch to workspace
|
||||
bindsym $mod+1 workspace $ws1
|
||||
bindsym $mod+2 workspace $ws2
|
||||
bindsym $mod+3 workspace $ws3
|
||||
bindsym $mod+4 workspace $ws4
|
||||
bindsym $mod+5 workspace $ws5
|
||||
bindsym $mod+6 workspace $ws6
|
||||
bindsym $mod+7 workspace $ws7
|
||||
bindsym $mod+8 workspace $ws8
|
||||
bindsym $mod+9 workspace $ws9
|
||||
bindsym $mod+0 workspace $ws10
|
||||
|
||||
# switch to workspace with numpad keys
|
||||
bindcode $mod+87 workspace 1
|
||||
bindcode $mod+88 workspace 2
|
||||
bindcode $mod+89 workspace 3
|
||||
bindcode $mod+83 workspace 4
|
||||
bindcode $mod+84 workspace 5
|
||||
bindcode $mod+85 workspace 6
|
||||
bindcode $mod+79 workspace 7
|
||||
bindcode $mod+80 workspace 8
|
||||
bindcode $mod+81 workspace 9
|
||||
bindcode $mod+90 workspace 10
|
||||
|
||||
# switch to workspace with numlock numpad keys
|
||||
bindcode $mod+Mod2+87 workspace $ws1
|
||||
bindcode $mod+Mod2+88 workspace $ws2
|
||||
bindcode $mod+Mod2+89 workspace $ws3
|
||||
bindcode $mod+Mod2+83 workspace $ws4
|
||||
bindcode $mod+Mod2+84 workspace $ws5
|
||||
bindcode $mod+Mod2+85 workspace $ws6
|
||||
bindcode $mod+Mod2+79 workspace $ws7
|
||||
bindcode $mod+Mod2+80 workspace $ws8
|
||||
bindcode $mod+Mod2+81 workspace $ws9
|
||||
bindcode $mod+Mod2+90 workspace $ws10
|
||||
|
||||
# move focused container to workspace
|
||||
bindsym $mod+Shift+1 move container to workspace $ws1
|
||||
bindsym $mod+Shift+2 move container to workspace $ws2
|
||||
bindsym $mod+Shift+3 move container to workspace $ws3
|
||||
bindsym $mod+Shift+4 move container to workspace $ws4
|
||||
bindsym $mod+Shift+5 move container to workspace $ws5
|
||||
bindsym $mod+Shift+6 move container to workspace $ws6
|
||||
bindsym $mod+Shift+7 move container to workspace $ws7
|
||||
bindsym $mod+Shift+8 move container to workspace $ws8
|
||||
bindsym $mod+Shift+9 move container to workspace $ws9
|
||||
bindsym $mod+Shift+0 move container to workspace $ws10
|
||||
|
||||
# move focused container to workspace with numpad keys
|
||||
bindcode $mod+Shift+Mod2+87 move container to workspace $ws1
|
||||
bindcode $mod+Shift+Mod2+88 move container to workspace $ws2
|
||||
bindcode $mod+Shift+Mod2+89 move container to workspace $ws3
|
||||
bindcode $mod+Shift+Mod2+83 move container to workspace $ws4
|
||||
bindcode $mod+Shift+Mod2+84 move container to workspace $ws5
|
||||
bindcode $mod+Shift+Mod2+85 move container to workspace $ws6
|
||||
bindcode $mod+Shift+Mod2+79 move container to workspace $ws7
|
||||
bindcode $mod+Shift+Mod2+80 move container to workspace $ws8
|
||||
bindcode $mod+Shift+Mod2+81 move container to workspace $ws9
|
||||
bindcode $mod+Shift+Mod2+90 move container to workspace $ws10
|
||||
|
||||
# move focused container to workspace with numpad keys
|
||||
bindcode $mod+Shift+87 move container to workspace $ws1
|
||||
bindcode $mod+Shift+88 move container to workspace $ws2
|
||||
bindcode $mod+Shift+89 move container to workspace $ws3
|
||||
bindcode $mod+Shift+83 move container to workspace $ws4
|
||||
bindcode $mod+Shift+84 move container to workspace $ws5
|
||||
bindcode $mod+Shift+85 move container to workspace $ws6
|
||||
bindcode $mod+Shift+79 move container to workspace $ws7
|
||||
bindcode $mod+Shift+80 move container to workspace $ws8
|
||||
bindcode $mod+Shift+81 move container to workspace $ws9
|
||||
bindcode $mod+Shift+90 move container to workspace $ws10
|
||||
|
||||
# resize window (you can also use the mouse for that):
|
||||
#mode "resize" {
|
||||
# These bindings trigger as soon as you enter the resize mode
|
||||
# Pressing left will shrink the window's width.
|
||||
# Pressing right will grow the window's width.
|
||||
# Pressing up will shrink the window's height.
|
||||
# Pressing down will grow the window's height.
|
||||
# bindsym j resize shrink width 10 px or 10 ppt
|
||||
# bindsym k resize grow height 10 px or 10 ppt
|
||||
# bindsym l resize shrink height 10 px or 10 ppt
|
||||
# bindsym ntilde resize grow width 10 px or 10 ppt
|
||||
|
||||
# same bindings, but for the arrow keys
|
||||
# bindsym Left resize shrink width 10 px or 10 ppt
|
||||
# bindsym Down resize grow height 10 px or 10 ppt
|
||||
# bindsym Up resize shrink height 10 px or 10 ppt
|
||||
# bindsym Right resize grow width 10 px or 10 ppt
|
||||
|
||||
# back to normal: Enter or Escape
|
||||
# bindsym Return mode "default"
|
||||
# bindsym Escape mode "default"
|
||||
#}
|
||||
|
||||
bindsym $mod+r mode "resize"
|
||||
|
||||
######################################
|
||||
# keybindings for different actions: #
|
||||
######################################
|
||||
|
||||
# start a terminal
|
||||
bindsym $mod+Return exec alacritty
|
||||
|
||||
# kill focused window
|
||||
bindsym $mod+q kill
|
||||
|
||||
# exit-menu
|
||||
bindsym $mod+Shift+e exec ~/.config/i3/scripts/powermenu
|
||||
|
||||
# Lock the system
|
||||
# lock with a picture:
|
||||
#bindsym $mod+l exec i3lock -i ~/.config/i3/i3-lock-screen.png -p default|win -t
|
||||
# lock by blurring the screen:
|
||||
bindsym $mod+l exec ~/.config/i3/scripts/blur-lock
|
||||
|
||||
# reload the configuration file
|
||||
bindsym $mod+Shift+c reload
|
||||
|
||||
# restart i3 inplace (preserves your layout/session, can be used to update i3)
|
||||
bindsym $mod+Shift+r restart
|
||||
|
||||
# keybinding in fancy rofi (automated):
|
||||
bindsym F1 exec ~/.config/i3/scripts/keyhint-2
|
||||
# alternative
|
||||
# keybinding list in editor:
|
||||
# bindsym $mod+F1 exec xed ~/.config/i3/keybindings
|
||||
|
||||
# Backlight control
|
||||
bindsym XF86MonBrightnessUp exec xbacklight +10 && notify-send "Brightness - $(xbacklight -get | cut -d '.' -f 1)%"
|
||||
bindsym XF86MonBrightnessDown exec xbacklight -10 && notify-send "Brightness - $(xbacklight -get | cut -d '.' -f 1)%"
|
||||
|
||||
# change focus
|
||||
bindsym $mod+j focus left
|
||||
bindsym $mod+k focus down
|
||||
bindsym $mod+b focus up
|
||||
bindsym $mod+o focus right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
bindsym $mod+Left focus left
|
||||
bindsym $mod+Down focus down
|
||||
bindsym $mod+Up focus up
|
||||
bindsym $mod+Right focus right
|
||||
|
||||
# move focused window
|
||||
bindsym $mod+Shift+j move left
|
||||
bindsym $mod+Shift+k move down
|
||||
bindsym $mod+Shift+b move up
|
||||
bindsym $mod+Shift+o move right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
bindsym $mod+Shift+Left move left
|
||||
bindsym $mod+Shift+Down move down
|
||||
bindsym $mod+Shift+Up move up
|
||||
bindsym $mod+Shift+Right move right
|
||||
|
||||
# split in horizontal orientation
|
||||
bindsym $mod+h split h
|
||||
|
||||
# split in vertical orientation
|
||||
bindsym $mod+v split v
|
||||
|
||||
# enter fullscreen mode for the focused container
|
||||
bindsym $mod+f fullscreen toggle
|
||||
|
||||
# change container layout (stacked, tabbed, toggle split)
|
||||
bindsym $mod+s layout stacking
|
||||
bindsym $mod+g layout tabbed
|
||||
bindsym $mod+e layout toggle split
|
||||
|
||||
# toggle tiling / floating
|
||||
bindsym $mod+Shift+space floating toggle
|
||||
|
||||
# change focus between tiling / floating windows
|
||||
bindsym $mod+space focus mode_toggle
|
||||
|
||||
# focus the parent container
|
||||
bindsym $mod+a focus parent
|
||||
|
||||
# open new empty workspace
|
||||
bindsym $mod+Shift+n exec ~/.config/i3/scripts/empty_workspace
|
||||
|
||||
# Multimedia Keys
|
||||
|
||||
# volume
|
||||
bindsym XF86AudioRaiseVolume exec amixer -D pulse sset Master 5%+ && pkill -RTMIN+1 i3blocks
|
||||
bindsym XF86AudioLowerVolume exec amixer -D pulse sset Master 5%- && pkill -RTMIN+1 i3blocks
|
||||
|
||||
# gradular volume control
|
||||
bindsym $mod+XF86AudioRaiseVolume exec amixer -D pulse sset Master 1%+ && pkill -RTMIN+1 i3blocks
|
||||
bindsym $mod+XF86AudioLowerVolume exec amixer -D pulse sset Master 1%- && pkill -RTMIN+1 i3blocks
|
||||
|
||||
# mute
|
||||
bindsym XF86AudioMute exec amixer sset Master toggle && killall -USR1 i3blocks
|
||||
|
||||
# audio control
|
||||
bindsym XF86AudioPlay exec playerctl play
|
||||
bindsym XF86AudioPause exec playerctl pause
|
||||
bindsym XF86AudioNext exec playerctl next
|
||||
bindsym XF86AudioPrev exec playerctl previous
|
||||
|
||||
# Redirect sound to headphones
|
||||
bindsym $mod+p exec /usr/local/bin/switch-audio-port
|
||||
|
||||
## App shortcuts
|
||||
bindsym $mod+w exec /usr/bin/firefox
|
||||
bindsym $mod+n exec /usr/bin/thunar
|
||||
bindsym Print exec scrot ~/%Y-%m-%d-%T-screenshot.png && notify-send "Screenshot saved to ~/$(date +"%Y-%m-%d-%T")-screenshot.png"
|
||||
|
||||
# Power Profiles menu switcher (rofi)
|
||||
bindsym $mod+Shift+p exec ~/.config/i3/scripts/power-profiles
|
||||
|
||||
##########################################
|
||||
# configuration for workspace behaviour: #
|
||||
##########################################
|
||||
|
||||
# Define names for default workspaces for which we configure key bindings later on.
|
||||
# We use variables to avoid repeating the names in multiple places.
|
||||
set $ws1 "1:"
|
||||
set $ws2 "2:"
|
||||
set $ws3 "3:"
|
||||
set $ws4 "4:"
|
||||
set $ws5 "5:"
|
||||
set $ws6 "6"
|
||||
set $ws7 "7"
|
||||
set $ws8 "8"
|
||||
set $ws9 "9"
|
||||
set $ws10 "10"
|
||||
|
||||
# use workspaces on different displays:
|
||||
# where you have to replace VGA-0/HDMI-0 with the names for your displays
|
||||
# you can get from xrandr command
|
||||
#workspace $ws1 output VGA-0
|
||||
#workspace $ws2 output VGA-0
|
||||
#workspace $ws3 output HDMI-0
|
||||
#workspace $ws4 output HDMI-0
|
||||
#workspace $ws5 output HDMI-0
|
||||
|
||||
# bind program to workspace and focus to them on startup:
|
||||
assign [class="Terminal"] $ws1
|
||||
assign [class="(?i)firefox"] $ws2
|
||||
assign [class="Thunar"] $ws3
|
||||
assign [class="thunderbird"] $ws4
|
||||
assign [class="TelegramDesktop"] $ws5
|
||||
|
||||
# automatic set focus new window if it opens on another workspace than the current:
|
||||
for_window [class=Terminal] focus
|
||||
for_window [class=(?i)firefox] focus
|
||||
for_window [class=Thunar] focus
|
||||
for_window [class=Thunderbird] focus
|
||||
for_window [class=TelegramDesktop] focus
|
||||
|
||||
##############
|
||||
# compositor #
|
||||
##############
|
||||
|
||||
# transparency
|
||||
# options could need changes, related to used GPU and drivers.
|
||||
# to find the right setting consult the archwiki or ask at the forum.
|
||||
#
|
||||
# picom: https://wiki.archlinux.org/title/Picom
|
||||
# manpage: https://man.archlinux.org/man/picom.1.en
|
||||
# The default configuration is available in /etc/xdg/picom.conf
|
||||
# For modifications, it can be copied to ~/.config/picom/picom.conf or ~/.config/picom.conf
|
||||
# install picom package (yay -S picom)
|
||||
# start using default config
|
||||
exec_always --no-startup-id picom -b
|
||||
#
|
||||
# for custom config:
|
||||
#exec_always --no-startup-id picom --config ~/.config/picom.conf
|
||||
|
||||
#############################################
|
||||
# autostart applications/services on login: #
|
||||
#############################################
|
||||
|
||||
#get auth work with polkit-gnome
|
||||
exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||
|
||||
# dex execute .desktop files + apps using /etc/xdg/autostart.
|
||||
exec --no-startup-id dex --autostart --environment i3
|
||||
|
||||
# num lock activated
|
||||
#exec --no-startup-id numlockx on
|
||||
|
||||
# start a script to setup displays
|
||||
# uncomment the next line, use arandr to setup displays and save the file as monitor:
|
||||
# exec --no-startup-id ~/.screenlayout/monitor.sh
|
||||
|
||||
# set wallpaper
|
||||
# exec --no-startup-id sleep 2 && nitrogen --restore
|
||||
exec --no-startup-id sleep 1 && feh --bg-fill ~/.config/i3/wallpaper.jpg
|
||||
|
||||
# set powersavings for display:
|
||||
exec --no-startup-id xset s 480 dpms 600 600 600
|
||||
|
||||
# disable power saving (for example if using xscreensaver)
|
||||
#exec --no-startup-id xset -dpms
|
||||
|
||||
# use xautolock to use autosuspend rules for mobile devices
|
||||
# https://wiki.archlinux.org/title/Session_lock#xautolock
|
||||
#exec --no-startup-id xautolock -time 60 -locker "systemctl suspend"
|
||||
|
||||
|
||||
# xscreensaver
|
||||
# https://www.jwz.org/xscreensaver
|
||||
#exec --no-startup-id xscreensaver --no-splash
|
||||
|
||||
# Desktop notifications
|
||||
# dunst config used ~/.config/dunst/dunstrc
|
||||
# set alternative config if needed:
|
||||
#exec --no-startup-id /usr/bin/dunst --config ~/.config/dunst/dunstrc
|
||||
# may yneed to run dbus-launch explicitly:
|
||||
#exec --no-startup-id dbus-launch /usr/bin/dunst
|
||||
exec --no-startup-id /usr/bin/dunst
|
||||
|
||||
|
||||
# autotiling script
|
||||
# https://github.com/nwg-piotr/autotiling
|
||||
# `yay -S autotiling ; (it is in AUR)
|
||||
#exec_always --no-startup-id autotiling
|
||||
|
||||
# Autostart apps as you like
|
||||
#exec --no-startup-id sleep 2 && Terminal
|
||||
#exec --no-startup-id sleep 3 && thunar
|
||||
|
||||
###############
|
||||
# system tray #
|
||||
###############
|
||||
# if you do not use dex: exec --no-startup-id dex --autostart --environment i3
|
||||
# you need to have tray apps started manually one by one:
|
||||
|
||||
# start blueberry app for managing bluetooth devices from tray:
|
||||
#exec --no-startup-id blueberry-tray
|
||||
|
||||
# networkmanager-applet
|
||||
#exec --no-startup-id nm-applet
|
||||
|
||||
##################
|
||||
# floating rules #
|
||||
##################
|
||||
|
||||
# set floating (nontiling) for apps needing it
|
||||
for_window [class="Yad" instance="yad"] floating enable
|
||||
for_window [class="Galculator" instance="galculator"] floating enable
|
||||
for_window [class="Blueberry.py" instance="blueberry.py"] floating enable
|
||||
|
||||
# set floating (nontiling) for special apps
|
||||
for_window [class="Xsane" instance="xsane"] floating enable
|
||||
for_window [class="Pavucontrol" instance="pavucontrol"] floating enable
|
||||
for_window [class="qt5ct" instance="qt5ct"] floating enable
|
||||
for_window [class="Blueberry.py" instance="blueberry.py"] floating enable
|
||||
for_window [class="Bluetooth-sendto" instance="bluetooth-sendto"] floating enable
|
||||
for_window [class="Pamac-manager"] floating enable
|
||||
for_window [window_role="About"] floating enable
|
||||
|
||||
# set border of floating window
|
||||
for_window [class="urxvt"] border pixel 1
|
||||
|
||||
# set size of floating window
|
||||
#for_window [window_role="(?i)GtkFileChooserDialog"] resize set 640 480 #to set size of file choose dialog
|
||||
#for_window [class=".*"] resize set 640 480 #to change size of all floating windows
|
||||
|
||||
# set position of floating window
|
||||
#for_window [class=".*"] move position center
|
||||
|
||||
######################################
|
||||
# color settings for bar and windows #
|
||||
######################################
|
||||
|
||||
# Define colors variables:
|
||||
set $darkbluetrans #08052be6
|
||||
set $darkblue #08052b
|
||||
set $lightblue #5294e2
|
||||
set $urgentred #e53935
|
||||
set $white #ffffff
|
||||
set $black #000000
|
||||
set $purple #e345ff
|
||||
set $darkgrey #383c4a
|
||||
set $grey #b0b5bd
|
||||
set $mediumgrey #8b8b8b
|
||||
set $yellowbrown #e1b700
|
||||
|
||||
# define colors for windows:
|
||||
#class border bground text indicator child_border
|
||||
client.focused $lightblue $darkblue $white $mediumgrey $mediumgrey
|
||||
client.unfocused $darkblue $darkblue $grey $darkgrey $darkgrey
|
||||
client.focused_inactive $darkblue $darkblue $grey $black $black
|
||||
client.urgent $urgentred $urgentred $white $yellowbrown $yellowbrown
|
||||
|
||||
############################################
|
||||
# bar settings (input comes from i3blocks) #
|
||||
############################################
|
||||
|
||||
# Start i3bar to display a workspace bar
|
||||
# (plus the system information i3status finds out, if available)
|
||||
bar {
|
||||
font pango: Noto Sans Regular 10
|
||||
status_command i3blocks -c ~/.config/i3/i3blocks.conf
|
||||
position bottom
|
||||
# i3bar_command i3bar --transparency
|
||||
# it could be that you have no primary display set: set one (xrandr --output <output> --primary)
|
||||
# reference: https://i3wm.org/docs/userguide.html#_tray_output
|
||||
#tray_output primary
|
||||
tray_padding 0
|
||||
|
||||
# When strip_workspace_numbers is set to yes,
|
||||
# any workspace that has a name of the form
|
||||
# “[n][:][NAME]” will display only the name.
|
||||
strip_workspace_numbers yes
|
||||
##strip_workspace_name no
|
||||
|
||||
colors {
|
||||
separator $purple
|
||||
background $darkgrey
|
||||
statusline $white
|
||||
# border bg txt indicator
|
||||
focused_workspace $mediumgrey $grey $darkgrey $purple
|
||||
active_workspace $lightblue $mediumgrey $darkgrey $purple
|
||||
inactive_workspace $darkgrey $darkgrey $grey $purple
|
||||
urgent_workspace $urgentred $urgentred $white $purple
|
||||
}
|
||||
}
|
||||
|
||||
# you can add different bars for multidisplay setups on each display:
|
||||
# set output HDMI-0 to the display you want the bar, --transparency can be set.
|
||||
# Transparency needs rgba color codes to be used where the last two letters are the transparency factor see here:
|
||||
# https://gist.github.com/lopspower/03fb1cc0ac9f32ef38f4
|
||||
# #08052be6 --> e6=90%
|
||||
|
||||
# bar {
|
||||
# font pango: Noto Sans Regular 10
|
||||
# status_command i3blocks -c ~/.config/i3/i3blocks-2.conf
|
||||
# i3bar_command i3bar --transparency
|
||||
# output HDMI-0
|
||||
# position bottom
|
||||
#
|
||||
# When strip_workspace_numbers is set to yes,
|
||||
# any workspace that has a name of the form
|
||||
# “[n][:][NAME]” will display only the name.
|
||||
#strip_workspace_numbers yes
|
||||
##strip_workspace_name no
|
||||
#
|
||||
# colors {
|
||||
# separator $purple
|
||||
# background $darkbluetrans
|
||||
# statusline $white
|
||||
# border bg txt indicator
|
||||
# focused_workspace $lighterblue $lighterblue $darkblue $purple
|
||||
# active_workspace $lightdblue $lightdblue $darkblue $purple
|
||||
# inactive_workspace $darkblue $darkblue $lightdblue $purple
|
||||
# urgent_workspace $urgentred $urgentred $white $purple
|
||||
# }
|
||||
#}
|
||||
|
||||
#####################################
|
||||
# Application menu handled by rofi: #
|
||||
#####################################
|
||||
|
||||
## rofi bindings fancy application menu ($mod+d /F9 optional disabled)
|
||||
|
||||
bindsym $mod+d exec rofi -modi drun -show drun \
|
||||
-config ~/.config/rofi/rofidmenu.rasi
|
||||
|
||||
#bindsym F9 exec rofi -modi drun -show drun \
|
||||
# -config ~/.config/rofi/rofidmenu.rasi
|
||||
|
||||
## rofi bindings for window menu ($mod+t /F10 optional disabled)
|
||||
|
||||
bindsym $mod+t exec rofi -show window \
|
||||
-config ~/.config/rofi/rofidmenu.rasi
|
||||
|
||||
#bindsym F10 exec rofi -show window \
|
||||
# -config ~/.config/rofi/rofidmenu.rasi
|
||||
|
||||
## rofi bindings to manage clipboard (install rofi-greenclip from the AUR)
|
||||
|
||||
#exec --no-startup-id greenclip daemon>/dev/null
|
||||
#bindsym $mod+c exec --no-startup-id rofi -modi "clipboard:greenclip print" -show clipboard \
|
||||
# -config ~/.config/rofi/rofidmenu.rasi
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
# i3 配置,基于 https://github.com/endeavouros-team/endeavouros-i3wm-setup
|
||||
# 直接从当前文件夹中读取配置文件作为配置内容
|
||||
|
||||
# wallpaper, binary file
|
||||
home.file.".config/i3/wallpaper.jpg".source = ../../wallpaper.jpg;
|
||||
home.file.".config/i3/config".source = ./config;
|
||||
home.file.".config/i3/i3blocks.conf".source = ./i3blocks.conf;
|
||||
home.file.".config/i3/keybindings".source = ./keybindings;
|
||||
home.file.".config/i3/scripts" = {
|
||||
source = ./scripts;
|
||||
# copy the scripts directory recursively
|
||||
recursive = true;
|
||||
executable = true; # make all scripts executable
|
||||
};
|
||||
|
||||
# 直接以 text 的方式,在 nix 配置文件中硬编码文件内容
|
||||
# home.file.".xxx".text = ''
|
||||
# xxx
|
||||
# '';
|
||||
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
# i3blocks config file changed for EndeavourOS-i3 setup
|
||||
|
||||
# source is available here:
|
||||
# https://raw.githubusercontent.com/endeavouros-team/endeavouros-i3wm-setup/main/.config/i3/i3blocks.conf
|
||||
# Maintainer: joekamprad [joekamprad@endeavouros.com]
|
||||
# Former Visual Designer: Florent Valetti [@FLVAL EndeavourOS]
|
||||
# created for i3wm setup on EndeavourOS
|
||||
# https://endeavouros.com
|
||||
|
||||
# cheatsheet for icon fonts used on the block-bar:
|
||||
# https://fontawesome.com/v4.7/cheatsheet/
|
||||
|
||||
# --> to update this run the following command:
|
||||
# wget --backups=1 https://raw.githubusercontent.com/endeavouros-team/endeavouros-i3wm-setup/main/.config/i3/i3blocks.conf -P ~/.config/i3/
|
||||
|
||||
# Please see man i3blocks for a complete reference!
|
||||
# The man page is also hosted at http://vivien.github.io/i3blocks
|
||||
|
||||
|
||||
# List of valid properties:
|
||||
#
|
||||
# align
|
||||
# color
|
||||
# command
|
||||
# full_text
|
||||
# instance
|
||||
# interval
|
||||
# label
|
||||
# min_width
|
||||
# name
|
||||
# separator
|
||||
# separator_block_width
|
||||
# short_text
|
||||
# signal
|
||||
# urgent
|
||||
|
||||
# Global properties
|
||||
#
|
||||
# The top properties below are applied to every block, but can be overridden.
|
||||
separator=false
|
||||
markup=pango
|
||||
|
||||
#[Weather]
|
||||
#command=~/.config/i3/scripts/openweather
|
||||
# or:
|
||||
#command=~/.config/i3/scripts/openweather-city
|
||||
#interval=1800
|
||||
#color=#7275b3
|
||||
|
||||
[terminal]
|
||||
full_text=
|
||||
color=#807dfe
|
||||
command=i3-msg -q exec alacritty
|
||||
|
||||
[browser]
|
||||
full_text=
|
||||
color=#ff7f81
|
||||
command=i3-msg -q exec firefox
|
||||
|
||||
[files]
|
||||
full_text=
|
||||
color=#7f3fbf
|
||||
command=i3-msg -q exec thunar ~/
|
||||
|
||||
#[mail]
|
||||
#full_text=
|
||||
#color=#dbcb75
|
||||
#command=i3-msg -q exec thunderbird
|
||||
|
||||
[simple-2]
|
||||
full_text=: :
|
||||
color=#717171
|
||||
|
||||
# Disk usage
|
||||
#
|
||||
# The directory defaults to $HOME if the instance is not specified.
|
||||
# The script may be called with a optional argument to set the alert
|
||||
# (defaults to 10 for 10%).
|
||||
[disk]
|
||||
label=
|
||||
instance=/
|
||||
command=~/.config/i3/scripts/disk
|
||||
interval=30
|
||||
|
||||
# Memory usage
|
||||
#
|
||||
# The type defaults to "mem" if the instance is not specified.
|
||||
[memory]
|
||||
label=
|
||||
command=~/.config/i3/scripts/memory
|
||||
interval=2
|
||||
|
||||
[cpu_usage]
|
||||
label=
|
||||
command=~/.config/i3/scripts/cpu_usage
|
||||
#min_width=CPU: 100.00%
|
||||
interval=2
|
||||
|
||||
[CPU-temperature]
|
||||
label=
|
||||
command=~/.config/i3/scripts/temperature
|
||||
interval=30
|
||||
#T_WARN=70
|
||||
#T_CRIT=90
|
||||
#SENSOR_CHIP=""
|
||||
# where SENSOR_CHIP can be find with sensors output
|
||||
# can be used also for GPU temperature or other temperature sensors lm-sensors detects.
|
||||
|
||||
# showing name of connected network (enable for wifi use)
|
||||
#[net]
|
||||
#label=
|
||||
#command=echo "$(LANG=C nmcli d | grep connected | awk '{print $4}')"
|
||||
#interval=30
|
||||
|
||||
[bandwidth]
|
||||
command=~/.config/i3/scripts/bandwidth2
|
||||
interval=persist
|
||||
|
||||
# Battery indicator
|
||||
# [battery]
|
||||
# command=~/.config/i3/scripts/battery2
|
||||
# # for alternative battery script change to battery1
|
||||
# # change this to battery-pinebook-pro if you are running on pinebook-pro
|
||||
# label=
|
||||
# interval=30
|
||||
|
||||
[simple-2]
|
||||
full_text=: :
|
||||
color=#717171
|
||||
|
||||
[pavucontrol]
|
||||
full_text=
|
||||
command=pavucontrol
|
||||
|
||||
[volume-pulseaudio]
|
||||
command=~/.config/i3/scripts/volume
|
||||
instance=Master
|
||||
interval=1
|
||||
|
||||
# display keyboard layout name
|
||||
# for keyboard layouts switcher
|
||||
# see i3 config file
|
||||
# this needs xkblayout-state installed from the AUR:
|
||||
# https://aur.archlinux.org/packages/xkblayout-state-git
|
||||
#[keyboard-layout]
|
||||
#command=~/.config/i3/scripts/keyboard-layout
|
||||
#interval=2
|
||||
|
||||
[keybindings]
|
||||
full_text=
|
||||
command=~/.config/i3/scripts/keyhint
|
||||
|
||||
# power-profiles-daemon implementation:
|
||||
# needs package power-profiles-daemon installed and the service running see here:
|
||||
# https://wiki.archlinux.org/title/CPU_frequency_scaling#power-profiles-daemon
|
||||
|
||||
#set power-profile
|
||||
[ppd_menu]
|
||||
full_text=
|
||||
command=~/.config/i3/scripts/power-profiles
|
||||
color=#407437
|
||||
|
||||
#Show the current power-profile
|
||||
[ppd-status]
|
||||
command=~/.config/i3/scripts/ppd-status
|
||||
interval=5
|
||||
|
||||
[time]
|
||||
#label=
|
||||
command=date '+%a %d %b %H:%M:%S'
|
||||
interval=1
|
||||
|
||||
[shutdown_menu]
|
||||
full_text=
|
||||
command=~/.config/i3/scripts/powermenu
|
||||
|
||||
[simple-2]
|
||||
full_text=: :
|
||||
color=#717171
|
||||
@@ -0,0 +1,106 @@
|
||||
EndeavourOS i3wm Keybindings cheat sheet:
|
||||
|
||||
--> to update this run the following command:
|
||||
wget --backups=1 https://raw.githubusercontent.com/endeavouros-team/endeavouros-i3wm-setup/main/.config/i3/keybindings -P ~/.config/i3/
|
||||
|
||||
All sources and updates are available at GitHub:
|
||||
https://github.com/endeavouros-team/endeavouros-i3wm-setup
|
||||
|
||||
For reference consult our WIKI:
|
||||
https://discovery.endeavouros.com/window-tiling-managers/i3-wm/
|
||||
|
||||
= windows key
|
||||
|
||||
# start alacritty
|
||||
+Return
|
||||
|
||||
# kill focused window
|
||||
+q
|
||||
|
||||
# Application menu search by typing (fancy Rofi menu):
|
||||
+d
|
||||
|
||||
# Window switcher menu (fancy Rofi menu):
|
||||
+t
|
||||
|
||||
# fancy exit-menu on bottom right:
|
||||
+Shift+e
|
||||
|
||||
# Lock the system
|
||||
# lock with a picture or blurring the screen (options in config)
|
||||
+l
|
||||
|
||||
# reload the configuration file
|
||||
+Shift+c
|
||||
|
||||
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
|
||||
+Shift+r
|
||||
|
||||
# keybinding in fancy rofi (automated)
|
||||
F1
|
||||
|
||||
# full keybinding list in editor:
|
||||
+F1
|
||||
|
||||
# change window focus
|
||||
+j focus left
|
||||
+k focus down
|
||||
+b focus up
|
||||
+o focus right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
+Left focus left
|
||||
+Down focus down
|
||||
+Up focus up
|
||||
+Right focus right
|
||||
|
||||
# move a focused window
|
||||
+Shift+j move left
|
||||
+Shift+k move down
|
||||
+Shift+b move up
|
||||
+Shift+o move right
|
||||
|
||||
# alternatively, you can use the cursor keys:
|
||||
+Shift+Left move left
|
||||
+Shift+Down move down
|
||||
+Shift+Up move up
|
||||
+Shift+Right move right
|
||||
|
||||
# split in horizontal orientation
|
||||
+h split h
|
||||
|
||||
# split in vertical orientation
|
||||
+v split v
|
||||
|
||||
# enter fullscreen mode for the focused container
|
||||
+f fullscreen toggle
|
||||
|
||||
# change container layout (stacked, tabbed, toggle split)
|
||||
+s layout stacking
|
||||
+g layout tabbed
|
||||
+e layout toggle split
|
||||
|
||||
# toggle tiling / floating
|
||||
+Shift+space floating toggle
|
||||
|
||||
# change focus between tiling / floating windows
|
||||
+space focus mode_toggle
|
||||
|
||||
# focus the parent container
|
||||
+a focus parent
|
||||
|
||||
# focus the child container
|
||||
#+d focus child
|
||||
|
||||
# resize floating window
|
||||
+right mouse button
|
||||
|
||||
## Multimedia Keys
|
||||
|
||||
# Redirect sound to headphones
|
||||
+p
|
||||
|
||||
## App shortcuts
|
||||
+w starts Firefox
|
||||
+n starts Thunar
|
||||
Button screenshot
|
||||
Executable
+104
@@ -0,0 +1,104 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2015 James Murphy
|
||||
# Licensed under the terms of the GNU GPL v2 only.
|
||||
#
|
||||
# i3blocks blocklet script to monitor bandwidth usage
|
||||
|
||||
iface="${BLOCK_INSTANCE}"
|
||||
iface="${IFACE:-$iface}"
|
||||
dt="${DT:-3}"
|
||||
unit="${UNIT:-MB}"
|
||||
LABEL="${LABEL:-<span font='FontAwesome'> </span>}" # down arrow up arrow
|
||||
printf_command="${PRINTF_COMMAND:-"printf \"${LABEL}%1.0f/%1.0f %s/s\\n\", rx, wx, unit;"}"
|
||||
|
||||
function default_interface {
|
||||
ip route | awk '/^default via/ {print $5; exit}'
|
||||
}
|
||||
|
||||
function check_proc_net_dev {
|
||||
if [ ! -f "/proc/net/dev" ]; then
|
||||
echo "/proc/net/dev not found"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function list_interfaces {
|
||||
check_proc_net_dev
|
||||
echo "Interfaces in /proc/net/dev:"
|
||||
grep -o "^[^:]\\+:" /proc/net/dev | tr -d " :"
|
||||
}
|
||||
|
||||
while getopts i:t:u:p:lh opt; do
|
||||
case "$opt" in
|
||||
i) iface="$OPTARG" ;;
|
||||
t) dt="$OPTARG" ;;
|
||||
u) unit="$OPTARG" ;;
|
||||
p) printf_command="$OPTARG" ;;
|
||||
l) list_interfaces && exit 0 ;;
|
||||
h) printf \
|
||||
"Usage: bandwidth3 [-i interface] [-t time] [-u unit] [-p printf_command] [-l] [-h]
|
||||
Options:
|
||||
-i\tNetwork interface to measure. Default determined using \`ip route\`.
|
||||
-t\tTime interval in seconds between measurements. Default: 3
|
||||
-u\tUnits to measure bytes in. Default: Mb
|
||||
\tAllowed units: Kb, KB, Mb, MB, Gb, GB, Tb, TB
|
||||
\tUnits may have optional it/its/yte/ytes on the end, e.g. Mbits, KByte
|
||||
-p\tAwk command to be called after a measurement is made.
|
||||
\tDefault: printf \"<span font='FontAwesome'> </span>%%-5.1f/%%5.1f %%s/s\\\\n\", rx, wx, unit;
|
||||
\tExposed variables: rx, wx, tx, unit, iface
|
||||
-l\tList available interfaces in /proc/net/dev
|
||||
-h\tShow this help text
|
||||
" && exit 0;;
|
||||
esac
|
||||
done
|
||||
|
||||
check_proc_net_dev
|
||||
|
||||
iface="${iface:-$(default_interface)}"
|
||||
while [ -z "$iface" ]; do
|
||||
echo No default interface
|
||||
sleep "$dt"
|
||||
iface=$(default_interface)
|
||||
done
|
||||
|
||||
case "$unit" in
|
||||
Kb|Kbit|Kbits) bytes_per_unit=$((1024 / 8));;
|
||||
KB|KByte|KBytes) bytes_per_unit=$((1024));;
|
||||
Mb|Mbit|Mbits) bytes_per_unit=$((1024 * 1024 / 8));;
|
||||
MB|MByte|MBytes) bytes_per_unit=$((1024 * 1024));;
|
||||
Gb|Gbit|Gbits) bytes_per_unit=$((1024 * 1024 * 1024 / 8));;
|
||||
GB|GByte|GBytes) bytes_per_unit=$((1024 * 1024 * 1024));;
|
||||
Tb|Tbit|Tbits) bytes_per_unit=$((1024 * 1024 * 1024 * 1024 / 8));;
|
||||
TB|TByte|TBytes) bytes_per_unit=$((1024 * 1024 * 1024 * 1024));;
|
||||
*) echo Bad unit "$unit" && exit 1;;
|
||||
esac
|
||||
|
||||
scalar=$((bytes_per_unit * dt))
|
||||
init_line=$(cat /proc/net/dev | grep "^[ ]*$iface:")
|
||||
if [ -z "$init_line" ]; then
|
||||
echo Interface not found in /proc/net/dev: "$iface"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
init_received=$(awk '{print $2}' <<< $init_line)
|
||||
init_sent=$(awk '{print $10}' <<< $init_line)
|
||||
|
||||
(while true; do cat /proc/net/dev; sleep "$dt"; done) |\
|
||||
stdbuf -oL grep "^[ ]*$iface:" |\
|
||||
awk -v scalar="$scalar" -v unit="$unit" -v iface="$iface" '
|
||||
BEGIN{old_received='"$init_received"';old_sent='"$init_sent"'}
|
||||
{
|
||||
received=$2
|
||||
sent=$10
|
||||
rx=(received-old_received)/scalar;
|
||||
wx=(sent-old_sent)/scalar;
|
||||
tx=rx+wr;
|
||||
old_received=received;
|
||||
old_sent=sent;
|
||||
if(rx >= 0 && wx >= 0){
|
||||
'"$printf_command"';
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
'
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
#simple Shellscript for i3blocks on Pinebook pro
|
||||
#05012020 geri123@gmx.net Gerhard S.
|
||||
#battery-symbols: on Manjaro you need the awesome-terminal-fonts package installed!
|
||||
PERCENT=$(cat /sys/class/power_supply/cw2015-battery/capacity)
|
||||
STATUS=$(cat /sys/class/power_supply/cw2015-battery/status)
|
||||
case $((
|
||||
$PERCENT >= 0 && $PERCENT <= 20 ? 1 :
|
||||
$PERCENT > 20 && $PERCENT <= 40 ? 2 :
|
||||
$PERCENT > 40 && $PERCENT <= 60 ? 3 :
|
||||
$PERCENT > 60 && $PERCENT <= 80 ? 4 : 5)) in
|
||||
#
|
||||
(1) echo $STATUS:"" :$PERCENT%;;
|
||||
(2) echo $STATUS:"" :$PERCENT%;;
|
||||
(3) echo $STATUS:"" :$PERCENT%;;
|
||||
(4) echo $STATUS:"" :$PERCENT%;;
|
||||
(5) echo $STATUS:"" :$PERCENT%;;
|
||||
esac
|
||||
Executable
+114
@@ -0,0 +1,114 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
|
||||
# Copyright 2014 Vivien Didelot <vivien@didelot.org>
|
||||
#
|
||||
# Licensed under the terms of the GNU GPL v3, or any later version.
|
||||
#
|
||||
# This script is meant to use with i3blocks. It parses the output of the "acpi"
|
||||
# command (often provided by a package of the same name) to read the status of
|
||||
# the battery, and eventually its remaining time (to full charge or discharge).
|
||||
#
|
||||
# The color will gradually change for a percentage below 85%, and the urgency
|
||||
# (exit code 33) is set if there is less that 5% remaining.
|
||||
|
||||
# Edited by Andreas Lindlbauer <endeavouros.mousily@aleeas.com>
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
|
||||
# otherwise we get in console "Wide character in print at"
|
||||
binmode(STDOUT, ':utf8');
|
||||
|
||||
# my $acpi;
|
||||
my $upower;
|
||||
my $percent;
|
||||
my $bat_state;
|
||||
my $status;
|
||||
my $ac_adapt;
|
||||
my $full_text;
|
||||
my $short_text;
|
||||
my $label = '😅';
|
||||
my $bat_number = $ENV{BLOCK_INSTANCE} || 0;
|
||||
|
||||
open (UPOWER, "upower -i /org/freedesktop/UPower/devices/battery_BAT$bat_number | grep 'percentage' |") or die;
|
||||
$upower = <UPOWER>;
|
||||
close(UPOWER);
|
||||
|
||||
# fail on unexpected output
|
||||
if ($upower !~ /: (\d+)%/) {
|
||||
die "$upower\n";
|
||||
}
|
||||
|
||||
$percent = $1;
|
||||
$full_text = "$percent%";
|
||||
|
||||
open (BAT_STATE, "upower -i /org/freedesktop/UPower/devices/battery_BAT$bat_number | grep 'state' |") or die;
|
||||
$bat_state = <BAT_STATE>;
|
||||
close(BAT_STATE);
|
||||
|
||||
if ($bat_state !~ /: (\w+)/) {
|
||||
die "$bat_state\n";
|
||||
}
|
||||
$status = $1;
|
||||
|
||||
if ($status eq 'discharging') {
|
||||
$full_text .= ' ';
|
||||
} elsif ($status eq 'charging') {
|
||||
$full_text .= ' ';
|
||||
} elsif ($status eq 'Unknown') {
|
||||
open (AC_ADAPTER, "acpi -a |") or die;
|
||||
$ac_adapt = <AC_ADAPTER>;
|
||||
close(AC_ADAPTER);
|
||||
|
||||
if ($ac_adapt =~ /: ([\w-]+)/) {
|
||||
$ac_adapt = $1;
|
||||
|
||||
if ($ac_adapt eq 'on-line') {
|
||||
$full_text .= ' CHR';
|
||||
} elsif ($ac_adapt eq 'off-line') {
|
||||
$full_text .= ' DIS';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$short_text = $full_text;
|
||||
|
||||
if ($percent < 20) {
|
||||
$label = '';
|
||||
} elsif ($percent < 45) {
|
||||
$label = '';
|
||||
} elsif ($percent < 70) {
|
||||
$label = '';
|
||||
} elsif ($percent < 95) {
|
||||
$label = '';
|
||||
} else {
|
||||
$label = '';
|
||||
}
|
||||
|
||||
# print text
|
||||
print " ${label}";
|
||||
print " $full_text\n";
|
||||
print " ${label}";
|
||||
print " $short_text\n";
|
||||
|
||||
# consider color and urgent flag only on discharge
|
||||
if ($status eq 'discharging') {
|
||||
|
||||
if ($percent < 20) {
|
||||
print "#FF0000\n";
|
||||
} elsif ($percent < 40) {
|
||||
print "#FFAE00\n";
|
||||
} elsif ($percent < 60) {
|
||||
print "#FFF600\n";
|
||||
} elsif ($percent < 85) {
|
||||
print "#A8FF00\n";
|
||||
}
|
||||
|
||||
if ($percent < 5) {
|
||||
exit(33);
|
||||
}
|
||||
}
|
||||
|
||||
exit(0);
|
||||
Executable
+106
@@ -0,0 +1,106 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Copyright (C) 2016 James Murphy
|
||||
# Licensed under the GPL version 2 only
|
||||
#
|
||||
# A battery indicator blocklet script for i3blocks
|
||||
|
||||
from subprocess import check_output
|
||||
import os
|
||||
import re
|
||||
|
||||
config = dict(os.environ)
|
||||
status = check_output(['acpi'], universal_newlines=True)
|
||||
|
||||
if not status:
|
||||
# stands for no battery found
|
||||
color = config.get("color_10", "red")
|
||||
fulltext = "<span color='{}'><span font='FontAwesome'>\uf00d \uf240</span></span>".format(color)
|
||||
percentleft = 100
|
||||
else:
|
||||
# if there is more than one battery in one laptop, the percentage left is
|
||||
# available for each battery separately, although state and remaining
|
||||
# time for overall block is shown in the status of the first battery
|
||||
batteries = status.split("\n")
|
||||
state_batteries=[]
|
||||
commasplitstatus_batteries=[]
|
||||
percentleft_batteries=[]
|
||||
time = ""
|
||||
for battery in batteries:
|
||||
if battery!='':
|
||||
state_batteries.append(battery.split(": ")[1].split(", ")[0])
|
||||
commasplitstatus = battery.split(", ")
|
||||
if not time:
|
||||
time = commasplitstatus[-1].strip()
|
||||
# check if it matches a time
|
||||
time = re.match(r"(\d+):(\d+)", time)
|
||||
if time:
|
||||
time = ":".join(time.groups())
|
||||
timeleft = " ({})".format(time)
|
||||
else:
|
||||
timeleft = ""
|
||||
|
||||
p = int(commasplitstatus[1].rstrip("%\n"))
|
||||
if p>0:
|
||||
percentleft_batteries.append(p)
|
||||
commasplitstatus_batteries.append(commasplitstatus)
|
||||
state = state_batteries[0]
|
||||
commasplitstatus = commasplitstatus_batteries[0]
|
||||
if percentleft_batteries:
|
||||
percentleft = int(sum(percentleft_batteries)/len(percentleft_batteries))
|
||||
else:
|
||||
percentleft = 0
|
||||
|
||||
# stands for charging
|
||||
color = config.get("color_charging", "yellow")
|
||||
FA_LIGHTNING = "<span color='{}'><span font='FontAwesome'>\uf0e7</span></span>".format(color)
|
||||
|
||||
# stands for plugged in
|
||||
FA_PLUG = "<span font='FontAwesome'>\uf1e6</span>"
|
||||
|
||||
# stands for using battery
|
||||
FA_BATTERY = "<span font='FontAwesome'>\uf240</span>"
|
||||
|
||||
# stands for unknown status of battery
|
||||
FA_QUESTION = "<span font='FontAwesome'>\uf128</span>"
|
||||
|
||||
|
||||
if state == "Discharging":
|
||||
fulltext = FA_BATTERY + " "
|
||||
elif state == "Full":
|
||||
fulltext = FA_PLUG + " "
|
||||
timeleft = ""
|
||||
elif state == "Unknown":
|
||||
fulltext = FA_QUESTION + " " + FA_BATTERY + " "
|
||||
timeleft = ""
|
||||
else:
|
||||
fulltext = FA_LIGHTNING + " " + FA_PLUG + " "
|
||||
|
||||
def color(percent):
|
||||
if percent < 10:
|
||||
# exit code 33 will turn background red
|
||||
return config.get("color_10", "#FFFFFF")
|
||||
if percent < 20:
|
||||
return config.get("color_20", "#FF3300")
|
||||
if percent < 30:
|
||||
return config.get("color_30", "#FF6600")
|
||||
if percent < 40:
|
||||
return config.get("color_40", "#FF9900")
|
||||
if percent < 50:
|
||||
return config.get("color_50", "#FFCC00")
|
||||
if percent < 60:
|
||||
return config.get("color_60", "#FFFF00")
|
||||
if percent < 70:
|
||||
return config.get("color_70", "#FFFF33")
|
||||
if percent < 80:
|
||||
return config.get("color_80", "#FFFF66")
|
||||
return config.get("color_full", "#FFFFFF")
|
||||
|
||||
form = '<span color="{}">{}%</span>'
|
||||
fulltext += form.format(color(percentleft), percentleft)
|
||||
#fulltext += timeleft
|
||||
|
||||
print(fulltext)
|
||||
print(fulltext)
|
||||
if percentleft < 10:
|
||||
exit(33)
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PICTURE=/tmp/i3lock.png
|
||||
SCREENSHOT="scrot -z $PICTURE"
|
||||
|
||||
BLUR="5x4"
|
||||
|
||||
$SCREENSHOT
|
||||
convert $PICTURE -blur $BLUR $PICTURE
|
||||
i3lock -i $PICTURE
|
||||
rm $PICTURE
|
||||
Executable
+62
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env perl
|
||||
#
|
||||
# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
|
||||
# Copyright 2014 Vivien Didelot <vivien@didelot.org>
|
||||
# Copyright 2014 Andreas Guldstrand <andreas.guldstrand@gmail.com>
|
||||
#
|
||||
# Licensed under the terms of the GNU GPL v3, or any later version.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use Getopt::Long;
|
||||
|
||||
# default values
|
||||
my $t_warn = $ENV{T_WARN} // 50;
|
||||
my $t_crit = $ENV{T_CRIT} // 80;
|
||||
my $cpu_usage = -1;
|
||||
my $decimals = $ENV{DECIMALS} // 0;
|
||||
my $label = $ENV{LABEL} // "";
|
||||
|
||||
sub help {
|
||||
print "Usage: cpu_usage [-w <warning>] [-c <critical>] [-d <decimals>]\n";
|
||||
print "-w <percent>: warning threshold to become yellow\n";
|
||||
print "-c <percent>: critical threshold to become red\n";
|
||||
print "-d <decimals>: Use <decimals> decimals for percentage (default is $decimals) \n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
GetOptions("help|h" => \&help,
|
||||
"w=i" => \$t_warn,
|
||||
"c=i" => \$t_crit,
|
||||
"d=i" => \$decimals,
|
||||
);
|
||||
|
||||
# Get CPU usage
|
||||
$ENV{LC_ALL}="en_US"; # if mpstat is not run under en_US locale, things may break, so make sure it is
|
||||
open (MPSTAT, 'mpstat 1 1 |') or die;
|
||||
while (<MPSTAT>) {
|
||||
if (/^.*\s+(\d+\.\d+)[\s\x00]?$/) {
|
||||
$cpu_usage = 100 - $1; # 100% - %idle
|
||||
last;
|
||||
}
|
||||
}
|
||||
close(MPSTAT);
|
||||
|
||||
$cpu_usage eq -1 and die 'Can\'t find CPU information';
|
||||
|
||||
# Print short_text, full_text
|
||||
print "${label}";
|
||||
printf "%02.${decimals}f%%\n", $cpu_usage;
|
||||
print "${label}";
|
||||
printf "%02.${decimals}f%%\n", $cpu_usage;
|
||||
|
||||
# Print color, if needed
|
||||
if ($cpu_usage >= $t_crit) {
|
||||
print "#FF0000\n";
|
||||
exit 33;
|
||||
} elsif ($cpu_usage >= $t_warn) {
|
||||
print "#FFFC00\n";
|
||||
}
|
||||
|
||||
exit 0;
|
||||
Executable
+48
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
DIR="${DIR:-$BLOCK_INSTANCE}"
|
||||
DIR="${DIR:-$HOME}"
|
||||
ALERT_LOW="${ALERT_LOW:-$1}"
|
||||
ALERT_LOW="${ALERT_LOW:-10}" # color will turn red under this value (default: 10%)
|
||||
|
||||
LOCAL_FLAG="-l"
|
||||
if [ "$1" = "-n" ] || [ "$2" = "-n" ]; then
|
||||
LOCAL_FLAG=""
|
||||
fi
|
||||
|
||||
df -h -P $LOCAL_FLAG "$DIR" | awk -v label="$LABEL" -v alert_low=$ALERT_LOW '
|
||||
/\/.*/ {
|
||||
# full text
|
||||
print label $4
|
||||
|
||||
# short text
|
||||
print label $4
|
||||
|
||||
use=$5
|
||||
|
||||
# no need to continue parsing
|
||||
exit 0
|
||||
}
|
||||
|
||||
END {
|
||||
gsub(/%$/,"",use)
|
||||
if (100 - use < alert_low) {
|
||||
# color
|
||||
print "#FF0000"
|
||||
}
|
||||
}
|
||||
'
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
MAX_DESKTOPS=20
|
||||
|
||||
WORKSPACES=$(seq -s '\n' 1 1 ${MAX_DESKTOPS})
|
||||
|
||||
EMPTY_WORKSPACE=$( (i3-msg -t get_workspaces | tr ',' '\n' | grep num | awk -F: '{print int($2)}' ; \
|
||||
echo -e ${WORKSPACES} ) | sort -n | uniq -u | head -n 1)
|
||||
|
||||
i3-msg workspace ${EMPTY_WORKSPACE}
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
KBD=$(/usr/bin/xkblayout-state print '%s')
|
||||
echo $KBD
|
||||
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
|
||||
Main() {
|
||||
source /usr/share/endeavouros/scripts/eos-script-lib-yad || return 1
|
||||
|
||||
local command=(
|
||||
eos_yad --title="EndeavourOS i3-wm keybindings:" --no-buttons --geometry=400x345-15-400 --list
|
||||
--column=key: --column=description: --column=command:
|
||||
"ESC" "close this app" ""
|
||||
"=" "modkey" "(set mod Mod4)"
|
||||
"+enter" "open a terminal" ""
|
||||
"+Shift+n" "new empty workspace" ""
|
||||
"+w" "open Browser" ""
|
||||
"+n" "open Filebrowser" ""
|
||||
"+d" "app menu" ""
|
||||
"+q" "close focused app" ""
|
||||
"Print-key" "screenshot" ""
|
||||
"+Shift+e" "logout menu" ""
|
||||
"F1" "open keybinding helper" ""
|
||||
)
|
||||
|
||||
"${command[@]}"
|
||||
}
|
||||
|
||||
Main "$@"
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
I3_CONFIG=$HOME/.config/i3/config
|
||||
mod_key=$(sed -nre 's/^set \$mod (.*)/\1/p' ${I3_CONFIG})
|
||||
grep "^bindsym" ${I3_CONFIG} \
|
||||
| sed "s/-\(-\w\+\)\+//g;s/\$mod/${mod_key}/g;s/Mod1/Alt/g;s/exec //;s/bindsym //;s/^\s\+//;s/^\([^ ]\+\) \(.\+\)$/\2: \1/;s/^\s\+//" \
|
||||
| tr -s ' ' \
|
||||
| rofi -dmenu -theme ~/.config/rofi/rofikeyhint.rasi
|
||||
Executable
+69
@@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
TYPE="${BLOCK_INSTANCE:-mem}"
|
||||
|
||||
awk -v type=$TYPE '
|
||||
/^MemTotal:/ {
|
||||
mem_total=$2
|
||||
}
|
||||
/^MemFree:/ {
|
||||
mem_free=$2
|
||||
}
|
||||
/^Buffers:/ {
|
||||
mem_free+=$2
|
||||
}
|
||||
/^Cached:/ {
|
||||
mem_free+=$2
|
||||
}
|
||||
/^SwapTotal:/ {
|
||||
swap_total=$2
|
||||
}
|
||||
/^SwapFree:/ {
|
||||
swap_free=$2
|
||||
}
|
||||
END {
|
||||
if (type == "swap") {
|
||||
free=swap_free/1024/1024
|
||||
used=(swap_total-swap_free)/1024/1024
|
||||
total=swap_total/1024/1024
|
||||
} else {
|
||||
free=mem_free/1024/1024
|
||||
used=(mem_total-mem_free)/1024/1024
|
||||
total=mem_total/1024/1024
|
||||
}
|
||||
|
||||
pct=0
|
||||
if (total > 0) {
|
||||
pct=used/total*100
|
||||
}
|
||||
|
||||
# full text
|
||||
# printf("%.1fG/%.1fG (%.f%%)\n", used, total, pct)
|
||||
|
||||
# short text
|
||||
printf("%.f%%\n", pct)
|
||||
|
||||
# color
|
||||
if (pct > 90) {
|
||||
print("#FF0000")
|
||||
} else if (pct > 80) {
|
||||
print("#FFAE00")
|
||||
} else if (pct > 70) {
|
||||
print("#FFF600")
|
||||
}
|
||||
}
|
||||
' /proc/meminfo
|
||||
Executable
+93
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env bash
|
||||
# Edited by Andreas Lindlbauer <endeavouros.mousily@aleeas.com>
|
||||
|
||||
temps=("#0600FF" "#0500FF" "#0400FF" "#0300FF" "#0200FF" "#0100FF" "#0000FF" "#0002FF" "#0012FF" "#0022FF" "#0032FF" "#0044FF" "#0054FF" "#0064FF" "#0074FF" "#0084FF" "#0094FF" "#00A4FF" "#00B4FF" "#00C4FF" "#00D4FF" "#00E4FF" "#00FFF4" "#00FFD0" "#00FFA8" "#00FF83" "#00FF5C" "#00FF36" "#00FF10" "#17FF00" "#3EFF00" "#65FF00" "#B0FF00" "#FDFF00" "#FFF000" "#FFDC00" "#FFC800" "#FFB400" "#FFA000" "#FF8C00" "#FF7800" "#FF6400" "#FF5000" "#FF3C00" "#FF2800" "#FF1400" "#FF0000")
|
||||
|
||||
command -v jq >/dev/null 2>&1 || { echo >&2 "Program 'jq' required but it is not installed.
|
||||
Aborting."; exit 1; }
|
||||
command -v wget >/dev/null 2>&1 || { echo >&2 "Program 'wget' required but is not installed.
|
||||
Aborting."; exit 1; }
|
||||
|
||||
# To use this script you need to create an API key here https://home.openweathermap.org
|
||||
# You need to put your Open Weather APIKEY here:
|
||||
APIKEY="keykeykey"
|
||||
# And get your Latitute and Longitudes to put in here:
|
||||
LAT="XX.XXXX"
|
||||
LON="XX.XXXX"
|
||||
URL="http://api.openweathermap.org/data/2.5/onecall?lat=${LAT}&lon=${LON}&units=metric&exclude=minutely,hourly,daily&APPID=${APIKEY}"
|
||||
WEATHER_RESPONSE=$(wget -qO- "${URL}")
|
||||
|
||||
WEATHER_CONDITION=$(echo "$WEATHER_RESPONSE" | jq '.current.weather[0].main' | sed 's/"//g')
|
||||
WEATHER_TEMP=$(echo "$WEATHER_RESPONSE" | jq '.current.feels_like')
|
||||
WEATHER_INT=${WEATHER_TEMP%.*}
|
||||
|
||||
TIME_NOW=$( echo "$WEATHER_RESPONSE" | jq '.current.dt')
|
||||
SUNRISE=$( echo "$WEATHER_RESPONSE" | jq '.current.sunrise')
|
||||
SUNSET=$( echo "$WEATHER_RESPONSE" | jq '.current.sunset')
|
||||
DESCRIPTION=$( echo "$WEATHER_RESPONSE" | jq '.current.weather[0].description' | sed 's/"//g')
|
||||
WEATHER_ALERT=$( echo "$WEATHER_RESPONSE" | jq '.alerts[0].event' | sed 's/"//g')
|
||||
DAYTIME="n"
|
||||
|
||||
if [[ "$TIME_NOW" > "$SUNRISE" ]] && [[ "$TIME_NOW" < "$SUNSET" ]]; then
|
||||
DAYTIME="d"
|
||||
fi
|
||||
|
||||
case $WEATHER_CONDITION in
|
||||
'Clouds')
|
||||
if [ "$DAYTIME" == "d" ]; then
|
||||
WEATHER_ICON=""
|
||||
else
|
||||
WEATHER_ICON=""
|
||||
fi
|
||||
;;
|
||||
'Rain')
|
||||
WEATHER_ICON=""
|
||||
;;
|
||||
'Drizzle')
|
||||
if [ "$DAYTIME" == "d" ]; then
|
||||
WEATHER_ICON=""
|
||||
else
|
||||
WEATHER_ICON=""
|
||||
fi
|
||||
;;
|
||||
'Thunderstorm')
|
||||
WEATHER_ICON=""
|
||||
;;
|
||||
'Snow')
|
||||
WEATHER_ICON=""
|
||||
;;
|
||||
'Clear')
|
||||
if [ "$DAYTIME" == "d" ]; then
|
||||
WEATHER_ICON=""
|
||||
else
|
||||
WEATHER_ICON=""
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
WEATHER_ICON="🌫"
|
||||
;;
|
||||
esac
|
||||
|
||||
WEATHER_COLOR="#FFFFFF"
|
||||
if [ "$WEATHER_INT" -lt "-11" ]; then
|
||||
WEATHER_COLOR="#0000FF"
|
||||
elif [ "$WEATHER_INT" -gt 35 ]; then
|
||||
WEATHER_COLOR="#FF0000"
|
||||
else
|
||||
WEATHER_INT=$(( WEATHER_INT + 11 ))
|
||||
WEATHER_COLOR="${temps[$WEATHER_INT]}"
|
||||
fi
|
||||
|
||||
full_text="${WEATHER_ICON} ${WEATHER_TEMP}°C: ${DESCRIPTION} "
|
||||
if [ "$WEATHER_ALERT" != "null" ]; then
|
||||
WARN_START=$(echo "$WEATHER_RESPONSE" | jq '.alerts[0].start')
|
||||
WARN_END=$(echo "$WEATHER_RESPONSE" | jq '.alerts[0].end')
|
||||
WARN_START=$(date -d @"$WARN_START" +%a_%k:%M)
|
||||
WARN_END=$(date -d @"$WARN_END" +%a_%k:%M)
|
||||
full_text="${WEATHER_ICON} ${WEATHER_TEMP}°C: ${DESCRIPTION} ${WEATHER_ALERT} from ${WARN_START} to ${WARN_END} "
|
||||
fi
|
||||
|
||||
|
||||
echo "${full_text}"
|
||||
echo "${WEATHER_TEMP}°C "
|
||||
echo "${WEATHER_COLOR}"
|
||||
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
command -v jq >/dev/null 2>&1 || { echo >&2 "Program 'jq' required but it is not installed.
|
||||
Aborting."; exit 1; }
|
||||
command -v wget >/dev/null 2>&1 || { echo >&2 "Program 'wget' required but is not installed.
|
||||
Aborting."; exit 1; }
|
||||
|
||||
# To use this script you need to create an API key here https://home.openweathermap.org
|
||||
# You need to put your Open Weather APIKEY here:
|
||||
APIKEY="keykey"
|
||||
# find your City ID here: https://openweathermap.org/
|
||||
# search for your city and copy the ID from the URL inside the browser.
|
||||
CITY_ID="idid"
|
||||
URL="http://api.openweathermap.org/data/2.5/weather?id=${CITY_ID}&units=metric&APPID=${APIKEY}"
|
||||
|
||||
WEATHER_RESPONSE=$(wget -qO- "${URL}")
|
||||
|
||||
WEATHER_CONDITION=$(echo $WEATHER_RESPONSE | jq '.weather[0].main' | sed 's/"//g')
|
||||
WEATHER_TEMP=$(echo $WEATHER_RESPONSE | jq '.main.temp')
|
||||
WIND_DIR=$( echo "$WEATHER_RESPONSE" | jq '.wind.deg')
|
||||
WIND_SPEED=$( echo "$WEATHER_RESPONSE" | jq '.wind.speed')
|
||||
|
||||
WIND_SPEED=$(awk "BEGIN {print 60*60*$WIND_SPEED/1000}")
|
||||
WIND_DIR=$(awk "BEGIN {print int(($WIND_DIR % 360)/22.5)}")
|
||||
DIR_ARRAY=( N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW N )
|
||||
WIND_DIR=${DIR_ARRAY[WIND_DIR]}
|
||||
|
||||
case $WEATHER_CONDITION in
|
||||
'Clouds')
|
||||
WEATHER_ICON=""
|
||||
;;
|
||||
'Rain')
|
||||
WEATHER_ICON=""
|
||||
;;
|
||||
'Snow')
|
||||
WEATHER_ICON=""
|
||||
;;
|
||||
*)
|
||||
WEATHER_ICON=""
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "${WEATHER_ICON} ${WEATHER_TEMP}°C: ${WIND_SPEED} km/h ${WIND_DIR}"
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
# Weather
|
||||
[Weather]
|
||||
command=~/.config/i3/scripts/openweather
|
||||
interval=1800
|
||||
color=#7275b3
|
||||
Executable
+190
@@ -0,0 +1,190 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Use rofi/zenity to change system runstate thanks to systemd.
|
||||
#
|
||||
# Note: this currently relies on associative array support in the shell.
|
||||
#
|
||||
# Inspired from i3pystatus wiki:
|
||||
# https://github.com/enkore/i3pystatus/wiki/Shutdown-Menu
|
||||
#
|
||||
# Copyright 2015 Benjamin Chrétien <chretien at lirmm dot fr>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# power-profiles-daemon implementation:
|
||||
# needs package power-profiles-daemon installed and the service running see here:
|
||||
# https://wiki.archlinux.org/title/CPU_frequency_scaling#power-profiles-daemon
|
||||
# used in i3-blocks: ~/.config/i3/i3blocks.conf together with: ~/.config/i3/scripts/ppd-status
|
||||
|
||||
|
||||
#######################################################################
|
||||
# BEGIN CONFIG #
|
||||
#######################################################################
|
||||
|
||||
# Use a custom lock script
|
||||
#LOCKSCRIPT="i3lock-extra -m pixelize"
|
||||
|
||||
# Colors: FG (foreground), BG (background), HL (highlighted)
|
||||
FG_COLOR="#bbbbbb"
|
||||
BG_COLOR="#111111"
|
||||
HLFG_COLOR="#111111"
|
||||
HLBG_COLOR="#bbbbbb"
|
||||
BORDER_COLOR="#222222"
|
||||
|
||||
# Options not related to colors
|
||||
#ROFI_TEXT=":"
|
||||
#ROFI_OPTIONS=(-width -11 -location 0 -hide-scrollbar -bw 30 -color-window "#dd310027,#dd0310027,#dd310027" -padding 5)
|
||||
#ROFI_OPTIONS=(-width -18 -location 4 -hide-scrollbar -color-window "#cc310027,#00a0009a,#cc310027" -padding 5 -font "Sourcecode Pro Regular 10, FontAwesome 9")
|
||||
ROFI_OPTIONS=(-theme ~/.config/rofi/power-profiles.rasi)
|
||||
# Zenity options
|
||||
ZENITY_TITLE="Power Profiles"
|
||||
ZENITY_TEXT="Set Profiles:"
|
||||
ZENITY_OPTIONS=(--column= --hide-header)
|
||||
|
||||
#######################################################################
|
||||
# END CONFIG #
|
||||
#######################################################################
|
||||
|
||||
# Whether to ask for user's confirmation
|
||||
enable_confirmation=false
|
||||
|
||||
# Preferred launcher if both are available
|
||||
preferred_launcher="rofi"
|
||||
|
||||
usage="$(basename "$0") [-h] [-c] [-p name] -- display a menu for shutdown, reboot, lock etc.
|
||||
|
||||
where:
|
||||
-h show this help text
|
||||
-c ask for user confirmation
|
||||
-p preferred launcher (rofi or zenity)
|
||||
|
||||
This script depends on:
|
||||
- systemd,
|
||||
- i3,
|
||||
- rofi or zenity."
|
||||
|
||||
# Check whether the user-defined launcher is valid
|
||||
launcher_list=(rofi zenity)
|
||||
function check_launcher() {
|
||||
if [[ ! "${launcher_list[@]}" =~ (^|[[:space:]])"$1"($|[[:space:]]) ]]; then
|
||||
echo "Supported launchers: ${launcher_list[*]}"
|
||||
exit 1
|
||||
else
|
||||
# Get array with unique elements and preferred launcher first
|
||||
# Note: uniq expects a sorted list, so we cannot use it
|
||||
i=1
|
||||
launcher_list=($(for l in "$1" "${launcher_list[@]}"; do printf "%i %s\n" "$i" "$l"; let i+=1; done \
|
||||
| sort -uk2 | sort -nk1 | cut -d' ' -f2- | tr '\n' ' '))
|
||||
fi
|
||||
}
|
||||
|
||||
# Parse CLI arguments
|
||||
while getopts "hcp:" option; do
|
||||
case "${option}" in
|
||||
h) echo "${usage}"
|
||||
exit 0
|
||||
;;
|
||||
c) enable_confirmation=true
|
||||
;;
|
||||
p) preferred_launcher="${OPTARG}"
|
||||
check_launcher "${preferred_launcher}"
|
||||
;;
|
||||
*) exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Check whether a command exists
|
||||
function command_exists() {
|
||||
command -v "$1" &> /dev/null 2>&1
|
||||
}
|
||||
|
||||
# systemctl required
|
||||
if ! command_exists systemctl ; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# menu defined as an associative array
|
||||
typeset -A menu
|
||||
|
||||
# Menu with keys/commands
|
||||
|
||||
menu=(
|
||||
[ Performance]="powerprofilesctl set performance"
|
||||
[ Balanced]="powerprofilesctl set balanced"
|
||||
[ Power Saver]="powerprofilesctl set power-saver"
|
||||
[ Cancel]=""
|
||||
)
|
||||
|
||||
menu_nrows=${#menu[@]}
|
||||
|
||||
# Menu entries that may trigger a confirmation message
|
||||
menu_confirm="Shutdown Reboot Hibernate Suspend Halt Logout"
|
||||
|
||||
launcher_exe=""
|
||||
launcher_options=""
|
||||
rofi_colors=""
|
||||
|
||||
function prepare_launcher() {
|
||||
if [[ "$1" == "rofi" ]]; then
|
||||
rofi_colors=(-bc "${BORDER_COLOR}" -bg "${BG_COLOR}" -fg "${FG_COLOR}" \
|
||||
-hlfg "${HLFG_COLOR}" -hlbg "${HLBG_COLOR}")
|
||||
launcher_exe="rofi"
|
||||
launcher_options=(-dmenu -i -lines "${menu_nrows}" -p "${ROFI_TEXT}" \
|
||||
"${rofi_colors}" "${ROFI_OPTIONS[@]}")
|
||||
elif [[ "$1" == "zenity" ]]; then
|
||||
launcher_exe="zenity"
|
||||
launcher_options=(--list --title="${ZENITY_TITLE}" --text="${ZENITY_TEXT}" \
|
||||
"${ZENITY_OPTIONS[@]}")
|
||||
fi
|
||||
}
|
||||
|
||||
for l in "${launcher_list[@]}"; do
|
||||
if command_exists "${l}" ; then
|
||||
prepare_launcher "${l}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# No launcher available
|
||||
if [[ -z "${launcher_exe}" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
launcher=(${launcher_exe} "${launcher_options[@]}")
|
||||
selection="$(printf '%s\n' "${!menu[@]}" | sort | "${launcher[@]}")"
|
||||
|
||||
function ask_confirmation() {
|
||||
if [ "${launcher_exe}" == "rofi" ]; then
|
||||
confirmed=$(echo -e "Yes\nNo" | rofi -dmenu -i -lines 2 -p "${selection}?" \
|
||||
"${rofi_colors}" "${ROFI_OPTIONS[@]}")
|
||||
[ "${confirmed}" == "Yes" ] && confirmed=0
|
||||
elif [ "${launcher_exe}" == "zenity" ]; then
|
||||
zenity --question --text "Are you sure you want to ${selection,,}?"
|
||||
confirmed=$?
|
||||
fi
|
||||
|
||||
if [ "${confirmed}" == 0 ]; then
|
||||
i3-msg -q "exec --no-startup-id ${menu[${selection}]}"
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ $? -eq 0 && ! -z ${selection} ]]; then
|
||||
if [[ "${enable_confirmation}" = true && \
|
||||
${menu_confirm} =~ (^|[[:space:]])"${selection}"($|[[:space:]]) ]]; then
|
||||
ask_confirmation
|
||||
else
|
||||
i3-msg -q "exec --no-startup-id ${menu[${selection}]}"
|
||||
fi
|
||||
fi
|
||||
Executable
+186
@@ -0,0 +1,186 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Use rofi/zenity to change system runstate thanks to systemd.
|
||||
#
|
||||
# Note: this currently relies on associative array support in the shell.
|
||||
#
|
||||
# Inspired from i3pystatus wiki:
|
||||
# https://github.com/enkore/i3pystatus/wiki/Shutdown-Menu
|
||||
#
|
||||
# Copyright 2015 Benjamin Chrétien <chretien at lirmm dot fr>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# modified to work with latest rofi update by joekamprad <joekamprad@endeavouros.com>
|
||||
|
||||
#######################################################################
|
||||
# BEGIN CONFIG #
|
||||
#######################################################################
|
||||
|
||||
# Use a custom lock script
|
||||
#LOCKSCRIPT="i3lock-extra -m pixelize"
|
||||
|
||||
# Colors: FG (foreground), BG (background), HL (highlighted)
|
||||
FG_COLOR="#bbbbbb"
|
||||
BG_COLOR="#111111"
|
||||
HLFG_COLOR="#111111"
|
||||
HLBG_COLOR="#bbbbbb"
|
||||
BORDER_COLOR="#222222"
|
||||
|
||||
# Options not related to colors (most rofi options do not work anymore)
|
||||
ROFI_OPTIONS=(-theme ~/.config/rofi/powermenu.rasi)
|
||||
# Zenity options
|
||||
ZENITY_TITLE="Power Menu"
|
||||
ZENITY_TEXT="Action:"
|
||||
ZENITY_OPTIONS=(--column= --hide-header)
|
||||
|
||||
#######################################################################
|
||||
# END CONFIG #
|
||||
#######################################################################
|
||||
|
||||
# Whether to ask for user's confirmation
|
||||
enable_confirmation=false
|
||||
|
||||
# Preferred launcher if both are available
|
||||
preferred_launcher="rofi"
|
||||
|
||||
usage="$(basename "$0") [-h] [-c] [-p name] -- display a menu for shutdown, reboot, lock etc.
|
||||
|
||||
where:
|
||||
-h show this help text
|
||||
-c ask for user confirmation
|
||||
-p preferred launcher (rofi or zenity)
|
||||
|
||||
This script depends on:
|
||||
- systemd,
|
||||
- i3,
|
||||
- rofi or zenity."
|
||||
|
||||
# Check whether the user-defined launcher is valid
|
||||
launcher_list=(rofi zenity)
|
||||
function check_launcher() {
|
||||
if [[ ! "${launcher_list[@]}" =~ (^|[[:space:]])"$1"($|[[:space:]]) ]]; then
|
||||
echo "Supported launchers: ${launcher_list[*]}"
|
||||
exit 1
|
||||
else
|
||||
# Get array with unique elements and preferred launcher first
|
||||
# Note: uniq expects a sorted list, so we cannot use it
|
||||
i=1
|
||||
launcher_list=($(for l in "$1" "${launcher_list[@]}"; do printf "%i %s\n" "$i" "$l"; let i+=1; done \
|
||||
| sort -uk2 | sort -nk1 | cut -d' ' -f2- | tr '\n' ' '))
|
||||
fi
|
||||
}
|
||||
|
||||
# Parse CLI arguments
|
||||
while getopts "hcp:" option; do
|
||||
case "${option}" in
|
||||
h) echo "${usage}"
|
||||
exit 0
|
||||
;;
|
||||
c) enable_confirmation=true
|
||||
;;
|
||||
p) preferred_launcher="${OPTARG}"
|
||||
check_launcher "${preferred_launcher}"
|
||||
;;
|
||||
*) exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Check whether a command exists
|
||||
function command_exists() {
|
||||
command -v "$1" &> /dev/null 2>&1
|
||||
}
|
||||
|
||||
# systemctl required
|
||||
if ! command_exists systemctl ; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# menu defined as an associative array
|
||||
typeset -A menu
|
||||
|
||||
# Menu with keys/commands
|
||||
|
||||
menu=(
|
||||
[ Shutdown]="systemctl poweroff"
|
||||
[ Reboot]="systemctl reboot"
|
||||
[ Suspend]="systemctl suspend"
|
||||
[ Hibernate]="systemctl hibernate"
|
||||
[ Lock]="~/.config/i3/scripts/blur-lock"
|
||||
[ Logout]="i3-msg exit"
|
||||
[ Cancel]=""
|
||||
)
|
||||
|
||||
menu_nrows=${#menu[@]}
|
||||
|
||||
# Menu entries that may trigger a confirmation message
|
||||
menu_confirm="Shutdown Reboot Hibernate Suspend Halt Logout"
|
||||
|
||||
launcher_exe=""
|
||||
launcher_options=""
|
||||
rofi_colors=""
|
||||
|
||||
function prepare_launcher() {
|
||||
if [[ "$1" == "rofi" ]]; then
|
||||
rofi_colors=(-bc "${BORDER_COLOR}" -bg "${BG_COLOR}" -fg "${FG_COLOR}" \
|
||||
-hlfg "${HLFG_COLOR}" -hlbg "${HLBG_COLOR}")
|
||||
launcher_exe="rofi"
|
||||
launcher_options=(-dmenu -i -lines "${menu_nrows}" -p "${ROFI_TEXT}" \
|
||||
"${rofi_colors}" "${ROFI_OPTIONS[@]}")
|
||||
elif [[ "$1" == "zenity" ]]; then
|
||||
launcher_exe="zenity"
|
||||
launcher_options=(--list --title="${ZENITY_TITLE}" --text="${ZENITY_TEXT}" \
|
||||
"${ZENITY_OPTIONS[@]}")
|
||||
fi
|
||||
}
|
||||
|
||||
for l in "${launcher_list[@]}"; do
|
||||
if command_exists "${l}" ; then
|
||||
prepare_launcher "${l}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# No launcher available
|
||||
if [[ -z "${launcher_exe}" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
launcher=(${launcher_exe} "${launcher_options[@]}")
|
||||
selection="$(printf '%s\n' "${!menu[@]}" | sort | "${launcher[@]}")"
|
||||
|
||||
function ask_confirmation() {
|
||||
if [ "${launcher_exe}" == "rofi" ]; then
|
||||
confirmed=$(echo -e "Yes\nNo" | rofi -dmenu -i -lines 2 -p "${selection}?" \
|
||||
"${rofi_colors}" "${ROFI_OPTIONS[@]}")
|
||||
[ "${confirmed}" == "Yes" ] && confirmed=0
|
||||
elif [ "${launcher_exe}" == "zenity" ]; then
|
||||
zenity --question --text "Are you sure you want to ${selection,,}?"
|
||||
confirmed=$?
|
||||
fi
|
||||
|
||||
if [ "${confirmed}" == 0 ]; then
|
||||
i3-msg -q "exec --no-startup-id ${menu[${selection}]}"
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ $? -eq 0 && ! -z ${selection} ]]; then
|
||||
if [[ "${enable_confirmation}" = true && \
|
||||
${menu_confirm} =~ (^|[[:space:]])"${selection}"($|[[:space:]]) ]]; then
|
||||
ask_confirmation
|
||||
else
|
||||
i3-msg -q "exec --no-startup-id ${menu[${selection}]}"
|
||||
fi
|
||||
fi
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# power-profiles-daemon implementation:
|
||||
# needs package power-profiles-daemon installed and the service running see here:
|
||||
# https://wiki.archlinux.org/title/CPU_frequency_scaling#power-profiles-daemon
|
||||
# used in i3-blocks: ~/.config/i3/i3blocks.conf together with: ~/.config/i3/scripts/power-profiles
|
||||
|
||||
# script to show current power profile
|
||||
|
||||
current_profile=$(powerprofilesctl get)
|
||||
echo "$current_profile"
|
||||
Executable
+86
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env perl
|
||||
# Copyright 2014 Pierre Mavro <deimos@deimos.fr>
|
||||
# Copyright 2014 Vivien Didelot <vivien@didelot.org>
|
||||
# Copyright 2014 Andreas Guldstrand <andreas.guldstrand@gmail.com>
|
||||
# Copyright 2014 Benjamin Chretien <chretien at lirmm dot fr>
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Edited by Andreas Lindlbauer <endeavouros.mousily@aleeas.com>
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use Getopt::Long;
|
||||
|
||||
binmode(STDOUT, ":utf8");
|
||||
|
||||
# default values
|
||||
my $t_warn = $ENV{T_WARN} || 70;
|
||||
my $t_crit = $ENV{T_CRIT} || 90;
|
||||
my $chip = $ENV{SENSOR_CHIP} || "";
|
||||
my $temperature = -9999;
|
||||
my $label = "😀 ";
|
||||
|
||||
sub help {
|
||||
print "Usage: temperature [-w <warning>] [-c <critical>] [--chip <chip>]\n";
|
||||
print "-w <percent>: warning threshold to become yellow\n";
|
||||
print "-c <percent>: critical threshold to become red\n";
|
||||
print "--chip <chip>: sensor chip\n";
|
||||
exit 0;
|
||||
}
|
||||
|
||||
GetOptions("help|h" => \&help,
|
||||
"w=i" => \$t_warn,
|
||||
"c=i" => \$t_crit,
|
||||
"chip=s" => \$chip);
|
||||
|
||||
# Get chip temperature
|
||||
open (SENSORS, "sensors -u $chip |") or die;
|
||||
while (<SENSORS>) {
|
||||
if (/^\s+temp1_input:\s+[\+]*([\-]*\d+\.\d)/) {
|
||||
$temperature = $1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
close(SENSORS);
|
||||
|
||||
$temperature eq -9999 and die 'Cannot find temperature';
|
||||
|
||||
if ($temperature < 45) {
|
||||
$label = '';
|
||||
} elsif ($temperature < 55) {
|
||||
$label = '';
|
||||
} elsif ($temperature < 65) {
|
||||
$label = '';
|
||||
} elsif ($temperature < 75) {
|
||||
$label = '';
|
||||
} else {
|
||||
$label = '';
|
||||
}
|
||||
# Print short_text, full_text
|
||||
print "${label}";
|
||||
print " $temperature°C\n";
|
||||
print "${label}";
|
||||
print " $temperature°C\n";
|
||||
|
||||
# Print color, if needed
|
||||
if ($temperature >= $t_crit) {
|
||||
print "#FF0000\n";
|
||||
exit 33;
|
||||
} elsif ($temperature >= $t_warn) {
|
||||
print "#FFFC00\n";
|
||||
}
|
||||
|
||||
exit 0;
|
||||
Executable
+93
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (C) 2014 Julien Bonjean <julien@bonjean.info>
|
||||
# Copyright (C) 2014 Alexander Keller <github@nycroth.com>
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# original source: https://github.com/vivien/i3blocks-contrib/tree/master/volume
|
||||
# check the readme: https://github.com/vivien/i3blocks-contrib/blob/master/volume/README.md
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
# The second parameter overrides the mixer selection
|
||||
# For PulseAudio users, eventually use "pulse"
|
||||
# For Jack/Jack2 users, use "jackplug"
|
||||
# For ALSA users, you may use "default" for your primary card
|
||||
# or you may use hw:# where # is the number of the card desired
|
||||
if [[ -z "$MIXER" ]] ; then
|
||||
MIXER="default"
|
||||
if command -v pulseaudio >/dev/null 2>&1 && pulseaudio --check ; then
|
||||
# pulseaudio is running, but not all installations use "pulse"
|
||||
if amixer -D pulse info >/dev/null 2>&1 ; then
|
||||
MIXER="pulse"
|
||||
fi
|
||||
fi
|
||||
[ -n "$(lsmod | grep jack)" ] && MIXER="jackplug"
|
||||
MIXER="${2:-$MIXER}"
|
||||
fi
|
||||
|
||||
# The instance option sets the control to report and configure
|
||||
# This defaults to the first control of your selected mixer
|
||||
# For a list of the available, use `amixer -D $Your_Mixer scontrols`
|
||||
if [[ -z "$SCONTROL" ]] ; then
|
||||
SCONTROL="${BLOCK_INSTANCE:-$(amixer -D $MIXER scontrols |
|
||||
sed -n "s/Simple mixer control '\([^']*\)',0/\1/p" |
|
||||
head -n1
|
||||
)}"
|
||||
fi
|
||||
|
||||
# The first parameter sets the step to change the volume by (and units to display)
|
||||
# This may be in in % or dB (eg. 5% or 3dB)
|
||||
if [[ -z "$STEP" ]] ; then
|
||||
STEP="${1:-5%}"
|
||||
fi
|
||||
|
||||
# AMIXER(1):
|
||||
# "Use the mapped volume for evaluating the percentage representation like alsamixer, to be
|
||||
# more natural for human ear."
|
||||
NATURAL_MAPPING=${NATURAL_MAPPING:-0}
|
||||
if [[ "$NATURAL_MAPPING" != "0" ]] ; then
|
||||
AMIXER_PARAMS="-M"
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
capability() { # Return "Capture" if the device is a capture device
|
||||
amixer $AMIXER_PARAMS -D $MIXER get $SCONTROL |
|
||||
sed -n "s/ Capabilities:.*cvolume.*/Capture/p"
|
||||
}
|
||||
|
||||
volume() {
|
||||
amixer $AMIXER_PARAMS -D $MIXER get $SCONTROL $(capability)
|
||||
}
|
||||
|
||||
format() {
|
||||
|
||||
perl_filter='if (/.*\[(\d+%)\] (\[(-?\d+.\d+dB)\] )?\[(on|off)\]/)'
|
||||
perl_filter+='{CORE::say $4 eq "off" ? "MUTE" : "'
|
||||
# If dB was selected, print that instead
|
||||
perl_filter+=$([[ $STEP = *dB ]] && echo '$3' || echo '$1')
|
||||
perl_filter+='"; exit}'
|
||||
output=$(perl -ne "$perl_filter")
|
||||
echo "$LABEL$output"
|
||||
}
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
||||
case $BLOCK_BUTTON in
|
||||
3) amixer $AMIXER_PARAMS -q -D $MIXER sset $SCONTROL $(capability) toggle ;; # right click, mute/unmute
|
||||
4) amixer $AMIXER_PARAMS -q -D $MIXER sset $SCONTROL $(capability) ${STEP}+ unmute ;; # scroll up, increase
|
||||
5) amixer $AMIXER_PARAMS -q -D $MIXER sset $SCONTROL $(capability) ${STEP}- unmute ;; # scroll down, decrease
|
||||
esac
|
||||
|
||||
volume | format
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Copyright (C) 2021 Andreas Lindlbauer
|
||||
# Licensed under the terms of EUPLv1.2.
|
||||
#
|
||||
# i3blocks blocklet script to monitor the (nord)vpn connection
|
||||
|
||||
vpnstatus="📢"
|
||||
nordvpn_output=$(nordvpn status | cat -v | head -1 | sed -e 's/\^M-^M ^M//g' )
|
||||
if [ "${nordvpn_output}" = "Status: Connected" ]; then
|
||||
vpnstatus="🥸"
|
||||
elif [ "${nordvpn_output}" = "A new version of NordVPN is available! Please update the application." ]; then
|
||||
nordvpn_output=$(nordvpn status | cat -v | head -2 | tail -1 | sed -e 's/\^M-^M ^M//g' )
|
||||
if [ "${nordvpn_output}" = "Status: Connected" ]; then
|
||||
vpnstatus="🥴"
|
||||
elif [ "${nordvpn_output}" = "Status: Disconnected" ]; then
|
||||
vpnstatus="📢"
|
||||
fi
|
||||
elif [ "${nordvpn_output}" = "Status: Disconnected" ]; then
|
||||
vpnstatus="📢"
|
||||
elif [[ "$nordvpn_output" == *\/* ]] || [[ "$nordvpn_output" == *\\* ]]; then
|
||||
vpnstatus="Something's very wrong"
|
||||
fi
|
||||
|
||||
echo "$vpnstatus"
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
programs = {
|
||||
chromium = {
|
||||
enable = true;
|
||||
commandLineArgs = ["--enable-features=TouchpadOverscrollHistoryNavigation"];
|
||||
extensions = [
|
||||
# {id = "";} // extension id, query from chrome web store
|
||||
];
|
||||
};
|
||||
|
||||
firefox = {
|
||||
enable = true;
|
||||
profiles.ryan = {};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [
|
||||
# archives
|
||||
zip
|
||||
unzip
|
||||
p7zip
|
||||
|
||||
# utils
|
||||
ripgrep
|
||||
yq-go # https://github.com/mikefarah/yq
|
||||
htop
|
||||
|
||||
# misc
|
||||
libnotify
|
||||
wineWowPackages.wayland
|
||||
xdg-utils
|
||||
graphviz
|
||||
|
||||
# productivity
|
||||
obsidian
|
||||
|
||||
# IDE
|
||||
insomnia
|
||||
|
||||
# cloud native
|
||||
docker-compose
|
||||
kubectl
|
||||
|
||||
|
||||
nodejs
|
||||
nodePackages.npm
|
||||
nodePackages.pnpm
|
||||
yarn
|
||||
|
||||
# db related
|
||||
dbeaver
|
||||
mycli
|
||||
pgcli
|
||||
];
|
||||
|
||||
programs = {
|
||||
tmux = {
|
||||
enable = true;
|
||||
clock24 = true;
|
||||
keyMode = "vi";
|
||||
extraConfig = "mouse on";
|
||||
};
|
||||
|
||||
bat = {
|
||||
enable = true;
|
||||
config = {
|
||||
pager = "less -FR";
|
||||
theme = "Catppuccin-mocha";
|
||||
};
|
||||
themes = {
|
||||
Catppuccin-mocha = builtins.readFile (pkgs.fetchurl {
|
||||
url = "https://raw.githubusercontent.com/catppuccin/bat/main/Catppuccin-mocha.tmTheme";
|
||||
hash = "sha256-qMQNJGZImmjrqzy7IiEkY5IhvPAMZpq0W6skLLsng/w=";
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
btop.enable = true; # replacement of htop/nmon
|
||||
exa.enable = true; # A modern replacement for ‘ls’
|
||||
jq.enable = true; # A lightweight and flexible command-line JSON processor
|
||||
ssh.enable = true;
|
||||
aria2.enable = true;
|
||||
|
||||
skim = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
defaultCommand = "rg --files --hidden";
|
||||
changeDirWidgetOptions = [
|
||||
"--preview 'exa --icons --git --color always -T -L 3 {} | head -200'"
|
||||
"--exact"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
syncthing.enable = true;
|
||||
|
||||
# auto mount usb drives
|
||||
udiskie.enable = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
./browsers.nix
|
||||
./common.nix
|
||||
./git.nix
|
||||
./media.nix
|
||||
./vscode.nix
|
||||
./xdg.nix
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home.packages = [pkgs.gh];
|
||||
|
||||
programs.git = {
|
||||
enable = true;
|
||||
|
||||
userName = "Ryan Yin";
|
||||
userEmail = "xiaoyin_c@qq.com";
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
# media - control and enjoy audio/video
|
||||
{
|
||||
# imports = [
|
||||
# ];
|
||||
|
||||
home.packages = with pkgs; [
|
||||
# audio control
|
||||
pavucontrol
|
||||
playerctl
|
||||
pulsemixer
|
||||
# images
|
||||
imv
|
||||
];
|
||||
|
||||
programs = {
|
||||
mpv = {
|
||||
enable = true;
|
||||
defaultProfiles = ["gpu-hq"];
|
||||
scripts = [pkgs.mpvScripts.mpris];
|
||||
};
|
||||
|
||||
obs-studio.enable = true;
|
||||
};
|
||||
|
||||
services = {
|
||||
playerctld.enable = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
home-manager,
|
||||
nix-vscode-extensions,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
|
||||
# if use vscode in wayland, uncomment this line
|
||||
# environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
programs.vscode = {
|
||||
enable = true;
|
||||
userSettings = {
|
||||
"editor.renderWhitespace" = "all";
|
||||
"files.autoSave" = "onFocusChange";
|
||||
"editor.rulers" = [ 80 120 ];
|
||||
"telemetry.enableTelemetry" = false;
|
||||
"telemetry.enableCrashReporter" = false;
|
||||
"editor.tabSize" = 2;
|
||||
"files.exclude" = { "**/node_modules/**" = true; };
|
||||
"editor.formatOnSave" = false;
|
||||
"breadcrumbs.enabled" = true;
|
||||
"editor.useTabStops" = false;
|
||||
"editor.fontFamily" = "JetBrainsMono Nerd Font";
|
||||
"editor.fontSize" = 16;
|
||||
"editor.fontLigatures" = true;
|
||||
"editor.lineHeight" = 20;
|
||||
"workbench.fontAliasing" = "antialiased";
|
||||
"files.trimTrailingWhitespace" = true;
|
||||
"editor.minimap.enabled" = false;
|
||||
"workbench.editor.enablePreview" = false;
|
||||
"terminal.integrated.fontFamily" = "JetBrainsMono Nerd Font";
|
||||
};
|
||||
|
||||
# pkgs.vscode-extensions 里包含的 vscode 太少了
|
||||
# 必须使用社区的 <https://github.com/nix-community/nix-vscode-extensions> 才能安装更多插件
|
||||
# TODO 安装有点麻烦,后面再整
|
||||
extensions = with pkgs.vscode-extensions; [
|
||||
# aaron-bond.better-comments
|
||||
# anweber.vscode-httpyac
|
||||
# arrterian.nix-env-selector
|
||||
# bierner.markdown-mermaid
|
||||
# christian-kohler.path-intellisense
|
||||
# cschlosser.doxdocgen
|
||||
# DanishSarwar.reverse-search
|
||||
# eamodio.gitlens
|
||||
# esbenp.prettier-vscode
|
||||
# espressif.esp-idf-extension
|
||||
# fabiospampinato.vscode-diff
|
||||
# GitHub.copilot
|
||||
# golang.go
|
||||
# hashicorp.terraform
|
||||
# janisdd.vscode-edit-csv
|
||||
# jebbs.plantuml
|
||||
# jeff-hykin.better-cpp-syntax
|
||||
# jnoortheen.nix-ide
|
||||
# JuanBlanco.solidity
|
||||
# k--kato.intellij-idea-keybindings
|
||||
# llvm-vs-code-extensions.vscode-clangd
|
||||
# mcu-debug.debug-tracker-vscode
|
||||
# mcu-debug.memory-view
|
||||
# mcu-debug.rtos-views
|
||||
# mikestead.dotenv
|
||||
# mkhl.direnv
|
||||
# ms-azuretools.vscode-docker
|
||||
# ms-dotnettools.vscode-dotnet-runtime
|
||||
# ms-kubernetes-tools.vscode-kubernetes-tools
|
||||
# ms-python.isort
|
||||
# ms-python.python
|
||||
# ms-python.vscode-pylance
|
||||
# ms-toolsai.jupyter
|
||||
# ms-toolsai.jupyter-keymap
|
||||
# ms-toolsai.jupyter-renderers
|
||||
# ms-toolsai.vscode-jupyter-cell-tags
|
||||
# ms-toolsai.vscode-jupyter-slideshow
|
||||
# ms-vscode-remote.remote-containers
|
||||
# ms-vscode-remote.remote-ssh
|
||||
# ms-vscode-remote.remote-ssh-edit
|
||||
# ms-vscode-remote.vscode-remote-extensionpack
|
||||
# ms-vscode.cmake-tools
|
||||
# ms-vscode.cpptools
|
||||
# ms-vscode.cpptools-extension-pack
|
||||
# ms-vscode.cpptools-themes
|
||||
# ms-vscode.remote-explorer
|
||||
# ms-vscode.remote-server
|
||||
# pinage404.nix-extension-pack
|
||||
# platformio.platformio-ide
|
||||
# pomdtr.excalidraw-editor
|
||||
# redhat.java
|
||||
# redhat.vscode-commons
|
||||
# redhat.vscode-xml
|
||||
# redhat.vscode-yaml
|
||||
# rust-lang.rust-analyzer
|
||||
# shd101wyy.markdown-preview-enhanced
|
||||
# sumneko.lua
|
||||
# tamasfe.even-better-toml
|
||||
# timonwong.shellcheck
|
||||
# tintinweb.graphviz-interactive-preview
|
||||
# tintinweb.solidity-visual-auditor
|
||||
# tintinweb.vscode-inline-bookmarks
|
||||
# tintinweb.vscode-solidity-flattener
|
||||
# tintinweb.vscode-solidity-language
|
||||
# twxs.cmake
|
||||
# vadimcn.vscode-lldb
|
||||
# VisualStudioExptTeam.intellicode-api-usage-examples
|
||||
# VisualStudioExptTeam.vscodeintellicode
|
||||
# vscjava.vscode-java-debug
|
||||
# vscjava.vscode-java-pack
|
||||
# vscjava.vscode-java-test
|
||||
# vscjava.vscode-maven
|
||||
# vscode-icons-team.vscode-icons
|
||||
# WakaTime.vscode-wakatime
|
||||
yzhang.markdown-all-in-one
|
||||
zxh404.vscode-proto3
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
{config, ...}: let
|
||||
browser = ["firefox.desktop"];
|
||||
|
||||
# XDG MIME types
|
||||
associations = {
|
||||
"application/x-extension-htm" = browser;
|
||||
"application/x-extension-html" = browser;
|
||||
"application/x-extension-shtml" = browser;
|
||||
"application/x-extension-xht" = browser;
|
||||
"application/x-extension-xhtml" = browser;
|
||||
"application/xhtml+xml" = browser;
|
||||
"text/html" = browser;
|
||||
"x-scheme-handler/about" = browser;
|
||||
"x-scheme-handler/chrome" = ["chromium-browser.desktop"];
|
||||
"x-scheme-handler/ftp" = browser;
|
||||
"x-scheme-handler/http" = browser;
|
||||
"x-scheme-handler/https" = browser;
|
||||
"x-scheme-handler/unknown" = browser;
|
||||
|
||||
"audio/*" = ["mpv.desktop"];
|
||||
"video/*" = ["mpv.dekstop"];
|
||||
"image/*" = ["imv.desktop"];
|
||||
"application/json" = browser;
|
||||
"application/pdf" = ["org.pwmt.zathura.desktop.desktop"];
|
||||
"x-scheme-handler/discord" = ["discordcanary.desktop"];
|
||||
"x-scheme-handler/spotify" = ["spotify.desktop"];
|
||||
"x-scheme-handler/tg" = ["telegramdesktop.desktop"];
|
||||
};
|
||||
in {
|
||||
xdg = {
|
||||
enable = true;
|
||||
cacheHome = config.home.homeDirectory + "/.local/cache";
|
||||
|
||||
mimeApps = {
|
||||
enable = true;
|
||||
defaultApplications = associations;
|
||||
};
|
||||
|
||||
userDirs = {
|
||||
enable = true;
|
||||
createDirectories = true;
|
||||
extraConfig = {
|
||||
XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*******************************************************
|
||||
* ROFI Arc Dark colors for EndeavourOS
|
||||
* Maintainer: joekamprad <joekamprad@endeavouros.com>
|
||||
*******************************************************/
|
||||
* {
|
||||
selected-normal-foreground: rgba ( 249, 249, 249, 100 % );
|
||||
foreground: rgba ( 196, 203, 212, 100 % );
|
||||
normal-foreground: @foreground;
|
||||
alternate-normal-background: rgba ( 64, 69, 82, 59 % );
|
||||
red: rgba ( 220, 50, 47, 100 % );
|
||||
selected-urgent-foreground: rgba ( 249, 249, 249, 100 % );
|
||||
blue: rgba ( 38, 139, 210, 100 % );
|
||||
urgent-foreground: rgba ( 204, 102, 102, 100 % );
|
||||
alternate-urgent-background: rgba ( 75, 81, 96, 90 % );
|
||||
active-foreground: rgba ( 101, 172, 255, 100 % );
|
||||
lightbg: rgba ( 238, 232, 213, 100 % );
|
||||
selected-active-foreground: rgba ( 249, 249, 249, 100 % );
|
||||
alternate-active-background: rgba ( 75, 81, 96, 89 % );
|
||||
background: rgba ( 45, 48, 59, 95 % );
|
||||
alternate-normal-foreground: @foreground;
|
||||
normal-background: @background;
|
||||
lightfg: rgba ( 88, 104, 117, 100 % );
|
||||
selected-normal-background: rgba ( 64, 132, 214, 100 % );
|
||||
border-color: rgba ( 124, 131, 137, 100 % );
|
||||
spacing: 2;
|
||||
separatorcolor: rgba ( 29, 31, 33, 100 % );
|
||||
urgent-background: rgba ( 29, 31, 33, 17 % );
|
||||
selected-urgent-background: rgba ( 165, 66, 66, 100 % );
|
||||
alternate-urgent-foreground: @urgent-foreground;
|
||||
background-color: rgba ( 0, 0, 0, 0 % );
|
||||
alternate-active-foreground: @active-foreground;
|
||||
active-background: rgba ( 29, 31, 33, 17 % );
|
||||
selected-active-background: rgba ( 68, 145, 237, 100 % );
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*******************************************************
|
||||
* ROFI Arch Dark Transparent colors for EndeavourOS
|
||||
* Maintainer: joekamprad <joekamprad@endeavouros.com>
|
||||
*******************************************************/
|
||||
* {
|
||||
selected-normal-foreground: rgba ( 255, 147, 5, 100 % );
|
||||
foreground: rgba ( 196, 203, 212, 100 % );
|
||||
normal-foreground: @foreground;
|
||||
alternate-normal-background: rgba ( 45, 48, 59, 1 % );
|
||||
red: rgba ( 220, 50, 47, 100 % );
|
||||
selected-urgent-foreground: rgba ( 249, 249, 249, 100 % );
|
||||
blue: rgba ( 38, 139, 210, 100 % );
|
||||
urgent-foreground: rgba ( 204, 102, 102, 100 % );
|
||||
alternate-urgent-background: rgba ( 75, 81, 96, 90 % );
|
||||
active-foreground: rgba ( 101, 172, 255, 100 % );
|
||||
lightbg: rgba ( 238, 232, 213, 100 % );
|
||||
selected-active-foreground: rgba ( 249, 249, 249, 100 % );
|
||||
alternate-active-background: rgba ( 45, 48, 59, 88 % );
|
||||
background: rgba ( 45, 48, 59, 88 % );
|
||||
alternate-normal-foreground: @foreground;
|
||||
normal-background: rgba ( 45, 48, 59, 1 % );
|
||||
lightfg: rgba ( 88, 104, 117, 100 % );
|
||||
selected-normal-background: rgba ( 24, 26, 32, 100 % );
|
||||
border-color: rgba ( 124, 131, 137, 100 % );
|
||||
spacing: 2;
|
||||
separatorcolor: rgba ( 45, 48, 59, 1 % );
|
||||
urgent-background: rgba ( 45, 48, 59, 15 % );
|
||||
selected-urgent-background: rgba ( 165, 66, 66, 100 % );
|
||||
alternate-urgent-foreground: @urgent-foreground;
|
||||
background-color: rgba ( 0, 0, 0, 0 % );
|
||||
alternate-active-foreground: @active-foreground;
|
||||
active-background: rgba ( 29, 31, 33, 17 % );
|
||||
selected-active-background: rgba ( 26, 28, 35, 100 % );
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
/*******************************************************
|
||||
* ROFI configs i3 powermenu for EndeavourOS
|
||||
* Maintainer: joekamprad <joekamprad@endeavouros.com>
|
||||
*******************************************************/
|
||||
configuration {
|
||||
font: "Noto Sans Regular 10";
|
||||
show-icons: false;
|
||||
icon-theme: "Qogir";
|
||||
scroll-method: 0;
|
||||
disable-history: false;
|
||||
fullscreen: false;
|
||||
hide-scrollbar: true;
|
||||
sidebar-mode: false;
|
||||
}
|
||||
|
||||
@import "~/.config/rofi/arc_dark_colors.rasi"
|
||||
|
||||
|
||||
window {
|
||||
background-color: @background;
|
||||
border: 0;
|
||||
padding: 10;
|
||||
transparency: "real";
|
||||
width: 170px;
|
||||
location: east;
|
||||
/*y-offset: 18;*/
|
||||
/*x-offset: 850;*/
|
||||
}
|
||||
listview {
|
||||
lines: 4;
|
||||
columns: 1;
|
||||
}
|
||||
element {
|
||||
border: 0;
|
||||
padding: 1px;
|
||||
}
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
element.normal.normal {
|
||||
background-color: @normal-background;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
element.normal.urgent {
|
||||
background-color: @urgent-background;
|
||||
text-color: @urgent-foreground;
|
||||
}
|
||||
element.normal.active {
|
||||
background-color: @active-background;
|
||||
text-color: @active-foreground;
|
||||
}
|
||||
element.selected.normal {
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}
|
||||
element.selected.urgent {
|
||||
background-color: @selected-urgent-background;
|
||||
text-color: @selected-urgent-foreground;
|
||||
}
|
||||
element.selected.active {
|
||||
background-color: @selected-active-background;
|
||||
text-color: @selected-active-foreground;
|
||||
}
|
||||
element.alternate.normal {
|
||||
background-color: @alternate-normal-background;
|
||||
text-color: @alternate-normal-foreground;
|
||||
}
|
||||
element.alternate.urgent {
|
||||
background-color: @alternate-urgent-background;
|
||||
text-color: @alternate-urgent-foreground;
|
||||
}
|
||||
element.alternate.active {
|
||||
background-color: @alternate-active-background;
|
||||
text-color: @alternate-active-foreground;
|
||||
}
|
||||
scrollbar {
|
||||
width: 4px;
|
||||
border: 0;
|
||||
handle-color: @normal-foreground;
|
||||
handle-width: 8px;
|
||||
padding: 0;
|
||||
}
|
||||
mode-switcher {
|
||||
border: 2px 0px 0px;
|
||||
border-color: @separatorcolor;
|
||||
}
|
||||
button {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
button.selected {
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}
|
||||
inputbar {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
padding: 1px;
|
||||
}
|
||||
case-indicator {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
entry {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
prompt {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
inputbar {
|
||||
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||||
}
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: "Set Power Profile:";
|
||||
margin: 0px 0.3em 0em 0em;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
/*******************************************************
|
||||
* ROFI configs i3 powermenu for EndeavourOS
|
||||
* Maintainer: joekamprad <joekamprad@endeavouros.com>
|
||||
*******************************************************/
|
||||
configuration {
|
||||
font: "Noto Sans Regular 10";
|
||||
show-icons: false;
|
||||
icon-theme: "Qogir";
|
||||
scroll-method: 0;
|
||||
disable-history: false;
|
||||
sidebar-mode: false;
|
||||
}
|
||||
|
||||
@import "~/.config/rofi/arc_dark_transparent_colors.rasi"
|
||||
|
||||
window {
|
||||
background-color: @background;
|
||||
border: 0;
|
||||
padding: 10;
|
||||
transparency: "real";
|
||||
width: 120px;
|
||||
location: east;
|
||||
/*y-offset: 18;*/
|
||||
/*x-offset: 850;*/
|
||||
}
|
||||
listview {
|
||||
lines: 7;
|
||||
columns: 1;
|
||||
scrollbar: false;
|
||||
}
|
||||
element {
|
||||
border: 0;
|
||||
padding: 1px;
|
||||
}
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
element.normal.normal {
|
||||
background-color: @normal-background;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
element.normal.urgent {
|
||||
background-color: @urgent-background;
|
||||
text-color: @urgent-foreground;
|
||||
}
|
||||
element.normal.active {
|
||||
background-color: @active-background;
|
||||
text-color: @active-foreground;
|
||||
}
|
||||
element.selected.normal {
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}
|
||||
element.selected.urgent {
|
||||
background-color: @selected-urgent-background;
|
||||
text-color: @selected-urgent-foreground;
|
||||
}
|
||||
element.selected.active {
|
||||
background-color: @selected-active-background;
|
||||
text-color: @selected-active-foreground;
|
||||
}
|
||||
element.alternate.normal {
|
||||
background-color: @alternate-normal-background;
|
||||
text-color: @alternate-normal-foreground;
|
||||
}
|
||||
element.alternate.urgent {
|
||||
background-color: @alternate-urgent-background;
|
||||
text-color: @alternate-urgent-foreground;
|
||||
}
|
||||
element.alternate.active {
|
||||
background-color: @alternate-active-background;
|
||||
text-color: @alternate-active-foreground;
|
||||
}
|
||||
scrollbar {
|
||||
width: 4px;
|
||||
border: 0;
|
||||
handle-color: @normal-foreground;
|
||||
handle-width: 8px;
|
||||
padding: 0;
|
||||
}
|
||||
mode-switcher {
|
||||
border: 2px 0px 0px;
|
||||
border-color: @separatorcolor;
|
||||
}
|
||||
button {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
button.selected {
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}
|
||||
inputbar {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
padding: 1px;
|
||||
}
|
||||
case-indicator {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
entry {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
prompt {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
inputbar {
|
||||
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||||
}
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: ":";
|
||||
margin: 0px 0.3em 0em 0em;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
|
||||
/*removes the text input line*/
|
||||
mainbox {
|
||||
children: [listview];
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
/*******************************************************
|
||||
* ROFI configs i3 Apps menu for EndeavourOS
|
||||
* Maintainer: joekamprad <joekamprad@endeavouros.com>
|
||||
*******************************************************/
|
||||
configuration {
|
||||
font: "Noto Sans Regular 10";
|
||||
show-icons: true;
|
||||
icon-theme: "Qogir";
|
||||
display-drun: "Apps";
|
||||
drun-display-format: "{name}";
|
||||
scroll-method: 0;
|
||||
disable-history: false;
|
||||
sidebar-mode: false;
|
||||
}
|
||||
|
||||
@import "~/.config/rofi/arc_dark_transparent_colors.rasi"
|
||||
|
||||
window {
|
||||
background-color: @background;
|
||||
border: 0;
|
||||
padding: 30;
|
||||
}
|
||||
listview {
|
||||
lines: 10;
|
||||
columns: 3;
|
||||
}
|
||||
mainbox {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
message {
|
||||
border: 2px 0px 0px;
|
||||
border-color: @separatorcolor;
|
||||
padding: 1px;
|
||||
}
|
||||
textbox {
|
||||
text-color: @foreground;
|
||||
}
|
||||
listview {
|
||||
fixed-height: 0;
|
||||
border: 8px 0px 0px;
|
||||
border-color: @separatorcolor;
|
||||
spacing: 8px;
|
||||
scrollbar: false;
|
||||
padding: 2px 0px 0px;
|
||||
}
|
||||
element {
|
||||
border: 0;
|
||||
padding: 1px;
|
||||
}
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
element.normal.normal {
|
||||
background-color: @normal-background;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
element.normal.urgent {
|
||||
background-color: @urgent-background;
|
||||
text-color: @urgent-foreground;
|
||||
}
|
||||
element.normal.active {
|
||||
background-color: @active-background;
|
||||
text-color: @active-foreground;
|
||||
}
|
||||
element.selected.normal {
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}
|
||||
element.selected.urgent {
|
||||
background-color: @selected-urgent-background;
|
||||
text-color: @selected-urgent-foreground;
|
||||
}
|
||||
element.selected.active {
|
||||
background-color: @selected-active-background;
|
||||
text-color: @selected-active-foreground;
|
||||
}
|
||||
element.alternate.normal {
|
||||
background-color: @alternate-normal-background;
|
||||
text-color: @alternate-normal-foreground;
|
||||
}
|
||||
element.alternate.urgent {
|
||||
background-color: @alternate-urgent-background;
|
||||
text-color: @alternate-urgent-foreground;
|
||||
}
|
||||
element.alternate.active {
|
||||
background-color: @alternate-active-background;
|
||||
text-color: @alternate-active-foreground;
|
||||
}
|
||||
scrollbar {
|
||||
width: 4px;
|
||||
border: 0;
|
||||
handle-color: @normal-foreground;
|
||||
handle-width: 8px;
|
||||
padding: 0;
|
||||
}
|
||||
mode-switcher {
|
||||
border: 2px 0px 0px;
|
||||
border-color: @separatorcolor;
|
||||
}
|
||||
button {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
button.selected {
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}
|
||||
inputbar {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
padding: 1px;
|
||||
}
|
||||
case-indicator {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
entry {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
prompt {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
inputbar {
|
||||
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||||
}
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: ":";
|
||||
margin: 0px 0.3em 0em 0em;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
/*******************************************************
|
||||
* ROFI configs i3 keyhint-menu for EndeavourOS
|
||||
* Maintainer: joekamprad <joekamprad@endeavouros.com>
|
||||
*******************************************************/
|
||||
configuration {
|
||||
font: "Noto Sans Regular 10";
|
||||
show-icons: false;
|
||||
icon-theme: "Qogir";
|
||||
display-drun: "KeyHint";
|
||||
drun-display-format: "{name}";
|
||||
scroll-method: 0;
|
||||
disable-history: false;
|
||||
fullscreen: false;
|
||||
hide-scrollbar: true;
|
||||
sidebar-mode: false;
|
||||
}
|
||||
|
||||
@import "~/.config/rofi/arc_dark_transparent_colors.rasi"
|
||||
|
||||
window {
|
||||
background-color: @background;
|
||||
border: 0;
|
||||
padding: 30;
|
||||
}
|
||||
listview {
|
||||
lines: 10;
|
||||
columns: 1;
|
||||
}
|
||||
mainbox {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
message {
|
||||
border: 2px 0px 0px;
|
||||
border-color: @separatorcolor;
|
||||
padding: 1px;
|
||||
}
|
||||
textbox {
|
||||
text-color: @foreground;
|
||||
}
|
||||
listview {
|
||||
fixed-height: 0;
|
||||
border: 8px 0px 0px;
|
||||
border-color: @separatorcolor;
|
||||
spacing: 8px;
|
||||
scrollbar: false;
|
||||
padding: 2px 0px 0px;
|
||||
}
|
||||
element {
|
||||
border: 0;
|
||||
padding: 1px;
|
||||
}
|
||||
element-text {
|
||||
background-color: inherit;
|
||||
text-color: inherit;
|
||||
}
|
||||
element.normal.normal {
|
||||
background-color: @normal-background;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
element.normal.urgent {
|
||||
background-color: @urgent-background;
|
||||
text-color: @urgent-foreground;
|
||||
}
|
||||
element.normal.active {
|
||||
background-color: @active-background;
|
||||
text-color: @active-foreground;
|
||||
}
|
||||
element.selected.normal {
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}
|
||||
element.selected.urgent {
|
||||
background-color: @selected-urgent-background;
|
||||
text-color: @selected-urgent-foreground;
|
||||
}
|
||||
element.selected.active {
|
||||
background-color: @selected-active-background;
|
||||
text-color: @selected-active-foreground;
|
||||
}
|
||||
element.alternate.normal {
|
||||
background-color: @alternate-normal-background;
|
||||
text-color: @alternate-normal-foreground;
|
||||
}
|
||||
element.alternate.urgent {
|
||||
background-color: @alternate-urgent-background;
|
||||
text-color: @alternate-urgent-foreground;
|
||||
}
|
||||
element.alternate.active {
|
||||
background-color: @alternate-active-background;
|
||||
text-color: @alternate-active-foreground;
|
||||
}
|
||||
scrollbar {
|
||||
width: 4px;
|
||||
border: 0;
|
||||
handle-color: @normal-foreground;
|
||||
handle-width: 8px;
|
||||
padding: 0;
|
||||
}
|
||||
mode-switcher {
|
||||
border: 2px 0px 0px;
|
||||
border-color: @separatorcolor;
|
||||
}
|
||||
button {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
button.selected {
|
||||
background-color: @selected-normal-background;
|
||||
text-color: @selected-normal-foreground;
|
||||
}
|
||||
inputbar {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
padding: 1px;
|
||||
}
|
||||
case-indicator {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
entry {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
prompt {
|
||||
spacing: 0;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
inputbar {
|
||||
children: [ prompt,textbox-prompt-colon,entry,case-indicator ];
|
||||
}
|
||||
textbox-prompt-colon {
|
||||
expand: false;
|
||||
str: ":";
|
||||
margin: 0px 0.3em 0em 0em;
|
||||
text-color: @normal-foreground;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
# 基于 https://github.com/endeavouros-team/endeavouros-i3wm-setup
|
||||
# 直接从当前文件夹中读取配置文件作为配置内容
|
||||
home.file.".config/rofi" = {
|
||||
source = ./configs;
|
||||
# copy the scripts directory recursively
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
# 直接以 text 的方式,在 nix 配置文件中硬编码文件内容
|
||||
# home.file.".xxx".text = ''
|
||||
# xxx
|
||||
# '';
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
# nix tooling
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
alejandra
|
||||
deadnix
|
||||
statix
|
||||
];
|
||||
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{config, ...}: let
|
||||
d = config.xdg.dataHome;
|
||||
c = config.xdg.configHome;
|
||||
cache = config.xdg.cacheHome;
|
||||
in {
|
||||
imports = [
|
||||
./nushell
|
||||
./common.nix
|
||||
./starship.nix
|
||||
./terminals.nix
|
||||
];
|
||||
|
||||
# add environment variables
|
||||
home.sessionVariables = {
|
||||
# clean up ~
|
||||
LESSHISTFILE = cache + "/less/history";
|
||||
LESSKEY = c + "/less/lesskey";
|
||||
WINEPREFIX = d + "/wine";
|
||||
XAUTHORITY = "$XDG_RUNTIME_DIR/Xauthority";
|
||||
|
||||
# set default applications
|
||||
EDITOR = "vim";
|
||||
BROWSER = "firefox";
|
||||
TERMINAL = "alacritty";
|
||||
|
||||
# enable scrolling in git diff
|
||||
DELTA_PAGER = "less -R";
|
||||
|
||||
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
|
||||
};
|
||||
|
||||
home.shellAliases = {
|
||||
k = "kubectl";
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
programs.nushell = {
|
||||
enable = true;
|
||||
configFile.source = ./config.nu;
|
||||
envFile.source = ./env.nu;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
# Nushell Environment Config File
|
||||
|
||||
# Specifies how environment variables are:
|
||||
# - converted from a string to a value on Nushell startup (from_string)
|
||||
# - converted from a value back to a string when running external commands (to_string)
|
||||
# Note: The conversions happen *after* config.nu is loaded
|
||||
let-env ENV_CONVERSIONS = {
|
||||
"PATH": {
|
||||
from_string: { |s| $s | split row (char esep) | path expand -n }
|
||||
to_string: { |v| $v | path expand -n | str join (char esep) }
|
||||
}
|
||||
"Path": {
|
||||
from_string: { |s| $s | split row (char esep) | path expand -n }
|
||||
to_string: { |v| $v | path expand -n | str join (char esep) }
|
||||
}
|
||||
}
|
||||
|
||||
# Directories to search for scripts when calling source or use
|
||||
#
|
||||
# By default, <nushell-config-dir>/scripts is added
|
||||
let-env NU_LIB_DIRS = [
|
||||
($nu.config-path | path dirname | path join 'scripts')
|
||||
]
|
||||
|
||||
# Directories to search for plugin binaries when calling register
|
||||
#
|
||||
# By default, <nushell-config-dir>/plugins is added
|
||||
let-env NU_PLUGIN_DIRS = [
|
||||
($nu.config-path | path dirname | path join 'plugins')
|
||||
]
|
||||
|
||||
# To add entries to PATH (on Windows you might use Path), you can use the following pattern:
|
||||
# let-env PATH = ($env.PATH | split row (char esep) | prepend '/some/path')
|
||||
|
||||
mkdir ~/.cache/starship
|
||||
starship init nu | sed "s/size -c/size/" | save ~/.cache/starship/init.nu
|
||||
@@ -0,0 +1,13 @@
|
||||
{config, ...}: {
|
||||
home.sessionVariables.STARSHIP_CACHE = "${config.xdg.cacheHome}/starship";
|
||||
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
settings = {
|
||||
character = {
|
||||
success_symbol = "[›](bold green)";
|
||||
error_symbol = "[›](bold red)";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
# terminals
|
||||
|
||||
let
|
||||
font = "JetBrainsMono Nerd Font";
|
||||
in
|
||||
{
|
||||
programs.alacritty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
window.opacity = 0.95;
|
||||
window.dynamic_padding = true;
|
||||
window.padding = {
|
||||
x = 5;
|
||||
y = 5;
|
||||
};
|
||||
scrolling.history = 10000;
|
||||
|
||||
font = {
|
||||
normal.family = font;
|
||||
bold.family = font;
|
||||
italic.family = font;
|
||||
size = 11;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user