├── .Xmodmap ├── .ackrc ├── .character_trainer ├── .clojure └── deps.edn ├── .config ├── environment.d │ └── xdg.conf ├── i3 │ └── config ├── kitty │ └── kitty.conf ├── pipewire │ └── pipewire.conf ├── sway │ ├── config │ ├── config.bmo │ ├── config.bubblegum │ ├── config.d │ │ ├── bindings.conf │ │ ├── input_devices.conf │ │ ├── office_monitors.conf │ │ ├── setup_path.conf │ │ └── xdg_desktop_portal.conf │ ├── config.marceline │ ├── config.old │ └── config.prismo ├── tmux │ └── tmux.conf ├── waybar │ ├── config │ └── config.bmo ├── xdg-desktop-portal-wlr │ └── config └── xdg-desktop-portal │ └── sway-portal.conf ├── .emacs-profiles.el ├── .gitconfig ├── .gitignore ├── .irbrc ├── .local └── firefox.desktop ├── .mbsyncrc ├── .rdebugrc ├── .tmate.conf ├── .zshrc ├── IGNORE ├── README.md ├── bin ├── ,add ├── bemenu-run ├── brightness ├── emacs ├── install_babashka ├── install_beid ├── install_clojure ├── install_frp ├── install_gcloud ├── install_jet ├── lein2deps ├── pull_repos ├── repo_status ├── setup_path ├── ss ├── sync_to_stick ├── upgrade_clojure ├── volume └── waybar ├── connect-the-dots ├── extra_packages ├── git └── template │ └── HEAD ├── minimal.zshrc ├── notes.md └── sync /.Xmodmap: -------------------------------------------------------------------------------- 1 | ! http://www.in-ulm.de/~mascheck/X11/xmodmap.html 2 | 3 | ! output taken from: 4 | ! xmodmap -pke | egrep '(Control|Super|Alt|Menu)' 5 | ! Use to set keycodes correctly below. List reordered to match 6 | ! keys from left to right. 7 | 8 | ! keycode 37 = Control_L NoSymbol Control_L 9 | ! keycode 64 = Alt_L Meta_L Alt_L Meta_L 10 | ! keycode 105 = Control_R NoSymbol Control_R 11 | ! keycode 133 = Super_L NoSymbol Super_L 12 | ! keycode 134 = Super_R NoSymbol Super_R 13 | ! keycode 135 = Menu NoSymbol Menu 14 | ! keycode 147 = XF86MenuKB NoSymbol XF86MenuKB 15 | ! keycode 204 = NoSymbol Alt_L NoSymbol Alt_L 16 | ! keycode 206 = NoSymbol Super_L NoSymbol Super_L 17 | 18 | ! First clear all modifiers, caps lock & control 19 | 20 | ! ====================== 21 | 22 | clear Lock 23 | clear Control 24 | clear Mod1 25 | clear Mod2 26 | clear Mod3 27 | clear Mod4 28 | 29 | keycode 66 = Control_L 30 | keycode 37 = Hyper_L 31 | keycode 105 = Hyper_L 32 | 33 | add Control = Control_L Control_R 34 | add Mod1 = Alt_R Alt_L Meta_R Meta_L 35 | add Mod3 = Hyper_L 36 | add Mod4 = Super_L Super_R 37 | 38 | ! ====================== 39 | 40 | ! clear mod1 41 | ! clear mod4 42 | 43 | ! keycode 66 = Alt_L Meta_L 44 | ! keycode 37 = Super_L 45 | ! keycode 133 = Alt_L Meta_L 46 | ! keycode 64 = Control_L 47 | ! keycode 108 = Control_R 48 | ! keycode 134 = Alt_R Meta_R 49 | ! keycode 135 = Alt_R Meta_R 50 | ! keycode 105 = Super_R 51 | 52 | ! We need to set keycodes first, as some programs (emacs!) read 53 | ! the key names and seem to ignore what's below. 54 | ! add mod1 = Alt_R Alt_L Meta_R Meta_L 55 | ! add mod4 = Super_R Super_L Menu 56 | ! add control = Control_R Control_L 57 | 58 | 59 | ! keycode 66 = Super_L 60 | ! clear Lock 61 | 62 | ! Undo 63 | ! ----- 64 | 65 | clear Mod3 66 | keycode 37 = Control_L 67 | keycode 105 = Control_L 68 | add control = Control_L 69 | -------------------------------------------------------------------------------- /.ackrc: -------------------------------------------------------------------------------- 1 | --type-add=ruby=.haml,.rake,.builder 2 | --type-add=css=.less 3 | -------------------------------------------------------------------------------- /.clojure/deps.edn: -------------------------------------------------------------------------------- 1 | {;; :paths [] 2 | :launchpad/options 3 | {:emacs true 4 | :portal true 5 | :namespace-maps false} 6 | 7 | #_#_:mvn/repos 8 | {"cs-mvn" {:url "s3://cs-mvn/release"} 9 | "datomic-cloud" {:url "s3://datomic-releases-1fc2183a/maven/releases"}} 10 | 11 | :deps {} #_{com.lambdaisland/classpath {:local/root "/home/arne/github/lambdaisland/classpath"} 12 | openjdk/openjdk-17-docs {:local/root "/usr/share/doc/openjdk-17-jre-headless/api"} 13 | vvvvalvalval/scope-capture {:mvn/version "0.3.2"} 14 | #_#_ com.github.jnr/jnr-posix {:mvn/version "3.1.14"}} 15 | 16 | :aliases 17 | {:new 18 | {:extra-deps {seancorfield/clj-new {:mvn/version "RELEASE"}} 19 | :main-opts ["-m" "clj-new.create"]} 20 | 21 | :depot/check 22 | {:extra-deps {Olical/depot {:mvn/version "RELEASE"}} 23 | :main-opts ["-m" "depot.outdated.main"]} 24 | 25 | :depot 26 | {:extra-deps {Olical/depot {:mvn/version "RELEASE"}} 27 | :main-opts ["-m" "depot.outdated.main" "--write" "--every"]} 28 | 29 | :vulcan 30 | {:extra-deps 31 | {omnyway-labs/vulcan 32 | {:mvn/version "RELEASE"}#_ 33 | {:git/url "https://github.com/omnyway-labs/vulcan.git", 34 | :sha "31b449b979a4263c6ecbd1e1ec1b065391e3dc92" 35 | :tag "master"}}, 36 | :main-opts ["-m" "vulcan.main"], 37 | :jvm-opts 38 | ["-client" 39 | "-XX:+UseSerialGC" 40 | "-XX:CICompilerCount=1" 41 | "-XX:+TieredCompilation" 42 | "-Xshare:off" 43 | "-Xverify:none" 44 | "-XX:TieredStopAtLevel=1"]} 45 | 46 | :portal 47 | {:extra-deps {djblue/portal {:mvn/version "RELEASE"}}} 48 | 49 | :antq 50 | {:extra-deps {com.github.liquidz/antq {:mvn/version "RELEASE"}} 51 | :main-opts ["-m" "antq.core"]} 52 | 53 | :upgrade 54 | {:extra-deps {com.github.liquidz/antq {:mvn/version "RELEASE"}} 55 | :main-opts ["-m" "antq.core" "--skip=pom" "--skip=github-action" "--upgrade" "--force" "--download"]} 56 | 57 | :upgrade-transit 58 | {:extra-deps {com.github.liquidz/antq {:mvn/version "RELEASE"}} 59 | :main-opts 60 | ["-m" "antq.core" "--skip=pom" "--skip=github-action" "--upgrade" "--force" "--download" 61 | "--focus=kepler16/entity.cljc" 62 | "--focus=kepler16/gx.cljc" 63 | "--focus=kepler16/http" 64 | "--focus=kepler16/token-vault.cljc" 65 | "--focus=kepler16/twilio" 66 | "--focus=transit-engineering/accounts" 67 | "--focus=transit-engineering/api" 68 | "--focus=transit-engineering/auth.clj" 69 | "--focus=transit-engineering/bcode-issuer" 70 | "--focus=transit-engineering/gx.contrib.cljc" 71 | "--focus=transit-engineering/micro.clj" 72 | "--focus=transit-engineering/network" 73 | "--focus=transit-engineering/offer-engine" 74 | "--focus=transit-engineering/telemetry.clj" 75 | "--focus=transit-engineering/token-vault" 76 | "--focus=transit-engineering/transactions" 77 | "--focus=transit-engineering/utils.clj" 78 | "--focus=transit-platform/anomaly.clj" 79 | "--focus=transit-platform/customer-session.cljc" 80 | "--focus=transit-platform/dev.clj" 81 | "--focus=transit-engineering/dev.clj" 82 | "--focus=transit-platform/did.clj" 83 | "--focus=transit-platform/domain.clj" 84 | "--focus=transit-platform/entity.clj" 85 | "--focus=transit-platform/faker.clj" 86 | "--focus=transit-platform/graphql.clj" 87 | "--focus=transit-platform/k16.entity.cljc" 88 | "--focus=transit-platform/kid.clj" 89 | "--focus=transit-platform/platform.clj" 90 | "--focus=transit-platform/storage.xtdb.clj" 91 | "--focus=transit-platform/telemetry.clj" 92 | "--focus=transit-platform/token-vault.clj" 93 | ]} 94 | }} 95 | -------------------------------------------------------------------------------- /.config/environment.d/xdg.conf: -------------------------------------------------------------------------------- 1 | XDG_CURRENT_DESKTOP=sway -------------------------------------------------------------------------------- /.config/i3/config: -------------------------------------------------------------------------------- 1 | # Default config for sway 2 | # 3 | # Copy this to ~/.config/sway/config and edit it to your liking. 4 | # 5 | # Read `man 5 sway` for a complete reference. 6 | 7 | ### Variables 8 | # 9 | # Logo key. Use Mod1 for Alt. 10 | set $mod Mod4 11 | # Home row direction keys, like vim 12 | set $left h 13 | set $down j 14 | set $up k 15 | set $right l 16 | # Your preferred terminal emulator 17 | set $term /home/arne/bin/terminal 18 | # Your preferred application launcher 19 | # Note: pass the final command to swaymsg so that the resulting window can be opened 20 | # on the original workspace that the command was run on. 21 | # set $menu dmenu_path | dmenu | xargs swaymsg exec -- 22 | set $menu dmenu_run 23 | 24 | ### Output configuration 25 | # 26 | # Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/) 27 | # output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill 28 | # 29 | # Example configuration: 30 | # 31 | # output HDMI-A-1 resolution 1920x1080 position 1920,0 32 | # 33 | # You can get the names of your outputs by running: swaymsg -t get_outputs 34 | 35 | # output DP-1 mode --custom 1920x1080 36 | # output DP-1 pos 0 0 37 | # output HDMI-A-1 pos 1920 0 38 | 39 | ### Idle configuration 40 | # 41 | # Example configuration: 42 | # 43 | # exec swayidle -w \ 44 | # timeout 300 'swaylock -f -c 000000' \ 45 | # timeout 600 'swaymsg "output * dpms off"' \ 46 | # resume 'swaymsg "output * dpms on"' \ 47 | # before-sleep 'swaylock -f -c 000000' 48 | # 49 | # This will lock your screen after 300 seconds of inactivity, then turn off 50 | # your displays after another 300 seconds, and turn your screens back on when 51 | # resumed. It will also lock your screen before your computer goes to sleep. 52 | 53 | ### Input configuration 54 | # 55 | # Example configuration: 56 | # 57 | # input "2:14:SynPS/2_Synaptics_TouchPad" { 58 | # dwt enabled 59 | # tap enabled 60 | # natural_scroll enabled 61 | # middle_emulation enabled 62 | # } 63 | # 64 | # You can get the names of your inputs by running: swaymsg -t get_inputs 65 | # Read `man 5 sway-input` for more information about this section. 66 | 67 | ### Key bindings 68 | # 69 | # Basics: 70 | # 71 | # Start a terminal 72 | bindsym $mod+Shift+Return exec $term 73 | 74 | # Kill focused window 75 | bindsym $mod+Shift+c kill 76 | 77 | # Start your launcher 78 | bindsym $mod+p exec $menu 79 | 80 | # Drag floating windows by holding down $mod and left mouse button. 81 | # Resize them with right mouse button + $mod. 82 | # Despite the name, also works for non-floating windows. 83 | floating_modifier $mod 84 | 85 | # Reload the configuration file 86 | bindsym $mod+q reload 87 | 88 | # Exit sway (logs you out of your Wayland session) 89 | bindsym $mod+Shift+q exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit' 90 | bindsym Print exec /home/arne/bin/screenshot 91 | 92 | # 93 | # Moving around: 94 | # 95 | # Move your focus around 96 | bindsym $mod+$left focus left 97 | bindsym $mod+$down focus down 98 | bindsym $mod+$up focus up 99 | bindsym $mod+$right focus right 100 | # Or use $mod+[up|down|left|right] 101 | bindsym $mod+Left focus left 102 | bindsym $mod+Down focus down 103 | bindsym $mod+Up focus up 104 | bindsym $mod+Right focus right 105 | 106 | # Move the focused window with the same, but add Shift 107 | bindsym $mod+Shift+$left move left 108 | bindsym $mod+Shift+$down move down 109 | bindsym $mod+Shift+$up move up 110 | bindsym $mod+Shift+$right move right 111 | # Ditto, with arrow keys 112 | bindsym $mod+Shift+Left move left 113 | bindsym $mod+Shift+Down move down 114 | bindsym $mod+Shift+Up move up 115 | bindsym $mod+Shift+Right move right 116 | # 117 | # Workspaces: 118 | # 119 | # Switch to workspace 120 | bindsym $mod+1 workspace 1 121 | bindsym $mod+2 workspace 2 122 | bindsym $mod+3 workspace 3 123 | bindsym $mod+4 workspace 4 124 | bindsym $mod+5 workspace 5 125 | bindsym $mod+6 workspace 6 126 | bindsym $mod+7 workspace 7 127 | bindsym $mod+8 workspace 8 128 | bindsym $mod+9 workspace 9 129 | bindsym $mod+0 workspace 10 130 | # Move focused container to workspace 131 | bindsym $mod+Shift+1 move container to workspace 1 132 | bindsym $mod+Shift+2 move container to workspace 2 133 | bindsym $mod+Shift+3 move container to workspace 3 134 | bindsym $mod+Shift+4 move container to workspace 4 135 | bindsym $mod+Shift+5 move container to workspace 5 136 | bindsym $mod+Shift+6 move container to workspace 6 137 | bindsym $mod+Shift+7 move container to workspace 7 138 | bindsym $mod+Shift+8 move container to workspace 8 139 | bindsym $mod+Shift+9 move container to workspace 9 140 | bindsym $mod+Shift+0 move container to workspace 10 141 | # Note: workspaces can have any name you want, not just numbers. 142 | # We just use 1-10 as the default. 143 | # 144 | # Layout stuff: 145 | # 146 | # You can "split" the current object of your focus with 147 | # $mod+b or $mod+v, for horizontal and vertical splits 148 | # respectively. 149 | bindsym $mod+b splith 150 | bindsym $mod+v splitv 151 | 152 | # Switch the current container between different layout styles 153 | bindsym $mod+s layout stacking 154 | bindsym $mod+w layout tabbed 155 | bindsym $mod+e layout toggle split 156 | 157 | # Make the current focus fullscreen 158 | bindsym $mod+f fullscreen 159 | 160 | # Toggle the current focus between tiling and floating mode 161 | bindsym $mod+Shift+space floating toggle 162 | 163 | # Swap focus between the tiling area and the floating area 164 | bindsym $mod+space focus mode_toggle 165 | 166 | # Move focus to the parent container 167 | bindsym $mod+a focus parent 168 | # 169 | # Scratchpad: 170 | # 171 | # Sway has a "scratchpad", which is a bag of holding for windows. 172 | # You can send windows there and get them back later. 173 | 174 | # Move the currently focused window to the scratchpad 175 | bindsym $mod+Shift+minus move scratchpad 176 | 177 | # Show the next scratchpad window or hide the focused scratchpad window. 178 | # If there are multiple scratchpad windows, this command cycles through them. 179 | bindsym $mod+minus scratchpad show 180 | 181 | #bindsym $mod+grave exec /home/arne/bin/sway_workspace_to_other_output 182 | 183 | bindsym $mod+Shift+greater move workspace to output right 184 | bindsym $mod+Shift+less move workspace to output left 185 | 186 | # 187 | # Resizing containers: 188 | # 189 | mode "resize" { 190 | # left will shrink the containers width 191 | # right will grow the containers width 192 | # up will shrink the containers height 193 | # down will grow the containers height 194 | bindsym $left resize shrink width 10px 195 | bindsym $down resize grow height 10px 196 | bindsym $up resize shrink height 10px 197 | bindsym $right resize grow width 10px 198 | 199 | # Ditto, with arrow keys 200 | bindsym Left resize shrink width 10px 201 | bindsym Down resize grow height 10px 202 | bindsym Up resize shrink height 10px 203 | bindsym Right resize grow width 10px 204 | 205 | # Return to default mode 206 | bindsym Return mode "default" 207 | bindsym Escape mode "default" 208 | } 209 | bindsym $mod+r mode "resize" 210 | 211 | # input type:keyboard { 212 | # # xkb_layout us 213 | # xkb_options ctrl:nocaps,compose:ralt 214 | # } 215 | 216 | #input * xkb_options ctrl:nocaps 217 | #input * xkb_options compose:rwin 218 | 219 | # 220 | # Status Bar: 221 | # 222 | # Read `man 5 sway-bar` for more information about this section. 223 | bar { 224 | position bottom 225 | 226 | # When the status_command prints a new line to stdout, swaybar updates. 227 | # The default just shows the current date and time. 228 | status_command /home/arne/bin/sway_status_bar_command 229 | # status_command i3status 230 | 231 | colors { 232 | statusline #ffffff 233 | background #323232 234 | inactive_workspace #32323200 #32323200 #5c5c5c 235 | } 236 | } 237 | 238 | default_border none 239 | 240 | # include /etc/sway/config.d/* 241 | # 242 | exec ~/bin/monitor_setup 243 | -------------------------------------------------------------------------------- /.config/kitty/kitty.conf: -------------------------------------------------------------------------------- 1 | # vim:fileencoding=utf-8:ft=conf:foldmethod=marker 2 | 3 | #: Fonts {{{ 4 | 5 | #: kitty has very powerful font management. You can configure 6 | #: individual font faces and even specify special fonts for particular 7 | #: characters. 8 | 9 | # font_family monospace 10 | # bold_font auto 11 | # italic_font auto 12 | # bold_italic_font auto 13 | 14 | #: You can specify different fonts for the bold/italic/bold-italic 15 | #: variants. To get a full list of supported fonts use the `kitty 16 | #: list-fonts` command. By default they are derived automatically, by 17 | #: the OSes font system. Setting them manually is useful for font 18 | #: families that have many weight variants like Book, Medium, Thick, 19 | #: etc. For example:: 20 | 21 | font_family Iosevka Fixed SS14 22 | 23 | # : font_family Operator Mono Book 24 | # : bold_font Operator Mono Medium 25 | # : italic_font Operator Mono Book Italic 26 | # : bold_italic_font Operator Mono Medium Italic 27 | 28 | font_size 14.0 29 | 30 | #: Font size (in pts) 31 | 32 | # force_ltr no 33 | 34 | #: kitty does not support BIDI (bidirectional text), however, for RTL 35 | #: scripts, words are automatically displayed in RTL. That is to say, 36 | #: in an RTL script, the words "HELLO WORLD" display in kitty as 37 | #: "WORLD HELLO", and if you try to select a substring of an RTL- 38 | #: shaped string, you will get the character that would be there had 39 | #: the the string been LTR. For example, assuming the Hebrew word 40 | #: ירושלים, selecting the character that on the screen appears to be ם 41 | #: actually writes into the selection buffer the character י. 42 | 43 | #: kitty's default behavior is useful in conjunction with a filter to 44 | #: reverse the word order, however, if you wish to manipulate RTL 45 | #: glyphs, it can be very challenging to work with, so this option is 46 | #: provided to turn it off. Furthermore, this option can be used with 47 | #: the command line program GNU FriBidi 48 | #: to get BIDI 49 | #: support, because it will force kitty to always treat the text as 50 | #: LTR, which FriBidi expects for terminals. 51 | 52 | # adjust_line_height 0 53 | # adjust_column_width 0 54 | 55 | #: Change the size of each character cell kitty renders. You can use 56 | #: either numbers, which are interpreted as pixels or percentages 57 | #: (number followed by %), which are interpreted as percentages of the 58 | #: unmodified values. You can use negative pixels or percentages less 59 | #: than 100% to reduce sizes (but this might cause rendering 60 | #: artifacts). 61 | 62 | # symbol_map U+E0A0-U+E0A3,U+E0C0-U+E0C7 PowerlineSymbols 63 | 64 | #: Map the specified unicode codepoints to a particular font. Useful 65 | #: if you need special rendering for some symbols, such as for 66 | #: Powerline. Avoids the need for patched fonts. Each unicode code 67 | #: point is specified in the form U+. You 68 | #: can specify multiple code points, separated by commas and ranges 69 | #: separated by hyphens. symbol_map itself can be specified multiple 70 | #: times. Syntax is:: 71 | 72 | #: symbol_map codepoints Font Family Name 73 | 74 | # disable_ligatures never 75 | 76 | #: Choose how you want to handle multi-character ligatures. The 77 | #: default is to always render them. You can tell kitty to not render 78 | #: them when the cursor is over them by using cursor to make editing 79 | #: easier, or have kitty never render them at all by using always, if 80 | #: you don't like them. The ligature strategy can be set per-window 81 | #: either using the kitty remote control facility or by defining 82 | #: shortcuts for it in kitty.conf, for example:: 83 | 84 | #: map alt+1 disable_ligatures_in active always 85 | #: map alt+2 disable_ligatures_in all never 86 | #: map alt+3 disable_ligatures_in tab cursor 87 | 88 | #: Note that this refers to programming ligatures, typically 89 | #: implemented using the calt OpenType feature. For disabling general 90 | #: ligatures, use the font_features setting. 91 | 92 | # font_features none 93 | 94 | #: Choose exactly which OpenType features to enable or disable. This 95 | #: is useful as some fonts might have features worthwhile in a 96 | #: terminal. For example, Fira Code Retina includes a discretionary 97 | #: feature, zero, which in that font changes the appearance of the 98 | #: zero (0), to make it more easily distinguishable from Ø. Fira Code 99 | #: Retina also includes other discretionary features known as 100 | #: Stylistic Sets which have the tags ss01 through ss20. 101 | 102 | #: Note that this code is indexed by PostScript name, and not the font 103 | #: family. This allows you to define very precise feature settings; 104 | #: e.g. you can disable a feature in the italic font but not in the 105 | #: regular font. 106 | 107 | #: On Linux, these are read from the FontConfig database first and 108 | #: then this, setting is applied, so they can be configured in a 109 | #: single, central place. 110 | 111 | #: To get the PostScript name for a font, use kitty + list-fonts 112 | #: --psnames: 113 | 114 | #: .. code-block:: sh 115 | 116 | #: $ kitty + list-fonts --psnames | grep Fira 117 | #: Fira Code 118 | #: Fira Code Bold (FiraCode-Bold) 119 | #: Fira Code Light (FiraCode-Light) 120 | #: Fira Code Medium (FiraCode-Medium) 121 | #: Fira Code Regular (FiraCode-Regular) 122 | #: Fira Code Retina (FiraCode-Retina) 123 | 124 | #: The part in brackets is the PostScript name. 125 | 126 | #: Enable alternate zero and oldstyle numerals:: 127 | 128 | #: font_features FiraCode-Retina +zero +onum 129 | 130 | #: Enable only alternate zero:: 131 | 132 | #: font_features FiraCode-Retina +zero 133 | 134 | #: Disable the normal ligatures, but keep the calt feature which (in 135 | #: this font) breaks up monotony:: 136 | 137 | #: font_features TT2020StyleB-Regular -liga +calt 138 | 139 | #: In conjunction with force_ltr, you may want to disable Arabic 140 | #: shaping entirely, and only look at their isolated forms if they 141 | #: show up in a document. You can do this with e.g.:: 142 | 143 | #: font_features UnifontMedium +isol -medi -fina -init 144 | 145 | # box_drawing_scale 0.001, 1, 1.5, 2 146 | 147 | #: Change the sizes of the lines used for the box drawing unicode 148 | #: characters These values are in pts. They will be scaled by the 149 | #: monitor DPI to arrive at a pixel value. There must be four values 150 | #: corresponding to thin, normal, thick, and very thick lines. 151 | 152 | #: }}} 153 | 154 | #: Cursor customization {{{ 155 | 156 | # cursor #cccccc 157 | 158 | #: Default cursor color 159 | 160 | # cursor_text_color #111111 161 | 162 | #: Choose the color of text under the cursor. If you want it rendered 163 | #: with the background color of the cell underneath instead, use the 164 | #: special keyword: background 165 | 166 | # cursor_shape block 167 | 168 | #: The cursor shape can be one of (block, beam, underline) 169 | 170 | # cursor_beam_thickness 1.5 171 | 172 | #: Defines the thickness of the beam cursor (in pts) 173 | 174 | # cursor_underline_thickness 2.0 175 | 176 | #: Defines the thickness of the underline cursor (in pts) 177 | 178 | # cursor_blink_interval -1 179 | 180 | #: The interval (in seconds) at which to blink the cursor. Set to zero 181 | #: to disable blinking. Negative values mean use system default. Note 182 | #: that numbers smaller than repaint_delay will be limited to 183 | #: repaint_delay. 184 | 185 | # cursor_stop_blinking_after 15.0 186 | 187 | #: Stop blinking cursor after the specified number of seconds of 188 | #: keyboard inactivity. Set to zero to never stop blinking. 189 | 190 | #: }}} 191 | 192 | #: Scrollback {{{ 193 | 194 | # scrollback_lines 2000 195 | 196 | #: Number of lines of history to keep in memory for scrolling back. 197 | #: Memory is allocated on demand. Negative numbers are (effectively) 198 | #: infinite scrollback. Note that using very large scrollback is not 199 | #: recommended as it can slow down performance of the terminal and 200 | #: also use large amounts of RAM. Instead, consider using 201 | #: scrollback_pager_history_size. 202 | 203 | # scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER 204 | 205 | #: Program with which to view scrollback in a new window. The 206 | #: scrollback buffer is passed as STDIN to this program. If you change 207 | #: it, make sure the program you use can handle ANSI escape sequences 208 | #: for colors and text formatting. INPUT_LINE_NUMBER in the command 209 | #: line above will be replaced by an integer representing which line 210 | #: should be at the top of the screen. Similarly CURSOR_LINE and 211 | #: CURSOR_COLUMN will be replaced by the current cursor position. 212 | 213 | # scrollback_pager_history_size 0 214 | 215 | #: Separate scrollback history size, used only for browsing the 216 | #: scrollback buffer (in MB). This separate buffer is not available 217 | #: for interactive scrolling but will be piped to the pager program 218 | #: when viewing scrollback buffer in a separate window. The current 219 | #: implementation stores the data in UTF-8, so approximatively 10000 220 | #: lines per megabyte at 100 chars per line, for pure ASCII text, 221 | #: unformatted text. A value of zero or less disables this feature. 222 | #: The maximum allowed size is 4GB. 223 | 224 | # wheel_scroll_multiplier 5.0 225 | 226 | #: Modify the amount scrolled by the mouse wheel. Note this is only 227 | #: used for low precision scrolling devices, not for high precision 228 | #: scrolling on platforms such as macOS and Wayland. Use negative 229 | #: numbers to change scroll direction. 230 | 231 | # touch_scroll_multiplier 1.0 232 | 233 | #: Modify the amount scrolled by a touchpad. Note this is only used 234 | #: for high precision scrolling devices on platforms such as macOS and 235 | #: Wayland. Use negative numbers to change scroll direction. 236 | 237 | #: }}} 238 | 239 | #: Mouse {{{ 240 | 241 | # mouse_hide_wait 3.0 242 | 243 | #: Hide mouse cursor after the specified number of seconds of the 244 | #: mouse not being used. Set to zero to disable mouse cursor hiding. 245 | #: Set to a negative value to hide the mouse cursor immediately when 246 | #: typing text. Disabled by default on macOS as getting it to work 247 | #: robustly with the ever-changing sea of bugs that is Cocoa is too 248 | #: much effort. 249 | 250 | # url_color #0087bd 251 | # url_style curly 252 | 253 | #: The color and style for highlighting URLs on mouse-over. url_style 254 | #: can be one of: none, single, double, curly 255 | 256 | # open_url_modifiers kitty_mod 257 | 258 | #: The modifier keys to press when clicking with the mouse on URLs to 259 | #: open the URL 260 | 261 | # open_url_with default 262 | 263 | #: The program with which to open URLs that are clicked on. The 264 | #: special value default means to use the operating system's default 265 | #: URL handler. 266 | 267 | # url_prefixes http https file ftp 268 | 269 | #: The set of URL prefixes to look for when detecting a URL under the 270 | #: mouse cursor. 271 | 272 | # detect_urls yes 273 | 274 | #: Detect URLs under the mouse. Detected URLs are highlighted with an 275 | #: underline and the mouse cursor becomes a hand over them. Even if 276 | #: this option is disabled, URLs are still clickable. 277 | 278 | # copy_on_select no 279 | 280 | #: Copy to clipboard or a private buffer on select. With this set to 281 | #: clipboard, simply selecting text with the mouse will cause the text 282 | #: to be copied to clipboard. Useful on platforms such as macOS that 283 | #: do not have the concept of primary selections. You can instead 284 | #: specify a name such as a1 to copy to a private kitty buffer 285 | #: instead. Map a shortcut with the paste_from_buffer action to paste 286 | #: from this private buffer. For example:: 287 | 288 | #: map cmd+shift+v paste_from_buffer a1 289 | 290 | #: Note that copying to the clipboard is a security risk, as all 291 | #: programs, including websites open in your browser can read the 292 | #: contents of the system clipboard. 293 | 294 | # strip_trailing_spaces never 295 | 296 | #: Remove spaces at the end of lines when copying to clipboard. A 297 | #: value of smart will do it when using normal selections, but not 298 | #: rectangle selections. always will always do it. 299 | 300 | # rectangle_select_modifiers ctrl+alt 301 | 302 | #: The modifiers to use rectangular selection (i.e. to select text in 303 | #: a rectangular block with the mouse) 304 | 305 | # terminal_select_modifiers shift 306 | 307 | #: The modifiers to override mouse selection even when a terminal 308 | #: application has grabbed the mouse 309 | 310 | # select_by_word_characters @-./_~?&=%+# 311 | 312 | #: Characters considered part of a word when double clicking. In 313 | #: addition to these characters any character that is marked as an 314 | #: alphanumeric character in the unicode database will be matched. 315 | 316 | # click_interval -1.0 317 | 318 | #: The interval between successive clicks to detect double/triple 319 | #: clicks (in seconds). Negative numbers will use the system default 320 | #: instead, if available, or fallback to 0.5. 321 | 322 | # focus_follows_mouse no 323 | 324 | #: Set the active window to the window under the mouse when moving the 325 | #: mouse around 326 | 327 | # pointer_shape_when_grabbed arrow 328 | 329 | #: The shape of the mouse pointer when the program running in the 330 | #: terminal grabs the mouse. Valid values are: arrow, beam and hand 331 | 332 | # default_pointer_shape beam 333 | 334 | #: The default shape of the mouse pointer. Valid values are: arrow, 335 | #: beam and hand 336 | 337 | # pointer_shape_when_dragging beam 338 | 339 | #: The default shape of the mouse pointer when dragging across text. 340 | #: Valid values are: arrow, beam and hand 341 | 342 | #: }}} 343 | 344 | #: Performance tuning {{{ 345 | 346 | # repaint_delay 10 347 | 348 | #: Delay (in milliseconds) between screen updates. Decreasing it, 349 | #: increases frames-per-second (FPS) at the cost of more CPU usage. 350 | #: The default value yields ~100 FPS which is more than sufficient for 351 | #: most uses. Note that to actually achieve 100 FPS you have to either 352 | #: set sync_to_monitor to no or use a monitor with a high refresh 353 | #: rate. Also, to minimize latency when there is pending input to be 354 | #: processed, repaint_delay is ignored. 355 | 356 | # input_delay 3 357 | 358 | #: Delay (in milliseconds) before input from the program running in 359 | #: the terminal is processed. Note that decreasing it will increase 360 | #: responsiveness, but also increase CPU usage and might cause flicker 361 | #: in full screen programs that redraw the entire screen on each loop, 362 | #: because kitty is so fast that partial screen updates will be drawn. 363 | 364 | # sync_to_monitor yes 365 | 366 | #: Sync screen updates to the refresh rate of the monitor. This 367 | #: prevents tearing (https://en.wikipedia.org/wiki/Screen_tearing) 368 | #: when scrolling. However, it limits the rendering speed to the 369 | #: refresh rate of your monitor. With a very high speed mouse/high 370 | #: keyboard repeat rate, you may notice some slight input latency. If 371 | #: so, set this to no. 372 | 373 | #: }}} 374 | 375 | #: Terminal bell {{{ 376 | 377 | enable_audio_bell no 378 | 379 | #: Enable/disable the audio bell. Useful in environments that require 380 | #: silence. 381 | 382 | # visual_bell_duration 0.0 383 | 384 | #: Visual bell duration. Flash the screen when a bell occurs for the 385 | #: specified number of seconds. Set to zero to disable. 386 | 387 | # window_alert_on_bell yes 388 | 389 | #: Request window attention on bell. Makes the dock icon bounce on 390 | #: macOS or the taskbar flash on linux. 391 | 392 | # bell_on_tab yes 393 | 394 | #: Show a bell symbol on the tab if a bell occurs in one of the 395 | #: windows in the tab and the window is not the currently focused 396 | #: window 397 | 398 | # command_on_bell none 399 | 400 | #: Program to run when a bell occurs. 401 | 402 | #: }}} 403 | 404 | #: Window layout {{{ 405 | 406 | # remember_window_size yes 407 | # initial_window_width 640 408 | # initial_window_height 400 409 | 410 | #: If enabled, the window size will be remembered so that new 411 | #: instances of kitty will have the same size as the previous 412 | #: instance. If disabled, the window will initially have size 413 | #: configured by initial_window_width/height, in pixels. You can use a 414 | #: suffix of "c" on the width/height values to have them interpreted 415 | #: as number of cells instead of pixels. 416 | 417 | # enabled_layouts * 418 | 419 | #: The enabled window layouts. A comma separated list of layout names. 420 | #: The special value all means all layouts. The first listed layout 421 | #: will be used as the startup layout. Default configuration is all 422 | #: layouts in alphabetical order. For a list of available layouts, see 423 | #: the https://sw.kovidgoyal.net/kitty/index.html#layouts. 424 | 425 | # window_resize_step_cells 2 426 | # window_resize_step_lines 2 427 | 428 | #: The step size (in units of cell width/cell height) to use when 429 | #: resizing windows. The cells value is used for horizontal resizing 430 | #: and the lines value for vertical resizing. 431 | 432 | # window_border_width 0.5pt 433 | 434 | #: The width of window borders. Can be either in pixels (px) or pts 435 | #: (pt). Values in pts will be rounded to the nearest number of pixels 436 | #: based on screen resolution. If not specified the unit is assumed to 437 | #: be pts. Note that borders are displayed only when more than one 438 | #: window is visible. They are meant to separate multiple windows. 439 | 440 | # draw_minimal_borders yes 441 | 442 | #: Draw only the minimum borders needed. This means that only the 443 | #: minimum needed borders for inactive windows are drawn. That is only 444 | #: the borders that separate the inactive window from a neighbor. Note 445 | #: that setting a non-zero window margin overrides this and causes all 446 | #: borders to be drawn. 447 | 448 | # window_margin_width 0 449 | 450 | #: The window margin (in pts) (blank area outside the border). A 451 | #: single value sets all four sides. Two values set the vertical and 452 | #: horizontal sides. Three values set top, horizontal and bottom. Four 453 | #: values set top, right, bottom and left. 454 | 455 | # single_window_margin_width -1 456 | 457 | #: The window margin (in pts) to use when only a single window is 458 | #: visible. Negative values will cause the value of 459 | #: window_margin_width to be used instead. A single value sets all 460 | #: four sides. Two values set the vertical and horizontal sides. Three 461 | #: values set top, horizontal and bottom. Four values set top, right, 462 | #: bottom and left. 463 | 464 | # window_padding_width 0 465 | 466 | #: The window padding (in pts) (blank area between the text and the 467 | #: window border). A single value sets all four sides. Two values set 468 | #: the vertical and horizontal sides. Three values set top, horizontal 469 | #: and bottom. Four values set top, right, bottom and left. 470 | 471 | # placement_strategy center 472 | 473 | #: When the window size is not an exact multiple of the cell size, the 474 | #: cell area of the terminal window will have some extra padding on 475 | #: the sides. You can control how that padding is distributed with 476 | #: this option. Using a value of center means the cell area will be 477 | #: placed centrally. A value of top-left means the padding will be on 478 | #: only the bottom and right edges. 479 | 480 | # active_border_color #00ff00 481 | 482 | #: The color for the border of the active window. Set this to none to 483 | #: not draw borders around the active window. 484 | 485 | # inactive_border_color #cccccc 486 | 487 | #: The color for the border of inactive windows 488 | 489 | # bell_border_color #ff5a00 490 | 491 | #: The color for the border of inactive windows in which a bell has 492 | #: occurred 493 | 494 | # inactive_text_alpha 1.0 495 | 496 | #: Fade the text in inactive windows by the specified amount (a number 497 | #: between zero and one, with zero being fully faded). 498 | 499 | # hide_window_decorations no 500 | 501 | #: Hide the window decorations (title-bar and window borders) with 502 | #: yes. On macOS, titlebar-only can be used to only hide the titlebar. 503 | #: Whether this works and exactly what effect it has depends on the 504 | #: window manager/operating system. 505 | 506 | # resize_debounce_time 0.1 507 | 508 | #: The time (in seconds) to wait before redrawing the screen when a 509 | #: resize event is received. On platforms such as macOS, where the 510 | #: operating system sends events corresponding to the start and end of 511 | #: a resize, this number is ignored. 512 | 513 | # resize_draw_strategy static 514 | 515 | #: Choose how kitty draws a window while a resize is in progress. A 516 | #: value of static means draw the current window contents, mostly 517 | #: unchanged. A value of scale means draw the current window contents 518 | #: scaled. A value of blank means draw a blank window. A value of size 519 | #: means show the window size in cells. 520 | 521 | # resize_in_steps no 522 | 523 | #: Resize the OS window in steps as large as the cells, instead of 524 | #: with the usual pixel accuracy. Combined with an 525 | #: initial_window_width and initial_window_height in number of cells, 526 | #: this option can be used to keep the margins as small as possible 527 | #: when resizing the OS window. Note that this does not currently work 528 | #: on Wayland. 529 | 530 | # confirm_os_window_close 0 531 | 532 | #: Ask for confirmation when closing an OS window or a tab that has at 533 | #: least this number of kitty windows in it. A value of zero disables 534 | #: confirmation. This confirmation also applies to requests to quit 535 | #: the entire application (all OS windows, via the quit action). 536 | 537 | #: }}} 538 | 539 | #: Tab bar {{{ 540 | 541 | # tab_bar_edge bottom 542 | 543 | #: Which edge to show the tab bar on, top or bottom 544 | 545 | # tab_bar_margin_width 0.0 546 | 547 | #: The margin to the left and right of the tab bar (in pts) 548 | 549 | # tab_bar_style fade 550 | 551 | #: The tab bar style, can be one of: fade, separator, powerline, or 552 | #: hidden. In the fade style, each tab's edges fade into the 553 | #: background color, in the separator style, tabs are separated by a 554 | #: configurable separator, and the powerline shows the tabs as a 555 | #: continuous line. If you use the hidden style, you might want to 556 | #: create a mapping for the select_tab action which presents you with 557 | #: a list of tabs and allows for easy switching to a tab. 558 | 559 | # tab_bar_min_tabs 2 560 | 561 | #: The minimum number of tabs that must exist before the tab bar is 562 | #: shown 563 | 564 | # tab_switch_strategy previous 565 | 566 | #: The algorithm to use when switching to a tab when the current tab 567 | #: is closed. The default of previous will switch to the last used 568 | #: tab. A value of left will switch to the tab to the left of the 569 | #: closed tab. A value of right will switch to the tab to the right of 570 | #: the closed tab. A value of last will switch to the right-most tab. 571 | 572 | # tab_fade 0.25 0.5 0.75 1 573 | 574 | #: Control how each tab fades into the background when using fade for 575 | #: the tab_bar_style. Each number is an alpha (between zero and one) 576 | #: that controls how much the corresponding cell fades into the 577 | #: background, with zero being no fade and one being full fade. You 578 | #: can change the number of cells used by adding/removing entries to 579 | #: this list. 580 | 581 | # tab_separator " ┇" 582 | 583 | #: The separator between tabs in the tab bar when using separator as 584 | #: the tab_bar_style. 585 | 586 | # tab_activity_symbol none 587 | 588 | #: Some text or a unicode symbol to show on the tab if a window in the 589 | #: tab that does not have focus has some activity. 590 | 591 | # tab_title_template "{title}" 592 | 593 | #: A template to render the tab title. The default just renders the 594 | #: title. If you wish to include the tab-index as well, use something 595 | #: like: {index}: {title}. Useful if you have shortcuts mapped for 596 | #: goto_tab N. In addition you can use {layout_name} for the current 597 | #: layout name and {num_windows} for the number of windows in the tab. 598 | #: Note that formatting is done by Python's string formatting 599 | #: machinery, so you can use, for instance, {layout_name[:2].upper()} 600 | #: to show only the first two letters of the layout name, upper-cased. 601 | #: If you want to style the text, you can use styling directives, for 602 | #: example: {fmt.fg.red}red{fmt.fg.default}normal{fmt.bg._00FF00}green 603 | #: bg{fmt.bg.normal}. Similarly, for bold and italic: 604 | #: {fmt.bold}bold{fmt.nobold}normal{fmt.italic}italic{fmt.noitalic}. 605 | 606 | # active_tab_title_template none 607 | 608 | #: Template to use for active tabs, if not specified falls back to 609 | #: tab_title_template. 610 | 611 | # active_tab_foreground #000 612 | # active_tab_background #eee 613 | # active_tab_font_style bold-italic 614 | # inactive_tab_foreground #444 615 | # inactive_tab_background #999 616 | # inactive_tab_font_style normal 617 | 618 | #: Tab bar colors and styles 619 | 620 | # tab_bar_background none 621 | 622 | #: Background color for the tab bar. Defaults to using the terminal 623 | #: background color. 624 | 625 | #: }}} 626 | 627 | #: Color scheme {{{ 628 | 629 | # foreground #dddddd 630 | # background #000000 631 | 632 | #: The foreground and background colors 633 | 634 | # background_opacity 1.0 635 | 636 | #: The opacity of the background. A number between 0 and 1, where 1 is 637 | #: opaque and 0 is fully transparent. This will only work if 638 | #: supported by the OS (for instance, when using a compositor under 639 | #: X11). Note that it only sets the background color's opacity in 640 | #: cells that have the same background color as the default terminal 641 | #: background. This is so that things like the status bar in vim, 642 | #: powerline prompts, etc. still look good. But it means that if you 643 | #: use a color theme with a background color in your editor, it will 644 | #: not be rendered as transparent. Instead you should change the 645 | #: default background color in your kitty config and not use a 646 | #: background color in the editor color scheme. Or use the escape 647 | #: codes to set the terminals default colors in a shell script to 648 | #: launch your editor. Be aware that using a value less than 1.0 is a 649 | #: (possibly significant) performance hit. If you want to dynamically 650 | #: change transparency of windows set dynamic_background_opacity to 651 | #: yes (this is off by default as it has a performance cost) 652 | 653 | # background_image none 654 | 655 | #: Path to a background image. Must be in PNG format. 656 | 657 | # background_image_layout tiled 658 | 659 | #: Whether to tile or scale the background image. 660 | 661 | # background_image_linear no 662 | 663 | #: When background image is scaled, whether linear interpolation 664 | #: should be used. 665 | 666 | # dynamic_background_opacity no 667 | 668 | #: Allow changing of the background_opacity dynamically, using either 669 | #: keyboard shortcuts (increase_background_opacity and 670 | #: decrease_background_opacity) or the remote control facility. 671 | 672 | # background_tint 0.0 673 | 674 | #: How much to tint the background image by the background color. The 675 | #: tint is applied only under the text area, not margin/borders. Makes 676 | #: it easier to read the text. Tinting is done using the current 677 | #: background color for each window. This setting applies only if 678 | #: background_opacity is set and transparent windows are supported or 679 | #: background_image is set. 680 | 681 | # dim_opacity 0.75 682 | 683 | #: How much to dim text that has the DIM/FAINT attribute set. One 684 | #: means no dimming and zero means fully dimmed (i.e. invisible). 685 | 686 | # selection_foreground #000000 687 | 688 | #: The foreground for text selected with the mouse. A value of none 689 | #: means to leave the color unchanged. 690 | 691 | # selection_background #fffacd 692 | 693 | #: The background for text selected with the mouse. 694 | 695 | 696 | #: The 16 terminal colors. There are 8 basic colors, each color has a 697 | #: dull and bright version. You can also set the remaining colors from 698 | #: the 256 color table as color16 to color255. 699 | 700 | # color0 #000000 701 | # color8 #767676 702 | 703 | #: black 704 | 705 | # color1 #cc0403 706 | # color9 #f2201f 707 | 708 | #: red 709 | 710 | # color2 #19cb00 711 | # color10 #23fd00 712 | 713 | #: green 714 | 715 | # color3 #cecb00 716 | # color11 #fffd00 717 | 718 | #: yellow 719 | 720 | # color4 #0d73cc 721 | # color12 #1a8fff 722 | 723 | #: blue 724 | 725 | # color5 #cb1ed1 726 | # color13 #fd28ff 727 | 728 | #: magenta 729 | 730 | # color6 #0dcdcd 731 | # color14 #14ffff 732 | 733 | #: cyan 734 | 735 | # color7 #dddddd 736 | # color15 #ffffff 737 | 738 | #: white 739 | 740 | # mark1_foreground black 741 | 742 | #: Color for marks of type 1 743 | 744 | # mark1_background #98d3cb 745 | 746 | #: Color for marks of type 1 (light steel blue) 747 | 748 | # mark2_foreground black 749 | 750 | #: Color for marks of type 2 751 | 752 | # mark2_background #f2dcd3 753 | 754 | #: Color for marks of type 1 (beige) 755 | 756 | # mark3_foreground black 757 | 758 | #: Color for marks of type 3 759 | 760 | # mark3_background #f274bc 761 | 762 | #: Color for marks of type 1 (violet) 763 | 764 | #: }}} 765 | 766 | #: Advanced {{{ 767 | 768 | # shell . 769 | 770 | #: The shell program to execute. The default value of . means to use 771 | #: whatever shell is set as the default shell for the current user. 772 | #: Note that on macOS if you change this, you might need to add 773 | #: --login to ensure that the shell starts in interactive mode and 774 | #: reads its startup rc files. 775 | 776 | # editor . 777 | 778 | #: The console editor to use when editing the kitty config file or 779 | #: similar tasks. A value of . means to use the environment variables 780 | #: VISUAL and EDITOR in that order. Note that this environment 781 | #: variable has to be set not just in your shell startup scripts but 782 | #: system-wide, otherwise kitty will not see it. 783 | 784 | # close_on_child_death no 785 | 786 | #: Close the window when the child process (shell) exits. If no (the 787 | #: default), the terminal will remain open when the child exits as 788 | #: long as there are still processes outputting to the terminal (for 789 | #: example disowned or backgrounded processes). If yes, the window 790 | #: will close as soon as the child process exits. Note that setting it 791 | #: to yes means that any background processes still using the terminal 792 | #: can fail silently because their stdout/stderr/stdin no longer work. 793 | 794 | # allow_remote_control no 795 | 796 | #: Allow other programs to control kitty. If you turn this on other 797 | #: programs can control all aspects of kitty, including sending text 798 | #: to kitty windows, opening new windows, closing windows, reading the 799 | #: content of windows, etc. Note that this even works over ssh 800 | #: connections. You can chose to either allow any program running 801 | #: within kitty to control it, with yes or only programs that connect 802 | #: to the socket specified with the kitty --listen-on command line 803 | #: option, if you use the value socket-only. The latter is useful if 804 | #: you want to prevent programs running on a remote computer over ssh 805 | #: from controlling kitty. 806 | 807 | # listen_on none 808 | 809 | #: Tell kitty to listen to the specified unix/tcp socket for remote 810 | #: control connections. Note that this will apply to all kitty 811 | #: instances. It can be overridden by the kitty --listen-on command 812 | #: line flag. This option accepts only UNIX sockets, such as 813 | #: unix:${TEMP}/mykitty or (on Linux) unix:@mykitty. Environment 814 | #: variables are expanded. If {kitty_pid} is present then it is 815 | #: replaced by the PID of the kitty process, otherwise the PID of the 816 | #: kitty process is appended to the value, with a hyphen. This option 817 | #: is ignored unless you also set allow_remote_control to enable 818 | #: remote control. See the help for kitty --listen-on for more 819 | #: details. 820 | 821 | # env 822 | 823 | #: Specify environment variables to set in all child processes. Note 824 | #: that environment variables are expanded recursively, so if you 825 | #: use:: 826 | 827 | #: env MYVAR1=a 828 | #: env MYVAR2=${MYVAR1}/${HOME}/b 829 | 830 | #: The value of MYVAR2 will be a//b. 831 | 832 | # update_check_interval 24 833 | 834 | #: Periodically check if an update to kitty is available. If an update 835 | #: is found a system notification is displayed informing you of the 836 | #: available update. The default is to check every 24 hrs, set to zero 837 | #: to disable. 838 | 839 | # startup_session none 840 | 841 | #: Path to a session file to use for all kitty instances. Can be 842 | #: overridden by using the kitty --session command line option for 843 | #: individual instances. See 844 | #: https://sw.kovidgoyal.net/kitty/index.html#sessions in the kitty 845 | #: documentation for details. Note that relative paths are interpreted 846 | #: with respect to the kitty config directory. Environment variables 847 | #: in the path are expanded. 848 | 849 | clipboard_control read-clipboard write-clipboard write-primary 850 | 851 | #: Allow programs running in kitty to read and write from the 852 | #: clipboard. You can control exactly which actions are allowed. The 853 | #: set of possible actions is: write-clipboard read-clipboard write- 854 | #: primary read-primary. You can additionally specify no-append to 855 | #: disable kitty's protocol extension for clipboard concatenation. The 856 | #: default is to allow writing to the clipboard and primary selection 857 | #: with concatenation enabled. Note that enabling the read 858 | #: functionality is a security risk as it means that any program, even 859 | #: one running on a remote server via SSH can read your clipboard. 860 | 861 | allow_hyperlinks yes 862 | 863 | #: Process hyperlink (OSC 8) escape sequences. If disabled OSC 8 864 | #: escape sequences are ignored. Otherwise they become clickable 865 | #: links, that you can click by holding down ctrl+shift and clicking 866 | #: with the mouse. The special value of ``ask`` means that kitty will 867 | #: ask before opening the link. 868 | 869 | # term xterm-kitty 870 | 871 | #: The value of the TERM environment variable to set. Changing this 872 | #: can break many terminal programs, only change it if you know what 873 | #: you are doing, not because you read some advice on Stack Overflow 874 | #: to change it. The TERM variable is used by various programs to get 875 | #: information about the capabilities and behavior of the terminal. If 876 | #: you change it, depending on what programs you run, and how 877 | #: different the terminal you are changing it to is, various things 878 | #: from key-presses, to colors, to various advanced features may not 879 | #: work. 880 | 881 | #: }}} 882 | 883 | #: OS specific tweaks {{{ 884 | 885 | # macos_titlebar_color system 886 | 887 | #: Change the color of the kitty window's titlebar on macOS. A value 888 | #: of system means to use the default system color, a value of 889 | #: background means to use the background color of the currently 890 | #: active window and finally you can use an arbitrary color, such as 891 | #: #12af59 or red. WARNING: This option works by using a hack, as 892 | #: there is no proper Cocoa API for it. It sets the background color 893 | #: of the entire window and makes the titlebar transparent. As such it 894 | #: is incompatible with background_opacity. If you want to use both, 895 | #: you are probably better off just hiding the titlebar with 896 | #: hide_window_decorations. 897 | 898 | # macos_option_as_alt no 899 | 900 | #: Use the option key as an alt key. With this set to no, kitty will 901 | #: use the macOS native Option+Key = unicode character behavior. This 902 | #: will break any Alt+key keyboard shortcuts in your terminal 903 | #: programs, but you can use the macOS unicode input technique. You 904 | #: can use the values: left, right, or both to use only the left, 905 | #: right or both Option keys as Alt, instead. 906 | 907 | # macos_hide_from_tasks no 908 | 909 | #: Hide the kitty window from running tasks (Option+Tab) on macOS. 910 | 911 | # macos_quit_when_last_window_closed no 912 | 913 | #: Have kitty quit when all the top-level windows are closed. By 914 | #: default, kitty will stay running, even with no open windows, as is 915 | #: the expected behavior on macOS. 916 | 917 | # macos_window_resizable yes 918 | 919 | #: Disable this if you want kitty top-level (OS) windows to not be 920 | #: resizable on macOS. 921 | 922 | # macos_thicken_font 0 923 | 924 | #: Draw an extra border around the font with the given width, to 925 | #: increase legibility at small font sizes. For example, a value of 926 | #: 0.75 will result in rendering that looks similar to sub-pixel 927 | #: antialiasing at common font sizes. 928 | 929 | # macos_traditional_fullscreen no 930 | 931 | #: Use the traditional full-screen transition, that is faster, but 932 | #: less pretty. 933 | 934 | # macos_show_window_title_in all 935 | 936 | #: Show or hide the window title in the macOS window or menu-bar. A 937 | #: value of window will show the title of the currently active window 938 | #: at the top of the macOS window. A value of menubar will show the 939 | #: title of the currently active window in the macOS menu-bar, making 940 | #: use of otherwise wasted space. all will show the title everywhere 941 | #: and none hides the title in the window and the menu-bar. 942 | 943 | # macos_custom_beam_cursor no 944 | 945 | #: Enable/disable custom mouse cursor for macOS that is easier to see 946 | #: on both light and dark backgrounds. WARNING: this might make your 947 | #: mouse cursor invisible on dual GPU machines. 948 | 949 | # linux_display_server auto 950 | 951 | #: Choose between Wayland and X11 backends. By default, an appropriate 952 | #: backend based on the system state is chosen automatically. Set it 953 | #: to x11 or wayland to force the choice. 954 | 955 | #: }}} 956 | 957 | #: Keyboard shortcuts {{{ 958 | 959 | #: For a list of key names, see: the GLFW key macros 960 | #: . 961 | #: The name to use is the part after the GLFW_KEY_ prefix. For a list 962 | #: of modifier names, see: GLFW mods 963 | #: 964 | 965 | #: On Linux you can also use XKB key names to bind keys that are not 966 | #: supported by GLFW. See XKB keys 967 | #: for a list of key names. The name to use is the part 969 | #: after the XKB_KEY_ prefix. Note that you can only use an XKB key 970 | #: name for keys that are not known as GLFW keys. 971 | 972 | #: Finally, you can use raw system key codes to map keys, again only 973 | #: for keys that are not known as GLFW keys. To see the system key 974 | #: code for a key, start kitty with the kitty --debug-keyboard option. 975 | #: Then kitty will output some debug text for every key event. In that 976 | #: text look for ``native_code`` the value of that becomes the key 977 | #: name in the shortcut. For example: 978 | 979 | #: .. code-block:: none 980 | 981 | #: on_key_input: glfw key: 65 native_code: 0x61 action: PRESS mods: 0x0 text: 'a' 982 | 983 | #: Here, the key name for the A key is 0x61 and you can use it with:: 984 | 985 | #: map ctrl+0x61 something 986 | 987 | #: to map ctrl+a to something. 988 | 989 | #: You can use the special action no_op to unmap a keyboard shortcut 990 | #: that is assigned in the default configuration:: 991 | 992 | #: map kitty_mod+space no_op 993 | 994 | #: You can combine multiple actions to be triggered by a single 995 | #: shortcut, using the syntax below:: 996 | 997 | #: map key combine action1 action2 action3 ... 998 | 999 | #: For example:: 1000 | 1001 | #: map kitty_mod+e combine : new_window : next_layout 1002 | 1003 | #: this will create a new window and switch to the next available 1004 | #: layout 1005 | 1006 | #: You can use multi-key shortcuts using the syntax shown below:: 1007 | 1008 | #: map key1>key2>key3 action 1009 | 1010 | #: For example:: 1011 | 1012 | #: map ctrl+f>2 set_font_size 20 1013 | 1014 | kitty_mod ctrl+shift 1015 | 1016 | #: The value of kitty_mod is used as the modifier for all default 1017 | #: shortcuts, you can change it in your kitty.conf to change the 1018 | #: modifiers for all the default shortcuts. 1019 | 1020 | clear_all_shortcuts yes 1021 | 1022 | #: You can have kitty remove all shortcut definition seen up to this 1023 | #: point. Useful, for instance, to remove the default shortcuts. 1024 | 1025 | # kitten_alias hints hints --hints-offset=0 1026 | 1027 | #: You can create aliases for kitten names, this allows overriding the 1028 | #: defaults for kitten options and can also be used to shorten 1029 | #: repeated mappings of the same kitten with a specific group of 1030 | #: options. For example, the above alias changes the default value of 1031 | #: kitty +kitten hints --hints-offset to zero for all mappings, 1032 | #: including the builtin ones. 1033 | 1034 | #: Clipboard {{{ 1035 | 1036 | map kitty_mod+c copy_to_clipboard 1037 | 1038 | #: There is also a copy_or_interrupt action that can be optionally 1039 | #: mapped to Ctrl+c. It will copy only if there is a selection and 1040 | #: send an interrupt otherwise. Similarly, copy_and_clear_or_interrupt 1041 | #: will copy and clear the selection or send an interrupt if there is 1042 | #: no selection. 1043 | 1044 | map kitty_mod+v paste_from_clipboard 1045 | # map kitty_mod+s paste_from_selection 1046 | # map shift+insert paste_from_selection 1047 | # map kitty_mod+o pass_selection_to_program 1048 | 1049 | #: You can also pass the contents of the current selection to any 1050 | #: program using pass_selection_to_program. By default, the system's 1051 | #: open program is used, but you can specify your own, the selection 1052 | #: will be passed as a command line argument to the program, for 1053 | #: example:: 1054 | 1055 | #: map kitty_mod+o pass_selection_to_program firefox 1056 | 1057 | #: You can pass the current selection to a terminal program running in 1058 | #: a new kitty window, by using the @selection placeholder:: 1059 | 1060 | #: map kitty_mod+y new_window less @selection 1061 | 1062 | #: }}} 1063 | 1064 | #: Scrolling {{{ 1065 | 1066 | # map kitty_mod+up scroll_line_up 1067 | # map kitty_mod+k scroll_line_up 1068 | # map kitty_mod+down scroll_line_down 1069 | # map kitty_mod+j scroll_line_down 1070 | # map kitty_mod+page_up scroll_page_up 1071 | # map kitty_mod+page_down scroll_page_down 1072 | # map kitty_mod+home scroll_home 1073 | # map kitty_mod+end scroll_end 1074 | # map kitty_mod+h show_scrollback 1075 | 1076 | #: You can pipe the contents of the current screen + history buffer as 1077 | #: STDIN to an arbitrary program using the ``launch`` function. For 1078 | #: example, the following opens the scrollback buffer in less in an 1079 | #: overlay window:: 1080 | 1081 | #: map f1 launch --stdin-source=@screen_scrollback --stdin-add-formatting --type=overlay less +G -R 1082 | 1083 | #: For more details on piping screen and buffer contents to external 1084 | #: programs, see launch. 1085 | 1086 | #: }}} 1087 | 1088 | #: Window management {{{ 1089 | 1090 | # map kitty_mod+enter new_window 1091 | map kitty_mod+enter new_os_window 1092 | 1093 | #: You can open a new window running an arbitrary program, for 1094 | #: example:: 1095 | 1096 | #: map kitty_mod+y launch mutt 1097 | 1098 | #: You can open a new window with the current working directory set to 1099 | #: the working directory of the current window using:: 1100 | 1101 | #: map ctrl+alt+enter launch --cwd=current 1102 | 1103 | #: You can open a new window that is allowed to control kitty via the 1104 | #: kitty remote control facility by prefixing the command line with @. 1105 | #: Any programs running in that window will be allowed to control 1106 | #: kitty. For example:: 1107 | 1108 | #: map ctrl+enter launch --allow-remote-control some_program 1109 | 1110 | #: You can open a new window next to the currently active window or as 1111 | #: the first window, with:: 1112 | 1113 | #: map ctrl+n launch --location=neighbor some_program 1114 | #: map ctrl+f launch --location=first some_program 1115 | 1116 | #: For more details, see launch. 1117 | 1118 | # map kitty_mod+n new_os_window 1119 | 1120 | #: Works like new_window above, except that it opens a top level OS 1121 | #: kitty window. In particular you can use new_os_window_with_cwd to 1122 | #: open a window with the current working directory. 1123 | 1124 | # map kitty_mod+w close_window 1125 | # map kitty_mod+] next_window 1126 | # map kitty_mod+[ previous_window 1127 | # map kitty_mod+f move_window_forward 1128 | # map kitty_mod+b move_window_backward 1129 | # map kitty_mod+` move_window_to_top 1130 | # map kitty_mod+r start_resizing_window 1131 | # map kitty_mod+1 first_window 1132 | # map kitty_mod+2 second_window 1133 | # map kitty_mod+3 third_window 1134 | # map kitty_mod+4 fourth_window 1135 | # map kitty_mod+5 fifth_window 1136 | # map kitty_mod+6 sixth_window 1137 | # map kitty_mod+7 seventh_window 1138 | # map kitty_mod+8 eighth_window 1139 | # map kitty_mod+9 ninth_window 1140 | # map kitty_mod+0 tenth_window 1141 | #: }}} 1142 | 1143 | #: Tab management {{{ 1144 | 1145 | # map kitty_mod+right next_tab 1146 | # map kitty_mod+left previous_tab 1147 | # map kitty_mod+t new_tab 1148 | # map kitty_mod+q close_tab 1149 | # map kitty_mod+. move_tab_forward 1150 | # map kitty_mod+, move_tab_backward 1151 | # map kitty_mod+alt+t set_tab_title 1152 | 1153 | #: You can also create shortcuts to go to specific tabs, with 1 being 1154 | #: the first tab, 2 the second tab and -1 being the previously active 1155 | #: tab, and any number larger than the last tab being the last tab:: 1156 | 1157 | #: map ctrl+alt+1 goto_tab 1 1158 | #: map ctrl+alt+2 goto_tab 2 1159 | 1160 | #: Just as with new_window above, you can also pass the name of 1161 | #: arbitrary commands to run when using new_tab and use 1162 | #: new_tab_with_cwd. Finally, if you want the new tab to open next to 1163 | #: the current tab rather than at the end of the tabs list, use:: 1164 | 1165 | #: map ctrl+t new_tab !neighbor [optional cmd to run] 1166 | #: }}} 1167 | 1168 | #: Layout management {{{ 1169 | 1170 | # map kitty_mod+l next_layout 1171 | 1172 | #: You can also create shortcuts to switch to specific layouts:: 1173 | 1174 | #: map ctrl+alt+t goto_layout tall 1175 | #: map ctrl+alt+s goto_layout stack 1176 | 1177 | #: Similarly, to switch back to the previous layout:: 1178 | 1179 | #: map ctrl+alt+p last_used_layout 1180 | #: }}} 1181 | 1182 | #: Font sizes {{{ 1183 | 1184 | #: You can change the font size for all top-level kitty OS windows at 1185 | #: a time or only the current one. 1186 | 1187 | map kitty_mod+equal change_font_size all +2.0 1188 | map kitty_mod+minus change_font_size all -2.0 1189 | map kitty_mod+backspace change_font_size all 0 1190 | 1191 | #: To setup shortcuts for specific font sizes:: 1192 | 1193 | #: map kitty_mod+f6 change_font_size all 10.0 1194 | 1195 | #: To setup shortcuts to change only the current OS window's font 1196 | #: size:: 1197 | 1198 | #: map kitty_mod+f6 change_font_size current 10.0 1199 | #: }}} 1200 | 1201 | #: Select and act on visible text {{{ 1202 | 1203 | #: Use the hints kitten to select text and either pass it to an 1204 | #: external program or insert it into the terminal or copy it to the 1205 | #: clipboard. 1206 | 1207 | # map kitty_mod+e kitten hints 1208 | 1209 | #: Open a currently visible URL using the keyboard. The program used 1210 | #: to open the URL is specified in open_url_with. 1211 | 1212 | # map kitty_mod+p>f kitten hints --type path --program - 1213 | 1214 | #: Select a path/filename and insert it into the terminal. Useful, for 1215 | #: instance to run git commands on a filename output from a previous 1216 | #: git command. 1217 | 1218 | # map kitty_mod+p>shift+f kitten hints --type path 1219 | 1220 | #: Select a path/filename and open it with the default open program. 1221 | 1222 | # map kitty_mod+p>l kitten hints --type line --program - 1223 | 1224 | #: Select a line of text and insert it into the terminal. Use for the 1225 | #: output of things like: ls -1 1226 | 1227 | # map kitty_mod+p>w kitten hints --type word --program - 1228 | 1229 | #: Select words and insert into terminal. 1230 | 1231 | # map kitty_mod+p>h kitten hints --type hash --program - 1232 | 1233 | #: Select something that looks like a hash and insert it into the 1234 | #: terminal. Useful with git, which uses sha1 hashes to identify 1235 | #: commits 1236 | 1237 | # map kitty_mod+p>n kitten hints --type linenum 1238 | 1239 | #: Select something that looks like filename:linenum and open it in 1240 | #: vim at the specified line number. 1241 | 1242 | # map kitty_mod+p>y kitten hints --type hyperlink 1243 | 1244 | #: Select a hyperlink (i.e. a URL that has been marked as such by the 1245 | #: terminal program, for example, by ls --hyperlink=auto). 1246 | 1247 | 1248 | #: The hints kitten has many more modes of operation that you can map 1249 | #: to different shortcuts. For a full description see kittens/hints. 1250 | #: }}} 1251 | 1252 | #: Miscellaneous {{{ 1253 | 1254 | # map kitty_mod+f11 toggle_fullscreen 1255 | # map kitty_mod+f10 toggle_maximized 1256 | # map kitty_mod+u kitten unicode_input 1257 | # map kitty_mod+f2 edit_config_file 1258 | # map kitty_mod+escape kitty_shell window 1259 | 1260 | #: Open the kitty shell in a new window/tab/overlay/os_window to 1261 | #: control kitty using commands. 1262 | 1263 | # map kitty_mod+a>m set_background_opacity +0.1 1264 | # map kitty_mod+a>l set_background_opacity -0.1 1265 | # map kitty_mod+a>1 set_background_opacity 1 1266 | # map kitty_mod+a>d set_background_opacity default 1267 | # map kitty_mod+delete clear_terminal reset active 1268 | 1269 | #: You can create shortcuts to clear/reset the terminal. For example:: 1270 | 1271 | #: # Reset the terminal 1272 | #: map kitty_mod+f9 clear_terminal reset active 1273 | #: # Clear the terminal screen by erasing all contents 1274 | #: map kitty_mod+f10 clear_terminal clear active 1275 | #: # Clear the terminal scrollback by erasing it 1276 | #: map kitty_mod+f11 clear_terminal scrollback active 1277 | #: # Scroll the contents of the screen into the scrollback 1278 | #: map kitty_mod+f12 clear_terminal scroll active 1279 | 1280 | #: If you want to operate on all windows instead of just the current 1281 | #: one, use all instead of active. 1282 | 1283 | #: It is also possible to remap Ctrl+L to both scroll the current 1284 | #: screen contents into the scrollback buffer and clear the screen, 1285 | #: instead of just clearing the screen:: 1286 | 1287 | #: map ctrl+l combine : clear_terminal scroll active : send_text normal,application \x0c 1288 | 1289 | 1290 | #: You can tell kitty to send arbitrary (UTF-8) encoded text to the 1291 | #: client program when pressing specified shortcut keys. For example:: 1292 | 1293 | #: map ctrl+alt+a send_text all Special text 1294 | 1295 | #: This will send "Special text" when you press the ctrl+alt+a key 1296 | #: combination. The text to be sent is a python string literal so you 1297 | #: can use escapes like \x1b to send control codes or \u21fb to send 1298 | #: unicode characters (or you can just input the unicode characters 1299 | #: directly as UTF-8 text). The first argument to send_text is the 1300 | #: keyboard modes in which to activate the shortcut. The possible 1301 | #: values are normal or application or kitty or a comma separated 1302 | #: combination of them. The special keyword all means all modes. The 1303 | #: modes normal and application refer to the DECCKM cursor key mode 1304 | #: for terminals, and kitty refers to the special kitty extended 1305 | #: keyboard protocol. 1306 | 1307 | #: Another example, that outputs a word and then moves the cursor to 1308 | #: the start of the line (same as pressing the Home key):: 1309 | 1310 | #: map ctrl+alt+a send_text normal Word\x1b[H 1311 | #: map ctrl+alt+a send_text application Word\x1bOH 1312 | 1313 | #: }}} 1314 | 1315 | # }}} 1316 | -------------------------------------------------------------------------------- /.config/pipewire/pipewire.conf: -------------------------------------------------------------------------------- 1 | # Daemon config file for PipeWire version "0.3.82" # 2 | # 3 | # Copy and edit this file in /etc/pipewire for system-wide changes 4 | # or in ~/.config/pipewire for local changes. 5 | # 6 | # It is also possible to place a file with an updated section in 7 | # /etc/pipewire/pipewire.conf.d/ for system-wide changes or in 8 | # ~/.config/pipewire/pipewire.conf.d/ for local changes. 9 | # 10 | 11 | context.properties = { 12 | ## Configure properties in the system. 13 | #library.name.system = support/libspa-support 14 | #context.data-loop.library.name.system = support/libspa-support 15 | #support.dbus = true 16 | #link.max-buffers = 64 17 | link.max-buffers = 16 # version < 3 clients can't handle more 18 | #mem.warn-mlock = false 19 | #mem.allow-mlock = true 20 | #mem.mlock-all = false 21 | #clock.power-of-two-quantum = true 22 | #log.level = 2 23 | #cpu.zero.denormals = false 24 | 25 | core.daemon = true # listening for socket connections 26 | core.name = pipewire-0 # core name and socket name 27 | 28 | ## Properties for the DSP configuration. 29 | default.clock.rate = 44100 30 | default.clock.allowed-rates = [ 44100 ] 31 | #default.clock.quantum = 1024 32 | default.clock.min-quantum = 256 33 | #default.clock.max-quantum = 2048 34 | #default.clock.quantum-limit = 8192 35 | #default.video.width = 640 36 | #default.video.height = 480 37 | #default.video.rate.num = 25 38 | #default.video.rate.denom = 1 39 | # 40 | #settings.check-quantum = false 41 | #settings.check-rate = false 42 | # 43 | # These overrides are only applied when running in a vm. 44 | vm.overrides = { 45 | default.clock.min-quantum = 1024 46 | } 47 | 48 | # keys checked below to disable module loading 49 | module.x11.bell = true 50 | # enables autoloading of access module, when disabled an alternative 51 | # access module needs to be loaded. 52 | module.access = true 53 | # enables autoloading of module-jackdbus-detect 54 | # module.jackdbus-detect = true 55 | } 56 | 57 | context.spa-libs = { 58 | # = 59 | # 60 | # Used to find spa factory names. It maps an spa factory name 61 | # regular expression to a library name that should contain 62 | # that factory. 63 | # 64 | audio.convert.* = audioconvert/libspa-audioconvert 65 | avb.* = avb/libspa-avb 66 | api.alsa.* = alsa/libspa-alsa 67 | api.v4l2.* = v4l2/libspa-v4l2 68 | api.libcamera.* = libcamera/libspa-libcamera 69 | api.bluez5.* = bluez5/libspa-bluez5 70 | api.vulkan.* = vulkan/libspa-vulkan 71 | api.jack.* = jack/libspa-jack 72 | support.* = support/libspa-support 73 | #videotestsrc = videotestsrc/libspa-videotestsrc 74 | #audiotestsrc = audiotestsrc/libspa-audiotestsrc 75 | } 76 | 77 | context.modules = [ 78 | #{ name = 79 | # ( args = { = ... } ) 80 | # ( flags = [ ( ifexists ) ( nofail ) ] ) 81 | # ( condition = [ { = ... } ... ] ) 82 | #} 83 | # 84 | # Loads a module with the given parameters. 85 | # If ifexists is given, the module is ignored when it is not found. 86 | # If nofail is given, module initialization failures are ignored. 87 | # If condition is given, the module is loaded only when the context 88 | # properties all match the match rules. 89 | # 90 | 91 | # Uses realtime scheduling to boost the audio thread priorities. This uses 92 | # RTKit if the user doesn't have permission to use regular realtime 93 | # scheduling. 94 | { name = libpipewire-module-rt 95 | args = { 96 | nice.level = -11 97 | #rt.prio = 88 98 | #rt.time.soft = -1 99 | #rt.time.hard = -1 100 | } 101 | flags = [ ifexists nofail ] 102 | } 103 | 104 | # The native communication protocol. 105 | { name = libpipewire-module-protocol-native 106 | args = { 107 | # List of server Unix sockets, and optionally permissions 108 | #sockets = [ { name = "pipewire-0" }, { name = "pipewire-manager-0" } ] 109 | } 110 | } 111 | 112 | # The profile module. Allows application to access profiler 113 | # and performance data. It provides an interface that is used 114 | # by pw-top and pw-profiler. 115 | { name = libpipewire-module-profiler } 116 | 117 | # Allows applications to create metadata objects. It creates 118 | # a factory for Metadata objects. 119 | { name = libpipewire-module-metadata } 120 | 121 | # Creates a factory for making devices that run in the 122 | # context of the PipeWire server. 123 | { name = libpipewire-module-spa-device-factory } 124 | 125 | # Creates a factory for making nodes that run in the 126 | # context of the PipeWire server. 127 | { name = libpipewire-module-spa-node-factory } 128 | 129 | # Allows creating nodes that run in the context of the 130 | # client. Is used by all clients that want to provide 131 | # data to PipeWire. 132 | { name = libpipewire-module-client-node } 133 | 134 | # Allows creating devices that run in the context of the 135 | # client. Is used by the session manager. 136 | { name = libpipewire-module-client-device } 137 | 138 | # The portal module monitors the PID of the portal process 139 | # and tags connections with the same PID as portal 140 | # connections. 141 | { name = libpipewire-module-portal 142 | flags = [ ifexists nofail ] 143 | } 144 | 145 | # The access module can perform access checks and block 146 | # new clients. 147 | { name = libpipewire-module-access 148 | args = { 149 | # access.allowed to list an array of paths of allowed 150 | # apps. 151 | #access.allowed = [ 152 | # /usr/bin/pipewire-media-session 153 | #] 154 | 155 | # An array of rejected paths. 156 | #access.rejected = [ ] 157 | 158 | # An array of paths with restricted access. 159 | #access.restricted = [ ] 160 | 161 | # Anything not in the above lists gets assigned the 162 | # access.force permission. 163 | #access.force = flatpak 164 | } 165 | condition = [ { module.access = true } ] 166 | } 167 | 168 | # Makes a factory for wrapping nodes in an adapter with a 169 | # converter and resampler. 170 | { name = libpipewire-module-adapter } 171 | 172 | # Makes a factory for creating links between ports. 173 | { name = libpipewire-module-link-factory } 174 | 175 | # Provides factories to make session manager objects. 176 | { name = libpipewire-module-session-manager } 177 | 178 | # Use libcanberra to play X11 Bell 179 | { name = libpipewire-module-x11-bell 180 | args = { 181 | #sink.name = "" 182 | #sample.name = "bell-window-system" 183 | #x11.display = null 184 | #x11.xauthority = null 185 | } 186 | flags = [ ifexists nofail ] 187 | condition = [ { module.x11.bell = true } ] 188 | } 189 | # { name = libpipewire-module-jackdbus-detect 190 | # args { 191 | # #jack.library = libjack.so.0 192 | # #jack.server = null 193 | # #jack.client-name = PipeWire 194 | # #jack.connect = true 195 | # #tunnel.mode = duplex # source|sink|duplex 196 | # source.props = { 197 | # #audio.channels = 2 198 | # #midi.ports = 1 199 | # #audio.position = [ FL FR ] 200 | # # extra sink properties 201 | # } 202 | # sink.props = { 203 | # #audio.channels = 2 204 | # #midi.ports = 1 205 | # #audio.position = [ FL FR ] 206 | # # extra sink properties 207 | # } 208 | # } 209 | # flags = [ ifexists nofail ] 210 | # condition = [ { module.jackdbus-detect = true } ] 211 | # } 212 | ] 213 | 214 | context.objects = [ 215 | #{ factory = 216 | # ( args = { = ... } ) 217 | # ( flags = [ ( nofail ) ] ) 218 | # ( condition = [ { = ... } ... ] ) 219 | #} 220 | # 221 | # Creates an object from a PipeWire factory with the given parameters. 222 | # If nofail is given, errors are ignored (and no object is created). 223 | # If condition is given, the object is created only when the context properties 224 | # all match the match rules. 225 | # 226 | #{ factory = spa-node-factory args = { factory.name = videotestsrc node.name = videotestsrc node.description = videotestsrc Spa:Pod:Object:Param:Props:patternType = 1 } } 227 | #{ factory = spa-device-factory args = { factory.name = api.jack.device foo=bar } flags = [ nofail ] } 228 | #{ factory = spa-device-factory args = { factory.name = api.alsa.enum.udev } } 229 | #{ factory = spa-node-factory args = { factory.name = api.alsa.seq.bridge node.name = Internal-MIDI-Bridge } } 230 | #{ factory = adapter args = { factory.name = audiotestsrc node.name = my-test node.description = audiotestsrc } } 231 | #{ factory = spa-node-factory args = { factory.name = api.vulkan.compute.source node.name = my-compute-source } } 232 | 233 | # A default dummy driver. This handles nodes marked with the "node.always-driver" 234 | # property when no other driver is currently active. JACK clients need this. 235 | { factory = spa-node-factory 236 | args = { 237 | factory.name = support.node.driver 238 | node.name = Dummy-Driver 239 | node.group = pipewire.dummy 240 | priority.driver = 20000 241 | #clock.id = monotonic # realtime | tai | monotonic-raw | boottime 242 | #clock.name = "clock.system.monotonic" 243 | } 244 | } 245 | { factory = spa-node-factory 246 | args = { 247 | factory.name = support.node.driver 248 | node.name = Freewheel-Driver 249 | priority.driver = 19000 250 | node.group = pipewire.freewheel 251 | node.freewheel = true 252 | } 253 | } 254 | 255 | # This creates a new Source node. It will have input ports 256 | # that you can link, to provide audio for this source. 257 | #{ factory = adapter 258 | # args = { 259 | # factory.name = support.null-audio-sink 260 | # node.name = "my-mic" 261 | # node.description = "Microphone" 262 | # media.class = "Audio/Source/Virtual" 263 | # audio.position = "FL,FR" 264 | # } 265 | #} 266 | 267 | # This creates a single PCM source device for the given 268 | # alsa device path hw:0. You can change source to sink 269 | # to make a sink in the same way. 270 | #{ factory = adapter 271 | # args = { 272 | # factory.name = api.alsa.pcm.source 273 | # node.name = "alsa-source" 274 | # node.description = "PCM Source" 275 | # media.class = "Audio/Source" 276 | # api.alsa.path = "hw:0" 277 | # api.alsa.period-size = 1024 278 | # api.alsa.headroom = 0 279 | # api.alsa.disable-mmap = false 280 | # api.alsa.disable-batch = false 281 | # audio.format = "S16LE" 282 | # audio.rate = 48000 283 | # audio.channels = 2 284 | # audio.position = "FL,FR" 285 | # } 286 | #} 287 | 288 | # Use the metadata factory to create metadata and some default values. 289 | #{ factory = metadata 290 | # args = { 291 | # metadata.name = my-metadata 292 | # metadata.values = [ 293 | # { key = default.audio.sink value = { name = somesink } } 294 | # { key = default.audio.source value = { name = somesource } } 295 | # ] 296 | # } 297 | #} 298 | ] 299 | 300 | context.exec = [ 301 | #{ path = 302 | # ( args = "" ) 303 | # ( condition = [ { = ... } ... ] ) 304 | #} 305 | # 306 | # Execute the given program with arguments. 307 | # If condition is given, the program is executed only when the context 308 | # properties all match the match rules. 309 | # 310 | # You can optionally start the session manager here, 311 | # but it is better to start it as a systemd service. 312 | # Run the session manager with -h for options. 313 | # 314 | #{ path = "/usr/bin/pipewire-media-session" args = "" 315 | # condition = [ { exec.session-manager = null } { exec.session-manager = true } ] } 316 | # 317 | # You can optionally start the pulseaudio-server here as well 318 | # but it is better to start it as a systemd service. 319 | # It can be interesting to start another daemon here that listens 320 | # on another address with the -a option (eg. -a tcp:4713). 321 | # 322 | #{ path = "/usr/bin/pipewire" args = "-c pipewire-pulse.conf" 323 | # condition = [ { exec.pipewire-pulse = null } { exec.pipewire-pulse = true } ] } 324 | ] 325 | -------------------------------------------------------------------------------- /.config/sway/config: -------------------------------------------------------------------------------- 1 | include "/etc/sway/config.d/*" 2 | include "config.$(cat /etc/hostname)" 3 | include "config.d/setup_path.conf" 4 | include "config.d/xdg_desktop_portal.conf" 5 | -------------------------------------------------------------------------------- /.config/sway/config.bmo: -------------------------------------------------------------------------------- 1 | # bmo - laptop 2 | 3 | # You can get the names of your outputs by running: swaymsg -t get_outputs 4 | 5 | # output DP-1 mode --custom 1920x1080 6 | # output HDMI-A-1 mode --custom 1920x1080 7 | # output eDP-1 pos 0 0 8 | # output HDMI-A-1 pos 1920 0 9 | # 10 | 11 | output HDMI-A-1 pos 0 0 12 | #output eDP-1 pos 1920 0 13 | -------------------------------------------------------------------------------- /.config/sway/config.bubblegum: -------------------------------------------------------------------------------- 1 | # bubblegum Thinkpad T14 Gen 5 2 | 3 | set $mod Mod4 4 | set $term kitty 5 | set $menu $HOME/bin/bemenu-run 6 | set $lock_cmd swaylock 7 | set $suspend_cmd 'systemctl suspend' 8 | set $brightness_up 'brightnessctl s 1%+' 9 | set $brightness_down 'brightnessctl s 1%-' 10 | set $volume_up 'pactl set-sink-volume @DEFAULT_SINK@ +5%' 11 | set $volume_down 'pactl set-sink-volume @DEFAULT_SINK@ -5%' 12 | set $toggle_mute 'pactl set-sink-mute @DEFAULT_SINK@ toggle' 13 | set $toggle_mic_mute 'pactl set-source-mute @DEFAULT_SOURCE@ toggle' 14 | set $display_config wdisplays 15 | set $screenshot '$HOME/bin/ss' 16 | 17 | default_border none 18 | 19 | include "config.d/input_devices.conf" 20 | include "config.d/office_monitors.conf" 21 | include "config.d/bindings.conf" 22 | 23 | exec swayidle -w before-sleep 'swaylock -f -c 000000' 24 | 25 | exec_always nwg-panel 26 | exec_always /usr/bin/nm-applet --indicator 27 | exec lxpolkit 28 | exec kdeconnectd -------------------------------------------------------------------------------- /.config/sway/config.d/bindings.conf: -------------------------------------------------------------------------------- 1 | # -*- mode: conf-space -*- 2 | 3 | # Reload the configuration file 4 | bindsym $mod+q reload 5 | 6 | # Exit sway (logs you out of your Wayland session) 7 | bindsym $mod+Shift+q exec swaymsg exit 8 | 9 | # Launch and kill 10 | bindsym $mod+Shift+Return exec $term 11 | bindsym $mod+p exec $menu 12 | bindsym $mod+Shift+c kill 13 | 14 | # Moving around: 15 | # 16 | # Move your focus around 17 | bindsym $mod+Left focus left 18 | bindsym $mod+Down focus down 19 | bindsym $mod+Up focus up 20 | bindsym $mod+Right focus right 21 | 22 | # Move the focused window with the same, but add Shift 23 | bindsym $mod+Shift+Left move left 24 | bindsym $mod+Shift+Down move down 25 | bindsym $mod+Shift+Up move up 26 | bindsym $mod+Shift+Right move right 27 | 28 | # Add control to move the workspace itself 29 | bindsym $mod+Shift+Control+Left move workspace to output left 30 | bindsym $mod+Shift+Control+Right move workspace to output right 31 | # 32 | # Workspaces: 33 | # 34 | # Switch to workspace 35 | bindsym $mod+1 workspace 1 36 | bindsym $mod+2 workspace 2 37 | bindsym $mod+3 workspace 3 38 | bindsym $mod+4 workspace 4 39 | bindsym $mod+5 workspace 5 40 | bindsym $mod+6 workspace 6 41 | bindsym $mod+7 workspace 7 42 | bindsym $mod+8 workspace 8 43 | bindsym $mod+9 workspace 9 44 | bindsym $mod+0 workspace 10 45 | # Move focused container to workspace 46 | bindsym $mod+Shift+1 move container to workspace 1 47 | bindsym $mod+Shift+2 move container to workspace 2 48 | bindsym $mod+Shift+3 move container to workspace 3 49 | bindsym $mod+Shift+4 move container to workspace 4 50 | bindsym $mod+Shift+5 move container to workspace 5 51 | bindsym $mod+Shift+6 move container to workspace 6 52 | bindsym $mod+Shift+7 move container to workspace 7 53 | bindsym $mod+Shift+8 move container to workspace 8 54 | bindsym $mod+Shift+9 move container to workspace 9 55 | bindsym $mod+Shift+0 move container to workspace 10 56 | 57 | bindsym --locked $mod+l exec $lock_cmd 58 | bindsym --locked $mod+shift+l exec $suspend_cmd 59 | 60 | bindsym --locked XF86MonBrightnessUp exec $brightness_up 61 | bindsym --locked XF86MonBrightnessDown exec $brightness_down 62 | bindsym --locked XF86AudioRaiseVolume exec $volume_up 63 | bindsym --locked XF86AudioLowerVolume exec $volume_down 64 | bindsym --locked XF86AudioMute exec $toggle_mute 65 | bindsym --locked XF86AudioMicMute exec $toggle_mic_mute 66 | bindsym --locked XF86Display exec $display_config 67 | bindsym --locked Print exec $screenshot 68 | 69 | # XF86Launch2 70 | # XF86Favorites -------------------------------------------------------------------------------- /.config/sway/config.d/input_devices.conf: -------------------------------------------------------------------------------- 1 | # -*- mode: conf-space -*- 2 | 3 | input type:keyboard { 4 | xkb_options ctrl:nocaps,compose:ralt 5 | } 6 | 7 | input type:touchpad { 8 | dwt enabled 9 | tap enabled 10 | middle_emulation enabled 11 | } 12 | 13 | # Drag floating windows by holding down $mod and left mouse button. 14 | # Resize them with right mouse button + $mod. 15 | # Despite the name, also works for non-floating windows. 16 | # Change normal to inverse to use left mouse button for resizing and right 17 | # mouse button for dragging. 18 | floating_modifier $mod normal 19 | -------------------------------------------------------------------------------- /.config/sway/config.d/office_monitors.conf: -------------------------------------------------------------------------------- 1 | # You can get the names of your outputs by running: swaymsg -t get_outputs 2 | 3 | output DP-1 scale 1.75 4 | output DP-2 scale 1.75 5 | output HDMI-A-1 scale 1.75 6 | output eDP-1 scale 1 7 | 8 | output DP-1 pos 0 0 9 | output DP-2 pos 0 0 10 | output HDMI-A-1 pos 2194 0 11 | output eDP-1 pos 4388 0 12 | -------------------------------------------------------------------------------- /.config/sway/config.d/setup_path.conf: -------------------------------------------------------------------------------- 1 | exec /home/arne/bin/setup_path -------------------------------------------------------------------------------- /.config/sway/config.d/xdg_desktop_portal.conf: -------------------------------------------------------------------------------- 1 | # Make sure xdg-desktop-portal-wlr is installed, or it will try to default to -gtk and fail 2 | # These are needed to tell xdg-desktop-portal to use the wlroots portal 3 | 4 | exec systemctl --user set-environment XDG_CURRENT_DESKTOP=sway 5 | exec systemctl --user set-environment XDG_SESSION_TYPE=wayland 6 | 7 | exec dbus-update-activation-environment --systemd XDG_CURRENT_DESKTOP=sway 8 | exec dbus-update-activation-environment --systemd XDG_SESSION_TYPE=wayland 9 | 10 | exec --no-startup-id /usr/lib/xdg-desktop-portal -r -------------------------------------------------------------------------------- /.config/sway/config.marceline: -------------------------------------------------------------------------------- 1 | # marceline - desktop 2 | 3 | set $mod Mod4 4 | set $term kitty 5 | set $menu $HOME/bin/bemenu-run 6 | set $lock_cmd swaylock 7 | set $suspend_cmd 'systemctl suspend' 8 | 9 | default_border none 10 | 11 | include "config.d/input_devices.conf" 12 | include "config.d/office_monitors.conf" 13 | include "config.d/bindings.conf" 14 | 15 | exec swayidle -w before-sleep 'swaylock -f -c 000000' 16 | 17 | exec_always nwg-panel 18 | exec_always /usr/bin/nm-applet --indicator -------------------------------------------------------------------------------- /.config/sway/config.old: -------------------------------------------------------------------------------- 1 | # Default config for sway 2 | # 3 | # Copy this to ~/.config/sway/config and edit it to your liking. 4 | # 5 | # Read `man 5 sway` for a complete reference. 6 | 7 | exec systemctl --user set-environment XDG_CURRENT_DESKTOP=sway 8 | 9 | exec systemctl --user set-environment GTK_IM_MODULE=fcitx 10 | exec systemctl --user set-environment QT_IM_MODULE=fcitx 11 | exec systemctl --user set-environment XMODIFIERS=@im=fcitx 12 | 13 | exec --no-startup-id /usr/lib/pam_kwallet_init 14 | 15 | exec dbus-update-activation-environment --systemd XDG_CURRENT_DESKTOP=sway 16 | exec /home/arne/bin/setup_path 17 | 18 | ### Variables 19 | 20 | # Logo key. Use Mod1 for Alt. 21 | set $mod Mod4 22 | set $term kitty 23 | 24 | # Your preferred application launcher 25 | set $menu /home/arne/bin/bemenu-run 26 | 27 | ### Output configuration 28 | # Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/) 29 | output * bg /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png fill 30 | 31 | # You can get the names of your outputs by running: swaymsg -t get_outputs 32 | include "$HOME/.config/sway/config.$(cat /etc/hostname)" 33 | 34 | ### Idle configuration 35 | # 36 | # Example configuration: 37 | # 38 | # exec swayidle -w \ 39 | # timeout 300 'swaylock -f -c 000000' \ 40 | # timeout 600 'swaymsg "output * dpms off"' \ 41 | # resume 'swaymsg "output * dpms on"' \ 42 | # before-sleep 'swaylock -f -c 000000' 43 | # 44 | # This will lock your screen after 300 seconds of inactivity, then turn off 45 | # your displays after another 300 seconds, and turn your screens back on when 46 | # resumed. It will also lock your screen before your computer goes to sleep. 47 | 48 | 49 | ### Input configuration 50 | # 51 | # Example configuration: 52 | # 53 | input type:touchpad { 54 | dwt enabled 55 | tap enabled 56 | # natural_scroll enabled 57 | middle_emulation enabled 58 | } 59 | # 60 | # You can get the names of your inputs by running: swaymsg -t get_inputs 61 | # Read `man 5 sway-input` for more information about this section. 62 | 63 | ### Key bindings 64 | # 65 | # Basics: 66 | # 67 | # Start a terminal 68 | bindsym $mod+Shift+Return exec $term 69 | 70 | # Kill focused window 71 | bindsym $mod+Shift+c kill 72 | 73 | # Start your launcher 74 | bindsym $mod+p exec $menu 75 | 76 | # Drag floating windows by holding down $mod and left mouse button. 77 | # Resize them with right mouse button + $mod. 78 | # Despite the name, also works for non-floating windows. 79 | # Change normal to inverse to use left mouse button for resizing and right 80 | # mouse button for dragging. 81 | floating_modifier $mod normal 82 | 83 | # Reload the configuration file 84 | bindsym $mod+q reload 85 | 86 | # Exit sway (logs you out of your Wayland session) 87 | # bindsym $mod+Shift+q exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit' 88 | bindsym $mod+Shift+q exec swaymsg exit 89 | bindsym Print exec /home/arne/bin/ss 90 | 91 | # 92 | # Moving around: 93 | # 94 | # Move your focus around 95 | bindsym $mod+Left focus left 96 | bindsym $mod+Down focus down 97 | bindsym $mod+Up focus up 98 | bindsym $mod+Right focus right 99 | 100 | # Move the focused window with the same, but add Shift 101 | bindsym $mod+Shift+Left move left 102 | bindsym $mod+Shift+Down move down 103 | bindsym $mod+Shift+Up move up 104 | bindsym $mod+Shift+Right move right 105 | 106 | # Add control to move the workspace itself 107 | bindsym $mod+Shift+Control+Left move workspace to output left 108 | bindsym $mod+Shift+Control+Right move workspace to output right 109 | # 110 | # Workspaces: 111 | # 112 | # Switch to workspace 113 | bindsym $mod+1 workspace 1 114 | bindsym $mod+2 workspace 2 115 | bindsym $mod+3 workspace 3 116 | bindsym $mod+4 workspace 4 117 | bindsym $mod+5 workspace 5 118 | bindsym $mod+6 workspace 6 119 | bindsym $mod+7 workspace 7 120 | bindsym $mod+8 workspace 8 121 | bindsym $mod+9 workspace 9 122 | bindsym $mod+0 workspace 10 123 | # Move focused container to workspace 124 | bindsym $mod+Shift+1 move container to workspace 1 125 | bindsym $mod+Shift+2 move container to workspace 2 126 | bindsym $mod+Shift+3 move container to workspace 3 127 | bindsym $mod+Shift+4 move container to workspace 4 128 | bindsym $mod+Shift+5 move container to workspace 5 129 | bindsym $mod+Shift+6 move container to workspace 6 130 | bindsym $mod+Shift+7 move container to workspace 7 131 | bindsym $mod+Shift+8 move container to workspace 8 132 | bindsym $mod+Shift+9 move container to workspace 9 133 | bindsym $mod+Shift+0 move container to workspace 10 134 | # Note: workspaces can have any name you want, not just numbers. 135 | # We just use 1-10 as the default. 136 | # 137 | # Layout stuff: 138 | # 139 | # You can "split" the current object of your focus with 140 | # $mod+b or $mod+v, for horizontal and vertical splits 141 | # respectively. 142 | bindsym $mod+b splith 143 | bindsym $mod+v splitv 144 | 145 | # Switch the current container between different layout styles 146 | bindsym $mod+s layout stacking 147 | bindsym $mod+w layout tabbed 148 | bindsym $mod+e layout toggle split 149 | 150 | # Make the current focus fullscreen 151 | bindsym $mod+f fullscreen 152 | 153 | # Toggle the current focus between tiling and floating mode 154 | bindsym $mod+Shift+space floating toggle 155 | 156 | # Swap focus between the tiling area and the floating area 157 | bindsym $mod+space focus mode_toggle 158 | 159 | # Move focus to the parent container 160 | bindsym $mod+a focus parent 161 | # 162 | # Scratchpad: 163 | # 164 | # Sway has a "scratchpad", which is a bag of holding for windows. 165 | # You can send windows there and get them back later. 166 | 167 | # Move the currently focused window to the scratchpad 168 | bindsym $mod+Shift+minus move scratchpad 169 | 170 | # Show the next scratchpad window or hide the focused scratchpad window. 171 | # If there are multiple scratchpad windows, this command cycles through them. 172 | bindsym $mod+minus scratchpad show 173 | 174 | bindsym $mod+grave exec /home/arne/bin/sway_workspace_to_other_output 175 | 176 | # 177 | # Resizing containers: 178 | # 179 | mode "resize" { 180 | # left will shrink the containers width 181 | # right will grow the containers width 182 | # up will shrink the containers height 183 | # down will grow the containers height 184 | bindsym Left resize shrink width 10px 185 | bindsym Down resize grow height 10px 186 | bindsym Up resize shrink height 10px 187 | bindsym Right resize grow width 10px 188 | 189 | # Return to default mode 190 | bindsym Return mode "default" 191 | bindsym Escape mode "default" 192 | } 193 | bindsym $mod+r mode "resize" 194 | 195 | input type:keyboard { 196 | # xkb_layout us 197 | xkb_options ctrl:nocaps,compose:ralt 198 | } 199 | 200 | #input * xkb_options ctrl:nocaps 201 | #input * xkb_options compose:rwin 202 | 203 | # 204 | # Status Bar: 205 | # 206 | # Read `man 5 sway-bar` for more information about this section. 207 | # bar { 208 | # swaybar_command /home/arne/bin/waybar 209 | # # position bottom 210 | 211 | # # # When the status_command prints a new line to stdout, swaybar updates. 212 | # # # The default just shows the current date and time. 213 | # # # status_command /home/arne/bin/sway_status_bar_command 214 | # # colors { 215 | # # statusline #ffffff 216 | # # background #323232 217 | # # inactive_workspace #32323200 #32323200 #5c5c5c 218 | # # } 219 | # } 220 | 221 | exec_always nwg-panel 222 | exec swaync 223 | 224 | default_border none 225 | 226 | include /etc/sway/config.d/* 227 | 228 | exec /usr/lib/x86_64-linux-gnu/libexec/org_kde_powerdevil 229 | exec /usr/bin/kdeconnectd 230 | exec_always /usr/bin/nm-applet --indicator 231 | # exec_always sh -c 'sleep 5; /usr/bin/nextcloud --background' # wait for the tray 232 | 233 | bindsym --locked XF86MonBrightnessUp exec /home/arne/bin/brightness up 234 | bindsym --locked XF86MonBrightnessDown exec /home/arne/bin/brightness down 235 | bindsym --locked XF86AudioRaiseVolume exec /home/arne/bin/volume up 236 | bindsym --locked XF86AudioLowerVolume exec /home/arne/bin/volume down 237 | 238 | bindsym --locked XF86Explorer exec sh -c 'echo toggle | jack_transport' 239 | 240 | bindsym --locked $mod+l exec swaylock 241 | 242 | exec --no-startup-id /usr/lib/xdg-desktop-portal -r -------------------------------------------------------------------------------- /.config/sway/config.prismo: -------------------------------------------------------------------------------- 1 | # prismo - Thinkpad T14 Gen 3 2 | 3 | set $mod Mod4 4 | set $term kitty 5 | set $menu $HOME/bin/bemenu-run 6 | set $lock_cmd swaylock 7 | set $suspend_cmd 'systemctl suspend' 8 | set $brightness_up 'brightnessctl s 5%+' 9 | set $brightness_down 'brightnessctl s 5%-' 10 | set $volume_up '' 11 | set $volume_down '' 12 | 13 | default_border none 14 | 15 | include "config.d/input_devices.conf" 16 | include "config.d/office_monitors.conf" 17 | include "config.d/bindings.conf" 18 | 19 | exec swayidle -w before-sleep 'swaylock -f -c 000000' 20 | 21 | exec_always nwg-panel 22 | exec_always /usr/bin/nm-applet --indicator 23 | -------------------------------------------------------------------------------- /.config/tmux/tmux.conf: -------------------------------------------------------------------------------- 1 | # Use the xterm-256color terminal 2 | set -g default-terminal "xterm-256color" 3 | 4 | # Apply Tc 5 | set-option -ga terminal-overrides ",xterm*:Tc" 6 | 7 | set -g escape-time 0 8 | 9 | setw -g history-limit 100000 10 | 11 | set -g status-right "#(/home/arne/bin/battery) \"#{=22:pane_title}\" %H:%M %d-%b-%y" 12 | set-option -g default-shell /bin/zsh 13 | 14 | # copy-paste with vim-keys to buffer... breaks regular terminal select and 15 | # paste-with-middle-click 16 | 17 | # set-option -g mouse on 18 | # setw -g mode-keys vi 19 | # set-option -s set-clipboard off 20 | # bind P paste-buffer 21 | # bind-key -T copy-mode-vi v send-keys -X begin-selection 22 | # bind-key -T copy-mode-vi y send-keys -X rectangle-toggle 23 | # unbind -T copy-mode-vi Enter 24 | # bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel 'xclip -se c -i' 25 | # bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel 'xclip -se c -i' -------------------------------------------------------------------------------- /.config/waybar/config: -------------------------------------------------------------------------------- 1 | { 2 | // "layer": "top", // Waybar at top layer 3 | "position": "top", // Waybar position (top|bottom|left|right) 4 | // "height": 50, // Waybar height (to be removed for auto height) 5 | // "width": 30, // Waybar width 6 | "spacing": 4, // Gaps between modules (4px) 7 | // Choose the order of the modules 8 | "modules-left": ["sway/workspaces"], //, "sway/mode", "sway/scratchpad", "custom/media"], 9 | "modules-center": [], // "sway/window" 10 | "modules-right": ["battery", "battery#bat2", "cpu", "memory", "tray", "clock"], //["mpd", "idle_inhibitor", "network", "cpu", "memory", "bluetooth","temperature", "backlight", "keyboard-state", "sway/language"], 11 | // Modules configuration 12 | // "sway/workspaces": { 13 | // "disable-scroll": true, 14 | // "all-outputs": true, 15 | // "warp-on-scroll": false, 16 | // "format": "{name}: {icon}", 17 | // "format-icons": { 18 | // "1": "", 19 | // "2": "", 20 | // "3": "", 21 | // "4": "", 22 | // "5": "", 23 | // "urgent": "", 24 | // "focused": "", 25 | // "default": "" 26 | // } 27 | // }, 28 | "keyboard-state": { 29 | "numlock": true, 30 | "capslock": true, 31 | "format": "{name} {icon}", 32 | "format-icons": { 33 | "locked": "", 34 | "unlocked": "" 35 | } 36 | }, 37 | "sway/mode": { 38 | "format": "{}" 39 | }, 40 | "sway/scratchpad": { 41 | "format": "{icon} {count}", 42 | "show-empty": false, 43 | "format-icons": ["", ""], 44 | "tooltip": true, 45 | "tooltip-format": "{app}: {title}" 46 | }, 47 | "mpd": { 48 | "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ", 49 | "format-disconnected": "Disconnected ", 50 | "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ", 51 | "unknown-tag": "N/A", 52 | "interval": 2, 53 | "consume-icons": { 54 | "on": " " 55 | }, 56 | "random-icons": { 57 | "off": " ", 58 | "on": " " 59 | }, 60 | "repeat-icons": { 61 | "on": " " 62 | }, 63 | "single-icons": { 64 | "on": "1 " 65 | }, 66 | "state-icons": { 67 | "paused": "", 68 | "playing": "" 69 | }, 70 | "tooltip-format": "MPD (connected)", 71 | "tooltip-format-disconnected": "MPD (disconnected)" 72 | }, 73 | "idle_inhibitor": { 74 | "format": "{icon}", 75 | "format-icons": { 76 | "activated": "", 77 | "deactivated": "" 78 | } 79 | }, 80 | "tray": { 81 | // "icon-size": 21, 82 | "spacing": 10 83 | }, 84 | "clock": { 85 | // "timezone": "America/New_York", 86 | "tooltip-format": "{:%Y %B}\n{calendar}", 87 | "format-alt": "{:%Y-%m-%d}" 88 | }, 89 | "cpu": { 90 | "format": "{usage}%CPU", 91 | "tooltip": false 92 | }, 93 | "memory": { 94 | "format": "{}%MEM" 95 | }, 96 | "temperature": { 97 | // "thermal-zone": 2, 98 | // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", 99 | "critical-threshold": 80, 100 | // "format-critical": "{temperatureC}°C {icon}", 101 | "format": "{temperatureC}°C {icon}", 102 | "format-icons": ["", "", ""] 103 | }, 104 | "backlight": { 105 | // "device": "acpi_video1", 106 | "format": "{percent}% {icon}", 107 | "format-icons": ["", "", "", "", "", "", "", "", ""] 108 | }, 109 | "battery": { 110 | "bat": "BAT1", 111 | "on-click": "plasmawindowed org.kde.plasma.battery" 112 | // "states": { 113 | // // "good": 95, 114 | // "warning": 30, 115 | // "critical": 15 116 | // }, 117 | // "format": "{capacity}%", 118 | // "format-charging": "{capacity}% ", 119 | // "format-plugged": "{capacity}% ", 120 | // "format-alt": "{time} {icon}", 121 | // // "format-good": "", // An empty format will hide the module 122 | // // "format-full": "", 123 | // "format-icons": ["", "", "", "", ""] 124 | }, 125 | "battery#bat2": { 126 | "bat": "BAT0", 127 | "on-click": "gnome-power-statistics" 128 | }, 129 | "network": { 130 | // "interface": "wlp2*", // (Optional) To force the use of this interface 131 | "format-wifi": "{essid} ({signalStrength}%) ", 132 | "format-ethernet": "{ipaddr}/{cidr} ", 133 | "tooltip-format": "{ifname} via {gwaddr} ", 134 | "format-linked": "{ifname} (No IP) ", 135 | "format-disconnected": "Disconnected ⚠", 136 | "format-alt": "{ifname}: {ipaddr}/{cidr}" 137 | }, 138 | "pulseaudio": { 139 | // "scroll-step": 1, // %, can be a float 140 | "format": "{volume}% {icon} {format_source}", 141 | "format-bluetooth": "{volume}% {icon} {format_source}", 142 | "format-bluetooth-muted": " {icon} {format_source}", 143 | "format-muted": " {format_source}", 144 | "format-source": "{volume}% ", 145 | "format-source-muted": "", 146 | "format-icons": { 147 | "headphone": "", 148 | "hands-free": "", 149 | "headset": "", 150 | "phone": "", 151 | "portable": "", 152 | "car": "", 153 | "default": ["", "", ""] 154 | }, 155 | "on-click": "pavucontrol" 156 | }, 157 | "custom/media": { 158 | "format": "{icon} {}", 159 | "return-type": "json", 160 | "max-length": 40, 161 | "format-icons": { 162 | "spotify": "", 163 | "default": "🎜" 164 | }, 165 | "escape": true, 166 | "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder 167 | // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name 168 | }, 169 | "bluetooth": { 170 | // "controller": "controller1", // specify the alias of the controller if there are more than 1 on the system 171 | "format": " {status}", 172 | "format-disabled": "", // an empty format will hide the module 173 | "format-connected": " {num_connections} connected", 174 | "tooltip-format": "{controller_alias}\t{controller_address}", 175 | "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}", 176 | "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}", 177 | "on-click": "kcmshell5 kcm_bluetooth" 178 | } 179 | } 180 | -------------------------------------------------------------------------------- /.config/waybar/config.bmo: -------------------------------------------------------------------------------- 1 | { 2 | // "layer": "top", // Waybar at top layer 3 | "position": "top", // Waybar position (top|bottom|left|right) 4 | "height": 30, // Waybar height (to be removed for auto height) 5 | // "width": 30, // Waybar width 6 | "spacing": 4, // Gaps between modules (4px) 7 | // Choose the order of the modules 8 | "modules-left": ["sway/workspaces"], //, "sway/mode", "sway/scratchpad", "custom/media"], 9 | "modules-center": [], // "sway/window" 10 | "modules-right": ["battery", "battery#bat2", "cpu", "memory", "jack", "bluetooth", "tray", "clock"], //["mpd", "idle_inhibitor", "network", "cpu", "memory", "temperature", "backlight", "keyboard-state", "sway/language"], 11 | // Modules configuration 12 | // "sway/workspaces": { 13 | // "disable-scroll": true, 14 | // "all-outputs": true, 15 | // "warp-on-scroll": false, 16 | // "format": "{name}: {icon}", 17 | // "format-icons": { 18 | // "1": "", 19 | // "2": "", 20 | // "3": "", 21 | // "4": "", 22 | // "5": "", 23 | // "urgent": "", 24 | // "focused": "", 25 | // "default": "" 26 | // } 27 | // }, 28 | "keyboard-state": { 29 | "numlock": true, 30 | "capslock": true, 31 | "format": "{name} {icon}", 32 | "format-icons": { 33 | "locked": "", 34 | "unlocked": "" 35 | } 36 | }, 37 | "sway/mode": { 38 | "format": "{}" 39 | }, 40 | "sway/scratchpad": { 41 | "format": "{icon} {count}", 42 | "show-empty": false, 43 | "format-icons": ["", ""], 44 | "tooltip": true, 45 | "tooltip-format": "{app}: {title}" 46 | }, 47 | "mpd": { 48 | "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ", 49 | "format-disconnected": "Disconnected ", 50 | "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ", 51 | "unknown-tag": "N/A", 52 | "interval": 2, 53 | "consume-icons": { 54 | "on": " " 55 | }, 56 | "random-icons": { 57 | "off": " ", 58 | "on": " " 59 | }, 60 | "repeat-icons": { 61 | "on": " " 62 | }, 63 | "single-icons": { 64 | "on": "1 " 65 | }, 66 | "state-icons": { 67 | "paused": "", 68 | "playing": "" 69 | }, 70 | "tooltip-format": "MPD (connected)", 71 | "tooltip-format-disconnected": "MPD (disconnected)" 72 | }, 73 | "idle_inhibitor": { 74 | "format": "{icon}", 75 | "format-icons": { 76 | "activated": "", 77 | "deactivated": "" 78 | } 79 | }, 80 | "tray": { 81 | // "icon-size": 21, 82 | "spacing": 10 83 | }, 84 | "clock": { 85 | // "timezone": "America/New_York", 86 | "tooltip-format": "{:%Y %B}\n{calendar}", 87 | "format-alt": "{:%Y-%m-%d}" 88 | }, 89 | "cpu": { 90 | "format": "{usage}%CPU", 91 | "tooltip": false 92 | }, 93 | "memory": { 94 | "format": "{}%MEM" 95 | }, 96 | "temperature": { 97 | // "thermal-zone": 2, 98 | // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", 99 | "critical-threshold": 80, 100 | // "format-critical": "{temperatureC}°C {icon}", 101 | "format": "{temperatureC}°C {icon}", 102 | "format-icons": ["", "", ""] 103 | }, 104 | "backlight": { 105 | // "device": "acpi_video1", 106 | "format": "{percent}% {icon}", 107 | "format-icons": ["", "", "", "", "", "", "", "", ""] 108 | }, 109 | "battery": { 110 | "bat": "BAT1", 111 | "on-click": "plasmawindowed org.kde.plasma.battery" 112 | // "states": { 113 | // // "good": 95, 114 | // "warning": 30, 115 | // "critical": 15 116 | // }, 117 | // "format": "{capacity}% {icon}", 118 | // "format-charging": "{capacity}% ", 119 | // "format-plugged": "{capacity}% ", 120 | // "format-alt": "{time} {icon}", 121 | // // "format-good": "", // An empty format will hide the module 122 | // // "format-full": "", 123 | // "format-icons": ["", "", "", "", ""] 124 | }, 125 | "battery#bat2": { 126 | "bat": "BAT0", 127 | "on-click": "gnome-power-statistics" 128 | }, 129 | "network": { 130 | // "interface": "wlp2*", // (Optional) To force the use of this interface 131 | "format-wifi": "{essid} ({signalStrength}%) ", 132 | "format-ethernet": "{ipaddr}/{cidr} ", 133 | "tooltip-format": "{ifname} via {gwaddr} ", 134 | "format-linked": "{ifname} (No IP) ", 135 | "format-disconnected": "Disconnected ⚠", 136 | "format-alt": "{ifname}: {ipaddr}/{cidr}" 137 | }, 138 | "pulseaudio": { 139 | // "scroll-step": 1, // %, can be a float 140 | "format": "{volume}% {icon} {format_source}", 141 | "format-bluetooth": "{volume}% {icon} {format_source}", 142 | "format-bluetooth-muted": " {icon} {format_source}", 143 | "format-muted": " {format_source}", 144 | "format-source": "{volume}% ", 145 | "format-source-muted": "", 146 | "format-icons": { 147 | "headphone": "", 148 | "hands-free": "", 149 | "headset": "", 150 | "phone": "", 151 | "portable": "", 152 | "car": "", 153 | "default": ["", "", ""] 154 | }, 155 | "on-click": "pavucontrol" 156 | }, 157 | "custom/media": { 158 | "format": "{icon} {}", 159 | "return-type": "json", 160 | "max-length": 40, 161 | "format-icons": { 162 | "spotify": "", 163 | "default": "🎜" 164 | }, 165 | "escape": true, 166 | "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder 167 | // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name 168 | }, 169 | "jack": { 170 | "format": "{bar} | {beat} | {tick} [{xruns}]" 171 | }, 172 | "bluetooth": { 173 | // "controller": "controller1", // specify the alias of the controller if there are more than 1 on the system 174 | "format": " {status}", 175 | "format-disabled": "", // an empty format will hide the module 176 | "format-connected": " {num_connections} connected", 177 | "tooltip-format": "{controller_alias}\t{controller_address}", 178 | "tooltip-format-connected": "{controller_alias}\t{controller_address}\n\n{device_enumerate}", 179 | "tooltip-format-enumerate-connected": "{device_alias}\t{device_address}", 180 | "on-click": "kcmshell5 kcm_bluetooth" 181 | } 182 | } 183 | -------------------------------------------------------------------------------- /.config/xdg-desktop-portal-wlr/config: -------------------------------------------------------------------------------- 1 | [screencast] 2 | # chooser_type=dmenu 3 | # chooser_cmd=bemenu 4 | 5 | chooser_type=simple 6 | chooser_cmd=slurp -f %o -or -------------------------------------------------------------------------------- /.config/xdg-desktop-portal/sway-portal.conf: -------------------------------------------------------------------------------- 1 | [preferred] 2 | default=wlr;gtk 3 | -------------------------------------------------------------------------------- /.emacs-profiles.el: -------------------------------------------------------------------------------- 1 | (("default" . ((user-emacs-directory . "~/Gaiwan/corgi-init") 2 | (custom-file . "~/Gaiwan/corgi-init/custom.el"))) 3 | 4 | ("joanne" . ((user-emacs-directory . "~/emacs-profiles/joanne") 5 | (custom-file . "~/Gaiwan/joanne/custom.el"))) 6 | ("sample" . ((user-emacs-directory . "~/github/lambdaisland/corgi/sample-config") 7 | (custom-file . "~/github/lambdaisland/corgi/sample-config/custom.el"))) 8 | 9 | ("spacemacs" . ((user-emacs-directory . "~/emacs-profiles/spacemacs-master") 10 | (env . (("SPACEMACSDIR" . "~/emacs-profiles/spacemacs-dir"))) 11 | (server-name . "space"))) 12 | 13 | ("lambdaisland" . ((user-emacs-directory . "~/emacs-profiles/spacemacs-master") 14 | (custom-file . "~/emacs-profiles/lambdaisland/custom.el") 15 | (env . (("SPACEMACSDIR" . "~/emacs-profiles/lambdaisland"))) 16 | )) 17 | 18 | ("lambdaisland2" . ((user-emacs-directory . "~/emacs-profiles/spacemacs-master") 19 | (custom-file . "~/emacs-profiles/lambdaisland/custom.el") 20 | (env . (("SPACEMACSDIR" . "~/emacs-profiles/lambdaisland2"))) 21 | )) 22 | 23 | ("lamdev" . ((user-emacs-directory . "~/emacs-profiles/spacemacs-develop") 24 | (custom-file . "~/emacs-profiles/lambdaisland/custom.el") 25 | (env . (("SPACEMACSDIR" . "~/emacs-profiles/lambdaisland"))) 26 | )) 27 | 28 | ("plexmacs" . ((user-emacs-directory . "~/emacs-profiles/spacemacs-plexmacs") 29 | (custom-file . "~/emacs-profiles/lambdaisland/custom.el") 30 | (env . (("SPACEMACSDIR" . "~/emacs-profiles/lambdaisland"))))) 31 | 32 | ("spacemacs-dev-min" . ((user-emacs-directory . "~/emacs-profiles/spacemacs-develop") 33 | (custom-file . "~/emacs-profiles/dotspacemacs-dev-min/custom.el") 34 | (env . (("SPACEMACSDIR" . "~/emacs-profiles/dotspacemacs-dev-min"))) 35 | )) 36 | 37 | ("spacemacs-develop" . ((user-emacs-directory . "~/emacs-profiles/spacemacs-develop") 38 | (env . (("SPACEMACSDIR" . "~/emacs-profiles/spacemacs-dir"))))) 39 | 40 | ("straight" . ((user-emacs-directory . "~/emacs-profiles/straight") 41 | (custom-file . "~/emacs-profiles/straight/custom.el") 42 | (straight-p . t))) 43 | 44 | ("reboot" . ((user-emacs-directory . "~/emacs-profiles/reboot") 45 | (custom-file . "~/emacs-profiles/reboot/custom.el"))) 46 | 47 | ("test" . ((user-emacs-directory . "~/emacs-profiles/test"))) 48 | 49 | ("eleven-hackaton" . ((user-emacs-directory . "~/emacs-profiles/eleven-hackaton"))) 50 | 51 | ("corgi" . ((user-emacs-directory . "~/emacs-profiles/corgi") 52 | (custom-file . "~/emacs-profiles/corgi/custom.el"))) 53 | 54 | ("nextjournal" . ((user-emacs-directory . "~/emacs-profiles/spacemacs-master") 55 | (custom-file . "~/Nextjournal/custom.el") 56 | (env . (("SPACEMACSDIR" . "~/Nextjournal/nextjournal/spacemacs.d")))))) 57 | -------------------------------------------------------------------------------- /.gitconfig: -------------------------------------------------------------------------------- 1 | [user] 2 | name = Arne Brasseur 3 | email = arne@arnebrasseur.net 4 | 5 | [color] 6 | ui = auto 7 | 8 | [alias] 9 | oneline = log --pretty=oneline 10 | stat = log --stat 11 | s = status -s 12 | co = checkout 13 | contributors = shortlog -n -s --no-merges 14 | tree = log --graph --oneline --all 15 | stashbase = !git stash && git rebase $1 && git stash apply 16 | atelog = !git log --pretty=\"format:%at %H\" | sort | sed \"s/.* //\" | git log --stdin 17 | short = log --pretty=format:\"%h %ar [%an] %s\" 18 | branchname = rev-parse --abbrev-ref HEAD 19 | permission-reset = !git diff -p -R | grep -E \"^(diff|(old|new) mode)\" | git apply 20 | 21 | [core] 22 | editor = emacsclient 23 | 24 | [push] 25 | default = simple # Only push the current branch instead of all matching branches when doing a plain "git push" 26 | autoSetupRemote = true 27 | 28 | [include] 29 | path = .gitsecrets 30 | 31 | [diff] 32 | renames = copies 33 | mnemonicprefix = true # Use mnemonic prefixes (index, work tree, commit, object) instead of the standard a and b notation. 34 | 35 | [branch] 36 | autosetupmerge = true # When branching off a remote branch, automatically let the local branch track the remote branch. 37 | 38 | [rerere] 39 | enabled = true 40 | 41 | [merge] 42 | stat = true # Always show a diffstat at the end of a merge 43 | conflictstyle = diff3 44 | defaultToUpstream = true 45 | 46 | #[url "https://"] 47 | #insteadOf = git:// 48 | [credential] 49 | helper = cache 50 | [hub] 51 | protocol = ssh 52 | [init] 53 | templateDir = /home/arne/repos/dotfiles/git/template 54 | defaultBranch = main 55 | [pull] 56 | ff = only 57 | [safe] 58 | directory = /github/workspace 59 | directory = /github/workspace 60 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .xmonad/xmonad.errors 2 | .xmonad/xmonad.hi 3 | .xmonad/xmonad.o 4 | .xmonad/xmonad-i386-linux 5 | .xmonad/xmonad-x86_64-linux 6 | -------------------------------------------------------------------------------- /.irbrc: -------------------------------------------------------------------------------- 1 | require 'irb/completion' 2 | require 'irb/ext/save-history' 3 | #History configuration 4 | IRB.conf[:SAVE_HISTORY] = 10000 5 | IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-history" 6 | -------------------------------------------------------------------------------- /.local/firefox.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=Firefox Nightly (local) 3 | Type=Application 4 | Exec=/home/arne/bin/firefox -------------------------------------------------------------------------------- /.mbsyncrc: -------------------------------------------------------------------------------- 1 | # https://www.seanh.cc/2021/08/22/backup-fastmail-and-gmail-with-isync/ 2 | # 3 | # apt-get install isync pass 4 | 5 | CopyArrivalDate yes # Don't mess up message timestamps when moving them between folders. 6 | Sync Pull # Download changes only, don't sync local changes up to the server. 7 | Create Near # Automatically create new folders in the local copy. 8 | Remove Near # Automatically remove deleted folders from the local copy. 9 | Expunge Near # Expunge deleted messages from the local copy. 10 | 11 | # arne@gaiwan.co 12 | 13 | IMAPAccount fastmail 14 | Host imap.fastmail.com 15 | User arne@gaiwan.co 16 | PassCmd "kwalletcli -f mbsync -e fastmail" 17 | SSLType IMAPS 18 | 19 | IMAPStore fastmail-remote 20 | Account fastmail 21 | 22 | MaildirStore fastmail-local 23 | Path /media/arne/Backup/Mailboxes/arne@gaiwan.co/ 24 | Inbox /media/arne/Backup/Mailboxes/arne@gaiwan.co/Inbox 25 | SubFolders Verbatim 26 | 27 | Channel fastmail 28 | Far :fastmail-remote: 29 | Near :fastmail-local: 30 | Patterns * 31 | SyncState * 32 | 33 | # arne.brasseur@gmail.com 34 | 35 | IMAPAccount gmail 36 | Host imap.gmail.com 37 | User arne.brasseur@gmail.com 38 | PassCmd "kwalletcli -f mbsync -e gmail" 39 | #SSLType IMAPS 40 | Pipelinedepth 1 41 | Timeout 60 42 | 43 | IMAPStore gmail-remote 44 | Account gmail 45 | 46 | MaildirStore gmail-local 47 | Path /media/arne/Backup/Mailboxes/arne.brasseur@gmail.com/ 48 | Inbox /media/arne/Backup/Mailboxes/arne.brasseur@gmail.com/Inbox 49 | SubFolders Verbatim 50 | 51 | Channel gmail 52 | Far :gmail-remote: 53 | Near :gmail-local: 54 | Patterns * 55 | SyncState * 56 | 57 | # billing@gaiwan.co 58 | 59 | 60 | # IMAPAccount fastmail-billing 61 | # Host imap.fastmail.com 62 | # User billing@gaiwan.co 63 | # PassCmd "kwalletcli -f mbsync -e fastmail-billing" 64 | # SSLType IMAPS 65 | 66 | # IMAPStore fastmail-billing-remote 67 | # Account fastmail-billing 68 | 69 | # MaildirStore fastmail-billing-local 70 | # Path /media/arne/Backup/Mailboxes/billing@gaiwan.co/ 71 | # Inbox /media/arne/Backup/Mailboxes/billing@gaiwan.co/Inbox 72 | # SubFolders Verbatim 73 | 74 | # Channel fastmail-billing 75 | # Far :fastmail-billing-remote: 76 | # Near :fastmail-billing-local: 77 | # Patterns * 78 | # SyncState * -------------------------------------------------------------------------------- /.rdebugrc: -------------------------------------------------------------------------------- 1 | set autolist 2 | set autoeval 3 | set autoreload 4 | -------------------------------------------------------------------------------- /.tmate.conf: -------------------------------------------------------------------------------- 1 | source-file ~/.config/tmux/tmux.conf -------------------------------------------------------------------------------- /.zshrc: -------------------------------------------------------------------------------- 1 | . ~/bin/setup_path 2 | 3 | # Tramp - https://blog.karssen.org/2016/03/02/fixing-emacs-tramp-mode-when-using-zsh/ 4 | [[ $TERM == "dumb" ]] && unsetopt zle && PS1='$ ' && return 5 | 6 | # For XMonad + Java apps 7 | export _JAVA_AWT_WM_NONREPARENTING=1 8 | 9 | export EDITOR=emacsclient 10 | export LC_ALL=en_US.UTF-8 11 | export JRUBY_OPTS="-J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-noverify" 12 | 13 | # Allow redirection to overwrite files. 14 | setopt CLOBBER 15 | 16 | # Share recent history between shells 17 | export HISTFILE="$HOME/.zhistory" 18 | setopt SHARE_HISTORY 19 | HISTSIZE=50000 20 | SAVEHIST=50000 21 | export WORDCHARS="*?_-.[]~&;!#$%^(){}<>" 22 | 23 | export ANSIBLE_NOCOWS=1 24 | 25 | alias top=htop 26 | alias l='ls -1 --color' 27 | alias ls='ls --color' 28 | alias acs='apt-cache search' 29 | alias grep='grep --exclude-dir .svn --exclude-dir .git --exclude tags --exclude TAGS --color=auto' 30 | alias ed="rlwrap ed -p'> '" 31 | 32 | alias churby=chruby 33 | alias gerp=grep 34 | alias nnn='ruby -e "puts ARGV.pop.codepoints.inject(:+)%97"' 35 | 36 | alias bx='bundle exec' 37 | 38 | function ai { 39 | echo "$@" >> ~/repos/dotfiles/extra_packages 40 | sudo apt-get install -y --auto-remove "$@" 41 | } 42 | 43 | function en { 44 | EMACSCLIENT=${EMACSCLIENT:-emacsclient} 45 | if [[ "$1" =~ ':' ]]; then 46 | ${=EMACSCLIENT} -n +${1//*:/} ${1//:*/} 47 | else 48 | ${=EMACSCLIENT} -n $1 49 | fi 50 | } 51 | 52 | function termtitle() { 53 | echo -e "\033]0;$1\007" 54 | } 55 | 56 | ### Go to last opened directory when new terminal is opened ### 57 | function store-current-path() { 58 | echo -n `pwd` >! /run/shm/current-path 59 | } 60 | if [[ ! "$precmd_functions" == *store-current-path* ]]; then 61 | precmd_functions+=("store-current-path") 62 | fi 63 | [[ -e /run/shm/current-path ]] && cd "$(cat /run/shm/current-path)" 64 | ### /last opened directory ### 65 | 66 | 67 | ### SSH Keychain ### 68 | # Let re-use ssh-agent and/or gpg-agent between logins 69 | if [ -x '/usr/bin/ksshaskpass' ]; then 70 | export GIT_ASKPASS='/usr/bin/ksshaskpass' 71 | export SSH_ASKPASS='/usr/bin/ksshaskpass' 72 | export SSH_ASKPASS_REQUIRE=prefer 73 | fi 74 | if [ -x "/usr/bin/keychain" ]; then 75 | if [ -f "$HOME/.ssh/id_rsa" ]; then 76 | eval $(/usr/bin/keychain --quiet --quick --eval $HOME/.ssh/id_rsa) 77 | elif [ -f "$HOME/.ssh/id_ed25519" ]; then 78 | eval $(/usr/bin/keychain --quiet --quick --eval $HOME/.ssh/id_ed25519) 79 | fi 80 | fi 81 | ### /SSH Keychain ### 82 | 83 | ### Spaceship ZSH prompt ### 84 | if [ -f "$HOME/repos/spaceship-prompt/spaceship.zsh" ]; then 85 | source "$HOME/repos/spaceship-prompt/spaceship.zsh" 86 | export SPACESHIP_DIR_TRUNC_REPO=false 87 | #SPACESHIP_PROMPT_ORDER=(time user dir host git hg package node ruby docker aws kubecontext terraform exec_time perry line_sep battery jobs exit_code char) 88 | SPACESHIP_PROMPT_ORDER=(time user dir host git hg package node ruby aws terraform exec_time line_sep battery jobs exit_code char) 89 | fi 90 | ### /Spaceship ZSH prompt ### 91 | 92 | ### Chruby ### 93 | if [[ -f /usr/local/share/chruby/chruby.sh ]]; then 94 | source /usr/local/share/chruby/chruby.sh 95 | chruby $(chruby | tail -1 | sed 's/.* //') 96 | fi 97 | ### End Chruby ### 98 | 99 | if [[ -f "$HOME/.asdf/asdf.sh" ]]; then 100 | . "$HOME/.asdf/asdf.sh" 101 | fi 102 | 103 | export RUNELEVEN_DIR=/home/arne/Eleven/runeleven 104 | 105 | # export CLOUDSDK_PYTHON=/usr/bin/python3.8 106 | 107 | if [ -f /usr/share/google-cloud-sdk/completion.zsh.inc ]; then . /usr/share/google-cloud-sdk/completion.zsh.inc ; fi 108 | 109 | if [ -d "$HOME/repos/zsh-completions" ]; then 110 | fpath=("$HOME/repos/zsh-completions/src" $fpath) 111 | fi 112 | 113 | # Make pipewire act as a jack server 114 | export LD_LIBRARY_PATH='/usr/${LIB}/pipewire-0.3/jack'"${LD_LIBRARY_PATH+":$LD_LIBRARY_PATH"}" 115 | 116 | #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! 117 | export SDKMAN_DIR="/home/arne/.sdkman" 118 | [[ -s "/home/arne/.sdkman/bin/sdkman-init.sh" ]] && source "/home/arne/.sdkman/bin/sdkman-init.sh" 119 | 120 | # pnpm 121 | export PNPM_HOME="/home/arne/.local/share/pnpm" 122 | case ":$PATH:" in 123 | *":$PNPM_HOME:"*) ;; 124 | *) export PATH="$PNPM_HOME:$PATH" ;; 125 | esac 126 | # pnpm end 127 | 128 | # bun completions 129 | [ -s "/home/arne/.bun/_bun" ] && source "/home/arne/.bun/_bun" 130 | 131 | # bun 132 | export BUN_INSTALL="$HOME/.bun" 133 | export PATH="$BUN_INSTALL/bin:$PATH" 134 | 135 | # export CLOUDSDK_PYTHON_SITEPACKAGES=1 136 | # export CLOUDSDK_PYTHON=$HOME/opt/gcloud-venv/bin/python 137 | 138 | # fnm 139 | FNM_PATH="/home/arne/.local/share/fnm" 140 | if [ -d "$FNM_PATH" ]; then 141 | export PATH="/home/arne/.local/share/fnm:$PATH" 142 | eval "`fnm env`" 143 | fi 144 | 145 | # The next line updates PATH for the Google Cloud SDK. 146 | if [ -f '/home/arne/opt/google-cloud-sdk/path.zsh.inc' ]; then . '/home/arne/opt/google-cloud-sdk/path.zsh.inc'; fi 147 | 148 | # The next line enables shell command completion for gcloud. 149 | if [ -f '/home/arne/opt/google-cloud-sdk/completion.zsh.inc' ]; then . '/home/arne/opt/google-cloud-sdk/completion.zsh.inc'; fi 150 | -------------------------------------------------------------------------------- /IGNORE: -------------------------------------------------------------------------------- 1 | IGNORE 2 | README.md 3 | connect-the-dots 4 | git 5 | .git 6 | notes.md 7 | extra_packages 8 | sync 9 | minimal.zshrc 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sway setup 2 | 3 | See `.config/sway` 4 | 5 | - nwg-panel (installed from repo) 6 | - requires: libgtk-layer-shell-dev libplayerctl-dev python3-i3ipc brightnessctl python3-dasbus 7 | - bemenu 8 | 9 | Brightness: add to video/input groups for brightness-udev to work. 10 | 11 | ``` 12 | sudo usermod -aG video $USER 13 | sudo usermod -aG input $USER 14 | newgrp video 15 | newgrp input 16 | ``` 17 | 18 | # packages 19 | 20 | Sway setup: 21 | 22 | ``` 23 | sddm 24 | sway 25 | swayidle 26 | swaylock 27 | bemenu 28 | brightness-udev 29 | brightnessctl 30 | grim 31 | slurp 32 | nm-applet (nm-tray?) 33 | xdg-desktop-portal-wlr 34 | pulseaudio-utils (pactl -> control sound volume) 35 | wdisplays 36 | lxpolkit (seems to just be needed for some things like partitionmanager) 37 | ``` 38 | 39 | System/terminal tools: 40 | 41 | ``` 42 | apt-file 43 | btop 44 | git 45 | htop 46 | hub 47 | libnotify-bin #notify-send 48 | locate 49 | tmux 50 | xdg-utils 51 | zip 52 | zsh 53 | rlwrap 54 | netcat-openbsd 55 | powertop 56 | tree 57 | rclone 58 | mplayer 59 | ``` 60 | 61 | GUI/Desktop Applications: 62 | 63 | ``` 64 | thunar 65 | dolphin 66 | pacmanfm-qt 67 | nautilus 68 | kitty 69 | pavucontrol 70 | inkscape 71 | evince 72 | kdeconnect 73 | libreoffice 74 | eog 75 | partitionmanager 76 | print-manager 77 | supercollider 78 | sc3-plugins 79 | ``` 80 | 81 | nwg-panel: 82 | 83 | ``` 84 | libayatana-appindicator3-dev 85 | libdbusmenu-gtk3-dev 86 | libgtk-layer-shell-dev 87 | libplayerctl-dev 88 | python3-dasbus 89 | python3-gi-cairo 90 | python3-i3ipc 91 | python3-psutil 92 | ``` 93 | 94 | Manual - see install scripts 95 | 96 | ``` 97 | sdkman 98 | frp 99 | pnpm 100 | fnm 101 | gcloud 102 | jet 103 | ``` 104 | 105 | JVM tools (via sdkman): 106 | 107 | ``` 108 | java 109 | maven 110 | ``` 111 | 112 | Docker: 113 | 114 | ``` 115 | docker.io 116 | docker-compose-v2 117 | ``` 118 | 119 | Docker additional setup: 120 | 121 | ``` 122 | sudo usermod -aG docker $USER 123 | newgrp docker 124 | ``` 125 | 126 | Ruby: 127 | 128 | - https://github.com/postmodern/chruby 129 | - https://github.com/postmodern/ruby-install 130 | 131 | 132 | additionally need for kde connect: 133 | 134 | ``` 135 | qml6-module-qtcore 136 | qml6-module-qt-labs-folderlistmodel 137 | ``` 138 | 139 | Bun: 140 | 141 | ``` 142 | curl -fsSL https://bun.sh/install | bash 143 | ``` 144 | 145 | Cargo/Rustup (building a rust thing): 146 | 147 | ``` 148 | sudo apt-get install rustup 149 | rustup default stable 150 | cargo build --release 151 | ``` 152 | 153 | ## Belgian eID / itsme 154 | 155 | ``` 156 | bin/install_beid 157 | ``` 158 | 159 | - [Firefox extension](https://addons.mozilla.org/en-US/firefox/addon/belgium-eid/) 160 | - [connective-plugin-linux](https://github.com/roelderickx/connective-plugin-linux) 161 | -------------------------------------------------------------------------------- /bin/,add: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bb 2 | 3 | (require '[babashka.deps :as deps]) 4 | 5 | (alter-var-root #'*print-namespace-maps* (constantly nil)) 6 | 7 | (deps/add-deps 8 | '{:deps 9 | {borkdude/rewrite-edn {:mvn/version "0.4.8"} 10 | com.lambdaisland/cli {:mvn/version "0.22.87"} 11 | com.lambdaisland/xml-select {:mvn/version "0.2.5"} 12 | org.clojure/data.xml {:mvn/version "0.2.0-alpha9"} 13 | org.clojure/tools.gitlibs {:mvn/version "2.6.206"}}}) 14 | 15 | (require 16 | '[borkdude.rewrite-edn :as re] 17 | '[clojure.data.xml :as xml] 18 | '[clojure.edn :as edn] 19 | '[clojure.java.io :as io] 20 | '[clojure.java.shell :as sh] 21 | '[clojure.pprint :as pprint] 22 | '[clojure.tools.gitlibs :as gl] 23 | '[clojure.tools.gitlibs.impl :as gli] 24 | '[lambdaisland.cli :as cli] 25 | '[lambdaisland.xml-select :as xs]) 26 | 27 | (def repos 28 | ["https://repo.clojars.org/" 29 | "https://repo.maven.apache.org/maven2/"]) 30 | 31 | (defn maven-artifact-versions [artifact] 32 | (let [[group artifact-id] (str/split (str artifact) #"/") 33 | doc (some #(try 34 | (slurp (str % (str/replace group #"\." "/") "/" artifact-id "/maven-metadata.xml")) 35 | (catch Exception e)) 36 | repos)] 37 | (when doc 38 | (map (comp first :content) 39 | (xs/select 40 | [:metadata :versions :> :version] 41 | (xml/parse-str doc)))))) 42 | 43 | (defn version-sort-key [version] 44 | ;; not ideal, but vectors have to be of the same length, so ignore anything 45 | ;; beyond major.minor.teeny. Works in 97% of all cases. 46 | (let [[a i t] (map #(try (parse-long %) (catch Exception _ %)) 47 | (str/split version #"[\.\-]"))] 48 | [(or a 0) (or i 0) (or t 0)])) 49 | 50 | (defn maven-latest-version [artifact] 51 | (let [versions (sort-by version-sort-key (maven-artifact-versions artifact))] 52 | (or 53 | (last (remove #(re-find #"-(SNAPSHOT|alpha|beta)" %) versions)) 54 | (last versions)))) 55 | 56 | (defn maven-all-jars [] 57 | (edn/read-string 58 | (str "[" 59 | (-> "https://repo.clojars.org/all-jars.clj" 60 | slurp 61 | ;; there's an artifact in there that's not a valid symbol, boooo 62 | (str/replace #"trident\/1\.1" "trident/v1.1") 63 | (str/replace #"3x-ui-java-wrapper" "x3x-ui-java-wrapper")) 64 | "]"))) 65 | 66 | (defn add-dep [{:keys [artifact]}] 67 | (prn "add-dep" artifact (maven-latest-version artifact)) 68 | (spit "deps.edn" 69 | (re/assoc-in (re/parse-string (try (slurp "deps.edn") (catch Exception _ "{}"))) 70 | [:deps (symbol artifact) :mvn/version] 71 | (maven-latest-version artifact)))) 72 | 73 | (defn add-bb-dep [{:keys [artifact]}] 74 | (spit "bb.edn" 75 | (re/assoc-in (re/parse-string (try (slurp "bb.edn") (catch Exception _ "{}"))) 76 | [:deps (symbol artifact) :mvn/version] 77 | (maven-latest-version artifact)))) 78 | 79 | 80 | (defn search-dep* [{:keys [needle]}] 81 | (for [artifact (distinct (map first (maven-all-jars))) 82 | :let [artifact (if (simple-symbol? artifact) 83 | (symbol (str artifact) (str artifact)) 84 | artifact)] 85 | :when (.contains ^String (str artifact) needle)] 86 | artifact)) 87 | 88 | (defn search-dep [opts] 89 | (run! println (search-dep* opts))) 90 | 91 | (defn lucky-dep [opts] 92 | (doseq [artifact (search-dep* opts)] 93 | (println "Adding" artifact #'add-dep) 94 | (add-dep {:artifact (str artifact)}) 95 | (println "ok"))) 96 | 97 | (defn lucky-bb-dep [opts] 98 | (doseq [artifact (search-dep* opts)] 99 | (println "Adding" artifact) 100 | (add-bb-dep {:artifact (str artifact)}))) 101 | 102 | (defn bin-dev [] 103 | ['(require '[lambdaisland.cli :as cli]) 104 | '(def init {}) 105 | '(defn initialize-local-files 106 | "Create local files which are not checked in" 107 | [_] 108 | (spit "deps.local.edn" "{:launchpad/aliases [:dev]}")) 109 | '(def commands ["init" (var initialize-local-files)]) 110 | '(def flags ["-v, --verbose" "Increase verbosity" 111 | "-h, --help" "Show help text for a (sub-)command"]) 112 | '(cli/dispatch* 113 | {:name "bin/dev" 114 | :init init 115 | :flags flags 116 | :commands commands})]) 117 | 118 | (defn bin-launchpad [] 119 | ['(require '[lambdaisland.launchpad :as launchpad]) 120 | '(launchpad/main {:java-args ["-Dclojure.main.report=stderr"]})]) 121 | 122 | (defn pprint-str [o] 123 | (binding [*print-namespace-maps* false] 124 | (with-out-str (pprint/pprint o)))) 125 | 126 | (defn add-bin-dev [_] 127 | (add-bb-dep {:artifact "com.lambdaisland/cli"}) 128 | (sh/sh "mkdir" "-p" "bin") 129 | (spit "bin/dev" (str "#!/usr/bin/env bb\n\n" 130 | (str/join "\n" (map pprint-str (bin-dev))) 131 | "\n;; Local Variables:\n;; mode:clojure\n;; End:\n")) 132 | (sh/sh "chmod" "+x" "bin/dev")) 133 | 134 | (defn add-bin-launchpad [_] 135 | (add-bb-dep {:artifact "com.lambdaisland/launchpad"}) 136 | (sh/sh "mkdir" "-p" "bin") 137 | (spit "bin/launchpad" (str "#!/usr/bin/env bb\n\n" 138 | (str/join "\n" (map pprint-str (bin-launchpad))) 139 | "\n;; Local Variables:\n;; mode:clojure\n;; End:\n")) 140 | (sh/sh "chmod" "+x" "bin/launchpad")) 141 | 142 | (defn bump-deps [deps re-deps path only] 143 | (reduce (fn [re-deps [artifact version-spec]] 144 | (try 145 | (cond 146 | (and only (not (str/includes? (str artifact) only))) 147 | re-deps 148 | 149 | (:mvn/version version-spec) 150 | (if-let [v (maven-latest-version artifact)] 151 | (do 152 | (when (not= v (:mvn/version version-spec)) 153 | (prn (assoc-in {} path {artifact {:mvn/version [(:mvn/version version-spec) '-> v]}}))) 154 | (re/assoc-in re-deps (into path [artifact :mvn/version]) v)) 155 | (do 156 | (println "Latest version for" artifact "not found") 157 | re-deps)) 158 | 159 | (:git/url version-spec) 160 | (let [git-dir (gli/ensure-git-dir (:git/url version-spec)) 161 | _ (gli/git-fetch (io/file git-dir)) 162 | old-sha (or (:sha version-spec) (:git/sha version-spec)) 163 | sha (gli/git-rev-parse git-dir (:git/ref version-spec "HEAD"))] 164 | (if (= sha old-sha) 165 | re-deps 166 | (do 167 | (prn (assoc-in {} path {artifact {:git/sha [old-sha '-> sha]}})) 168 | (-> re-deps 169 | (re/update-in (conj path artifact) re/dissoc :sha) 170 | (re/assoc-in (into path [artifact :git/sha]) sha))))) 171 | 172 | :else 173 | re-deps) 174 | (catch Exception e 175 | (println "Couldn't bump" artifact) 176 | (println e) 177 | re-deps))) 178 | re-deps 179 | (get-in deps path))) 180 | 181 | (defn bump [{:keys [file only]}] 182 | (let [contents (slurp file) 183 | deps (edn/read-string contents) 184 | re-deps (re/parse-string contents)] 185 | (spit file 186 | (reduce (fn [re-deps alias] 187 | (bump-deps deps re-deps [:aliases alias :extra-deps] only)) 188 | (bump-deps deps re-deps [:deps] only) 189 | (keys (:aliases deps)))) 190 | )) 191 | 192 | (defn add-shadow-cljs [opts] 193 | ) 194 | 195 | (def new-project-files 196 | {"deps.edn" "{}" 197 | "bb.edn" "{}" 198 | "deps.local.edn" "{}" 199 | ".gitignore" ".cpcache 200 | .nrepl-port 201 | .shadow-cljs 202 | target 203 | out 204 | node_modules/ 205 | .DS_Store 206 | .store 207 | .#* 208 | *.lock 209 | *.local 210 | *.local.* 211 | "}) 212 | 213 | (defn init-project 214 | {:flags ["--main-ns " "Main namespace, if not derived from project-name" 215 | "--dir-name " "Directory to create project in, if not derived from project name."]} 216 | [{:keys [artifact-name 217 | dir-name 218 | main-ns]}] 219 | (assert (= 1 (count (filter #{\/} artifact-name))) 220 | "Project name must contain exactly one slash") 221 | (let [[group-id project-name] (str/split artifact-name #"/")] 222 | (assert (some #{\.} group-id) 223 | "Group id must include a period (reverse domain name)") 224 | (let [dir-name (or dir-name project-name) 225 | main-ns (or main-ns (str/replace artifact-name #"/" "."))] 226 | (sh/sh "mkdir" dir-name) 227 | (doseq [[f c] new-project-files] 228 | (spit (io/file dir-name f) c)) 229 | (let [main-file (io/file dir-name "src" (str (str/replace main-ns #"\." "/") ".clj"))] 230 | (sh/sh "mkdir" "-p" (str (.getParent main-file))) 231 | (spit main-file (pr-str (list 'ns (symbol main-ns))))) 232 | (spit (io/file dir-name "LICENSE.txt") (slurp "https://www.mozilla.org/media/MPL/2.0/index.815ca599c9df.txt")) 233 | (sh/sh "mkdir" (str (io/file dir-name ".config"))) 234 | (spit (io/file dir-name ".config/project.edn") 235 | (with-out-str 236 | (clojure.pprint/pprint 237 | {:artifact-id (symbol artifact-name) 238 | :main-ns (symbol main-ns) 239 | :created (java.util.Date.)}))) 240 | (sh/sh "git" "init" dir-name) 241 | )) 242 | ) 243 | 244 | (def commands 245 | ["bin/dev" {:command #'add-bin-dev} 246 | "bin/launchpad" {:command #'add-bin-launchpad} 247 | "dep " {:doc "Add the latest version of the given dependency to deps.edn" 248 | :command #'add-dep} 249 | "bb-dep " {:doc "Add the latest version of the given dependency to bb.edn" 250 | :command #'add-bb-dep} 251 | "lucky " {:doc "Search + add latest artifact" 252 | :command #'lucky-dep} 253 | "bb-lucky " {:doc "Search + add latest artifact" 254 | :command #'lucky-bb-dep} 255 | "search " {:doc "Find artifact names that match" 256 | :command #'search-dep} 257 | "bump " {:doc "Upgrade all artifacts in file (deps.edn, bb.edn, etc)" 258 | :command #'bump} 259 | "init " {:doc "Initialize new project" 260 | :command #'init-project} 261 | "shadow-cljs" {:doc "Set up shadow-cljs" 262 | :command #'add-shadow-cljs}]) 263 | 264 | (cli/dispatch* 265 | {:name ",add" 266 | :commands commands}) 267 | 268 | 269 | ;; Local Variables: 270 | ;; mode:clojure 271 | ;; End: 272 | -------------------------------------------------------------------------------- /bin/bemenu-run: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ~/bin/setup_path 4 | 5 | exec /usr/bin/bemenu-run "$@" 6 | -------------------------------------------------------------------------------- /bin/brightness: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | steps=40 4 | 5 | cd /sys/class/backlight/* 6 | read max < max_brightness 7 | read cur < brightness 8 | 9 | if [ "$1" = "up" ]; then 10 | # echo "puts [${max}, ${cur}+${max}/${steps}].min" | ruby > brightness 11 | echo "puts [${max}, ${cur}*1.5].min.round" | ruby > brightness 12 | fi 13 | 14 | if [ "$1" = "down" ]; then 15 | echo "puts [1, ${cur}/1.5].max.round" | ruby > brightness 16 | fi 17 | 18 | # exec qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl org.kde.Solid.PowerManagement.Actions.BrightnessControl.setBrightness $(expr $(qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl org.kde.Solid.PowerManagement.Actions.BrightnessControl.brightness) - 50) 19 | # exec qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl org.kde.Solid.PowerManagement.Actions.BrightnessControl.setBrightness $(expr $(qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl org.kde.Solid.PowerManagement.Actions.BrightnessControl.brightness) + 50) 20 | -------------------------------------------------------------------------------- /bin/emacs: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | . ~/bin/setup_path 4 | 5 | if [ -x "/usr/bin/keychain" ]; then 6 | if [ -f "$HOME/.ssh/id_rsa" ]; then 7 | eval $(/usr/bin/keychain --quiet --quick --eval $HOME/.ssh/id_rsa) 8 | elif [ -f "$HOME/.ssh/id_ed25519" ]; then 9 | eval $(/usr/bin/keychain --quiet --quick --eval $HOME/.ssh/id_ed25519) 10 | fi 11 | fi 12 | 13 | export SDKMAN_DIR="/home/arne/.sdkman" 14 | [ -s "/home/arne/.sdkman/bin/sdkman-init.sh" ] && . "/home/arne/.sdkman/bin/sdkman-init.sh" 15 | 16 | /usr/local/bin/emacs 17 | -------------------------------------------------------------------------------- /bin/install_babashka: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | # set -x 5 | 6 | INSTALL_DIR="$1" 7 | if [ -z "${INSTALL_DIR}" ]; then 8 | INSTALL_DIR="${HOME}/bin" 9 | fi 10 | 11 | ORGANIZATION=babashka 12 | PROJECT=babashka 13 | ARCHITECTURE=amd64 14 | 15 | # https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c 16 | gh_latest_release() { 17 | LATEST_RELEASE_URL="https://api.github.com/repos/${ORGANIZATION}/${PROJECT}/releases/latest" 18 | curl --silent "$LATEST_RELEASE_URL" | # Get latest release from GitHub api 19 | grep '"tag_name":' | # Get tag line 20 | sed -E 's/.*"v([^"]+)".*/\1/' # Pluck JSON value 21 | } 22 | 23 | current_platform() { 24 | case "$(uname -s)" in 25 | Linux*) echo linux;; 26 | Darwin*) echo macos;; 27 | MINGW64*) echo windows;; 28 | esac 29 | } 30 | 31 | VERSION=$(gh_latest_release) 32 | PLATFORM=$(current_platform) 33 | case $PLATFORM in 34 | linux) EXT=tar.gz ;; 35 | macos) EXT=tar.gz ;; 36 | windows) EXT=zip ;; 37 | esac 38 | 39 | DOWNLOAD_URL="https://github.com/${ORGANIZATION}/${PROJECT}/releases/download/v${VERSION}/${PROJECT}-${VERSION}-${PLATFORM}-${ARCHITECTURE}.${EXT}" 40 | 41 | echo $DOWNLOAD_URL 42 | 43 | mkdir -p "${INSTALL_DIR}" 44 | TMPFILE=$(mktemp) 45 | 46 | if [ "$PLATFORM" = "windows" ]; then 47 | # Do redirect manually to work around the fact that on Windows you might have an 48 | # older cURL which doesn't honor redirects. 49 | LOCATION="$(curl -sI "${DOWNLOAD_URL}" | grep -i '^location' | sed -e 's/location: //i' -e 's/[\r\n]//g')" 50 | curl -o "${TMPFILE}" -sL "${LOCATION}" 51 | else 52 | curl -o "${TMPFILE}" -sL "${DOWNLOAD_URL}" 53 | fi 54 | 55 | case "${EXT}" in 56 | zip) unzip -qqo "${TMPFILE}" -d "${INSTALL_DIR}" ;; 57 | tar.gz) tar -xvf "${TMPFILE}" -C "${INSTALL_DIR}" ;; 58 | esac 59 | rm "${TMPFILE}" 60 | -------------------------------------------------------------------------------- /bin/install_beid: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Install eid software + dependencies for connective-plugin-linux 4 | 5 | cd /tmp 6 | curl -O https://eid.belgium.be/sites/default/files/software/eid-archive_latest.deb 7 | sudo dpkg -i eid-archive_latest.deb 8 | sudo apt-get update 9 | sudo apt-get install -y eid-mw eid-viewer libpcsclite-dev python3-tk python3-venv python3-pyscard 10 | 11 | # Python venv so ubuntu doesn't complain if we `pip install` 12 | 13 | mkdir ~/opt 14 | cd ~/opt 15 | python3 -m venv ~/opt/venv 16 | . ~/opt/venv/bin/activate 17 | 18 | # Get connective-plugin-linux, set up dependencies 19 | 20 | git clone https://github.com/roelderickx/connective-plugin-linux 21 | cd connective-plugin-linux 22 | pip3 install -r ./requirements.txt 23 | pip3 install -r ./optional-requirements.txt 24 | 25 | # Download connective plugin 26 | 27 | python3 get_connective_plugin.py 28 | 29 | # Add to firefox 30 | 31 | firefox connective-downloads/*.xpi 32 | nativemessaging-ng install firefox -------------------------------------------------------------------------------- /bin/install_clojure: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | curl -sL https://github.com/clojure/brew-install/releases/latest/download/linux-install.sh | sudo bash -------------------------------------------------------------------------------- /bin/install_frp: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | # set -x 5 | 6 | INSTALL_DIR="$1" 7 | if [ -z "${INSTALL_DIR}" ]; then 8 | INSTALL_DIR="${HOME}/bin" 9 | fi 10 | 11 | ORGANIZATION=fatedier 12 | PROJECT=frp 13 | ARCHITECTURE=amd64 14 | 15 | # https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c 16 | gh_latest_release() { 17 | LATEST_RELEASE_URL="https://api.github.com/repos/${ORGANIZATION}/${PROJECT}/releases/latest" 18 | curl --silent "$LATEST_RELEASE_URL" | # Get latest release from GitHub api 19 | grep '"tag_name":' | # Get tag line 20 | sed -E 's/.*"v([^"]+)".*/\1/' # Pluck JSON value 21 | } 22 | 23 | current_platform() { 24 | case "$(uname -s)" in 25 | Linux*) echo linux;; 26 | Darwin*) echo macos;; 27 | MINGW64*) echo windows;; 28 | esac 29 | } 30 | 31 | VERSION=$(gh_latest_release) 32 | PLATFORM=$(current_platform) 33 | case $PLATFORM in 34 | linux) EXT=tar.gz ;; 35 | macos) EXT=tar.gz ;; 36 | windows) EXT=zip ;; 37 | esac 38 | 39 | DOWNLOAD_URL="https://github.com/${ORGANIZATION}/${PROJECT}/releases/download/v${VERSION}/${PROJECT}-${VERSION}-${PLATFORM}-${ARCHITECTURE}.${EXT}" 40 | 41 | echo $DOWNLOAD_URL 42 | 43 | mkdir -p "${INSTALL_DIR}" 44 | TMPFILE=$(mktemp) 45 | 46 | if [ "$PLATFORM" = "windows" ]; then 47 | # Do redirect manually to work around the fact that on Windows you might have an 48 | # older cURL which doesn't honor redirects. 49 | LOCATION="$(curl -sI "${DOWNLOAD_URL}" | grep -i '^location' | sed -e 's/location: //i' -e 's/[\r\n]//g')" 50 | curl -o "${TMPFILE}" -sL "${LOCATION}" 51 | else 52 | curl -o "${TMPFILE}" -sL "${DOWNLOAD_URL}" 53 | fi 54 | 55 | case "${EXT}" in 56 | zip) unzip -qqo "${TMPFILE}" -d "${INSTALL_DIR}" ;; 57 | tar.gz) tar -xvf "${TMPFILE}" -C "${INSTALL_DIR}" ;; 58 | esac 59 | rm "${TMPFILE}" 60 | -------------------------------------------------------------------------------- /bin/install_gcloud: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | set -x 5 | 6 | INSTALL_DIR="$1" 7 | if [ -z "${INSTALL_DIR}" ]; then 8 | INSTALL_DIR="${HOME}/opt" 9 | fi 10 | 11 | current_platform() { 12 | case "$(uname -s)" in 13 | Linux*) echo linux;; 14 | Darwin*) echo darwin;; 15 | esac 16 | } 17 | 18 | current_architecture() { 19 | case "$(uname -m)" in 20 | i386) echo x86;; 21 | i686) echo x86;; 22 | x86_64) echo x86_64;; 23 | arm*) echo arm;; 24 | esac 25 | } 26 | 27 | PLATFORM=$(current_platform) 28 | ARCHITECTURE=$(current_architecture) 29 | EXT="tar.gz" 30 | DOWNLOAD_URL="https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-${PLATFORM}-${ARCHITECTURE}.${EXT}" 31 | 32 | echo $DOWNLOAD_URL 33 | 34 | mkdir -p "${INSTALL_DIR}" 35 | TMPFILE=$(mktemp) 36 | 37 | curl -o "${TMPFILE}" -sL "${DOWNLOAD_URL}" 38 | tar -xvf "${TMPFILE}" -C "${INSTALL_DIR}" 39 | rm "${TMPFILE}" 40 | "$INSTALL_DIR/google-cloud-sdk/install.sh" --quiet 41 | 42 | GCLOUD="$INSTALL_DIR/google-cloud-sdk/bin/gcloud" 43 | "$GCLOUD" auth login 44 | "$GCLOUD" auth application-default login 45 | "$GCLOUD" config set project gaiwan-infrastructure 46 | "$GCLOUD" config configurations list 47 | -------------------------------------------------------------------------------- /bin/install_jet: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | # set -x 5 | 6 | INSTALL_DIR="$1" 7 | if [ -z "${INSTALL_DIR}" ]; then 8 | INSTALL_DIR="${HOME}/bin" 9 | fi 10 | 11 | ORGANIZATION=borkdude 12 | PROJECT=jet 13 | ARCHITECTURE=amd64 14 | 15 | # https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c 16 | gh_latest_release() { 17 | LATEST_RELEASE_URL="https://api.github.com/repos/${ORGANIZATION}/${PROJECT}/releases/latest" 18 | curl --silent "$LATEST_RELEASE_URL" | # Get latest release from GitHub api 19 | grep '"tag_name":' | # Get tag line 20 | sed -E 's/.*"v([^"]+)".*/\1/' # Pluck JSON value 21 | } 22 | 23 | current_platform() { 24 | case "$(uname -s)" in 25 | Linux*) echo linux;; 26 | Darwin*) echo macos;; 27 | MINGW64*) echo windows;; 28 | esac 29 | } 30 | 31 | VERSION=$(gh_latest_release) 32 | PLATFORM=$(current_platform) 33 | case $PLATFORM in 34 | linux) EXT=tar.gz ;; 35 | macos) EXT=tar.gz ;; 36 | windows) EXT=zip ;; 37 | esac 38 | 39 | DOWNLOAD_URL="https://github.com/${ORGANIZATION}/${PROJECT}/releases/download/v${VERSION}/${PROJECT}-${VERSION}-${PLATFORM}-${ARCHITECTURE}.${EXT}" 40 | 41 | echo $DOWNLOAD_URL 42 | 43 | mkdir -p "${INSTALL_DIR}" 44 | TMPFILE=$(mktemp) 45 | 46 | if [ "$PLATFORM" = "windows" ]; then 47 | # Do redirect manually to work around the fact that on Windows you might have an 48 | # older cURL which doesn't honor redirects. 49 | LOCATION="$(curl -sI "${DOWNLOAD_URL}" | grep -i '^location' | sed -e 's/location: //i' -e 's/[\r\n]//g')" 50 | curl -o "${TMPFILE}" -sL "${LOCATION}" 51 | else 52 | curl -o "${TMPFILE}" -sL "${DOWNLOAD_URL}" 53 | fi 54 | 55 | case "${EXT}" in 56 | zip) unzip -qqo "${TMPFILE}" -d "${INSTALL_DIR}" ;; 57 | tar.gz) tar -xvf "${TMPFILE}" -C "${INSTALL_DIR}" ;; 58 | esac 59 | rm "${TMPFILE}" 60 | -------------------------------------------------------------------------------- /bin/lein2deps: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bb 2 | 3 | ;; lein2deps | jet --pretty > deps.edn 4 | 5 | (require '[clojure.string :as str] 6 | '[clojure.edn :as edn] 7 | '[clojure.pprint :as pprint]) 8 | 9 | (alter-var-root #'*print-namespace-maps* (constantly false)) 10 | 11 | (defn read-project-clj [] 12 | (-> "project.clj" 13 | slurp 14 | (str/replace "#=" "") 15 | (str/replace "~@" "") 16 | (str/replace "~" "") 17 | (str/replace "#\"" "\"") 18 | (str/replace "#'" "") 19 | (str/replace "\\." ".") 20 | clojure.edn/read-string)) 21 | 22 | (defn deps-map [dep-vecs] 23 | (into {} 24 | (for [[d v] dep-vecs] 25 | [(if (simple-symbol? d) 26 | (symbol (str d) (str d)) 27 | d) 28 | {:mvn/version v}]))) 29 | 30 | 31 | (pprint/pprint 32 | (let [project-map (apply hash-map (drop 3 (read-project-clj))) 33 | {:keys [dependencies source-paths source-path resource-paths test-paths profiles repositories] 34 | :or {source-paths ["src"] 35 | resource-paths ["resources"] 36 | test-paths ["test"]}} project-map] 37 | (cond-> {:paths (-> (or (when source-path [source-path]) source-paths) 38 | (into resource-paths) 39 | (into test-paths)) 40 | :deps (deps-map dependencies) 41 | :aliases 42 | (into {} 43 | (for [[alias {:keys [dependencies source-paths resource-paths test-paths]}] profiles 44 | :let [paths (-> source-paths 45 | (into resource-paths) 46 | (into test-paths) 47 | vec)] 48 | :when (some seq [paths dependencies])] 49 | [alias 50 | (cond-> {} 51 | (seq paths) 52 | (assoc :extra-paths paths) 53 | (seq dependencies) 54 | (assoc :extra-deps (deps-map dependencies)))]))} 55 | (seq repositories) 56 | (assoc :mvn/repos (into {} 57 | (map (fn [[name url]] 58 | [name {:url url}])) 59 | repositories))))) 60 | 61 | ;; Local Variables: 62 | ;; mode: clojure 63 | ;; End: 64 | -------------------------------------------------------------------------------- /bin/pull_repos: -------------------------------------------------------------------------------- 1 | /home/arne/github/lambdaisland/open-source/bin/pull_repos -------------------------------------------------------------------------------- /bin/repo_status: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Show a short summary of the git status of each repo. 4 | # Assumes all lambdaisland repos are checked out as siblings to the open-source repo. 5 | # Use --dirty to only show the non-clean repos 6 | 7 | REPO_PARENT_PATH="$(dirname "$(readlink -f "$0")")/../.." 8 | ONLY_DIRTY=0 9 | 10 | while (( "$#" )); do 11 | if [[ "$1" == "--dirty" ]]; then 12 | ONLY_DIRTY=1 13 | else 14 | REPO_PARENT_PATH="$1" 15 | fi 16 | shift 17 | done 18 | 19 | 20 | GIT_STATUS_PREFIX="[" 21 | GIT_STATUS_SUFFIX="]" 22 | GIT_STATUS_COLOR="d" 23 | GIT_STATUS_UNTRACKED="?" 24 | GIT_STATUS_ADDED="+" 25 | GIT_STATUS_MODIFIED="!" 26 | GIT_STATUS_RENAMED="»" 27 | GIT_STATUS_DELETED="x" 28 | GIT_STATUS_STASHED="$" 29 | GIT_STATUS_UNMERGED="=" 30 | GIT_STATUS_AHEAD="⇡" 31 | GIT_STATUS_BEHIND="⇣" 32 | GIT_STATUS_DIVERGED="⇕" 33 | RED='\033[0;31m' 34 | NC='\033[0m' # No Color 35 | 36 | git_status() { 37 | INDEX=$(command git status --porcelain -b 2> /dev/null) 38 | 39 | # Check for untracked files 40 | if $(echo "$INDEX" | command grep -E '^\?\? ' &> /dev/null); then 41 | git_status="$GIT_STATUS_UNTRACKED$git_status" 42 | fi 43 | 44 | # Check for staged files 45 | if $(echo "$INDEX" | command grep '^A[ MDAU] ' &> /dev/null); then 46 | git_status="$GIT_STATUS_ADDED$git_status" 47 | elif $(echo "$INDEX" | command grep '^M[ MD] ' &> /dev/null); then 48 | git_status="$GIT_STATUS_ADDED$git_status" 49 | elif $(echo "$INDEX" | command grep '^UA' &> /dev/null); then 50 | git_status="$GIT_STATUS_ADDED$git_status" 51 | fi 52 | 53 | # Check for modified files 54 | if $(echo "$INDEX" | command grep '^[ MARC]M ' &> /dev/null); then 55 | git_status="$GIT_STATUS_MODIFIED$git_status" 56 | fi 57 | 58 | # Check for renamed files 59 | if $(echo "$INDEX" | command grep '^R[ MD] ' &> /dev/null); then 60 | git_status="$GIT_STATUS_RENAMED$git_status" 61 | fi 62 | 63 | # Check for deleted files 64 | if $(echo "$INDEX" | command grep '^[MARCDU ]D ' &> /dev/null); then 65 | git_status="$GIT_STATUS_DELETED$git_status" 66 | elif $(echo "$INDEX" | command grep '^D[ UM] ' &> /dev/null); then 67 | git_status="$GIT_STATUS_DELETED$git_status" 68 | fi 69 | 70 | # Check for stashes 71 | if $(command git rev-parse --verify refs/stash >/dev/null 2>&1); then 72 | git_status="$GIT_STATUS_STASHED$git_status" 73 | fi 74 | 75 | # Check for unmerged files 76 | if $(echo "$INDEX" | command grep '^U[UDA] ' &> /dev/null); then 77 | git_status="$GIT_STATUS_UNMERGED$git_status" 78 | elif $(echo "$INDEX" | command grep '^AA ' &> /dev/null); then 79 | git_status="$GIT_STATUS_UNMERGED$git_status" 80 | elif $(echo "$INDEX" | command grep '^DD ' &> /dev/null); then 81 | git_status="$GIT_STATUS_UNMERGED$git_status" 82 | elif $(echo "$INDEX" | command grep '^[DA]U ' &> /dev/null); then 83 | git_status="$GIT_STATUS_UNMERGED$git_status" 84 | fi 85 | 86 | # Check whether branch is ahead 87 | local ahead=$(command git rev-list --count ${git_branch}@{upstream}..HEAD 2>/dev/null) 88 | local behind=$(command git rev-list --count HEAD..${git_branch}@{upstream} 2>/dev/null) 89 | 90 | # Check wheather branch has diverged 91 | if (( $ahead )) && (( $behind )); then 92 | git_status="$GIT_STATUS_DIVERGED$git_status" 93 | elif (( $ahead )); then 94 | git_status="$GIT_STATUS_AHEAD$git_status" 95 | elif (( $behind )); then 96 | git_status="$GIT_STATUS_BEHIND$git_status" 97 | fi 98 | 99 | if [[ -n $git_status ]]; then 100 | printf "${RED}%s${NC}\r\033[7C" "[$git_status]" 101 | else 102 | printf "%-7s" "" 103 | fi 104 | } 105 | 106 | for x in "$REPO_PARENT_PATH"/*; do 107 | if [[ -d "$x/.git" ]]; then 108 | repo=$(basename "$x") 109 | pushd "$x" > /dev/null 110 | status="$(git_status)" 111 | popd > /dev/null 112 | date="$(git -C "$x" show HEAD --pretty=format:"%ah" | head -1)" 113 | title="$(git -C "$x" show HEAD --pretty=format:"%s" | head -1)" 114 | branch=$(git -C "$x" branch --show-current) 115 | branch_flag="" 116 | if [[ ! "$branch" == "master" ]] && [[ ! "$branch" == "main" ]]; then 117 | branch_flag=" (${branch})" 118 | fi 119 | tags=$(git -C "$x" describe --tags 2>/dev/null) 120 | if [[ "$?" -eq 0 ]]; then 121 | branch_flag="${branch_flag} (${tags})" 122 | fi 123 | if [[ "ONLY_DIRTY" -eq 0 ]] || [[ ! -z "${status// }" ]]; then 124 | printf "%-5s %-60s %-20s %s\n" "$status" "$repo$branch_flag" "$date" "$title" 125 | fi 126 | fi 127 | done 128 | -------------------------------------------------------------------------------- /bin/setup_path: -------------------------------------------------------------------------------- 1 | # No shebang here since this file has to be sourced. Stick to POSIX so we can 2 | # use this in sh/bash/zsh. 3 | 4 | export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" 5 | 6 | export PREFIX="$HOME/opt" 7 | export GOPATH="$HOME/.local/share/gocode" 8 | export PNPM_HOME="$HOME/.local/share/pnpm" 9 | export RUSTUP_HOME="$HOME/.local/share/rustup" 10 | export CARGO_HOME="$HOME/.local/share/cargo" 11 | export FLYCTL_INSTALL="$HOME/.fly" 12 | 13 | # Add to the start of $PATH, if the directory exists, and is not yet in $PATH 14 | append_path () { 15 | if ! echo "$PATH" then | /bin/grep -Eq "(^|:)$1($|:)" && [ -d "$1" ] 16 | then 17 | PATH="$PATH:$1" 18 | fi 19 | } 20 | 21 | # Add to the end of $PATH, if the directory exists, and is not yet in $PATH 22 | prepend_path () { 23 | if ! echo "$PATH" | /bin/grep -Eq "(^|:)$1($|:)" && [ -d "$1" ] 24 | then 25 | PATH="$1:$PATH" 26 | fi 27 | } 28 | 29 | if [ -d "$HOME/opt/Andriod" ]; then 30 | export ANDROID_HOME="$HOME/opt/Android/Sdk" 31 | append_path "$ANDROID_HOME/emulator" 32 | append_path "$ANDROID_HOME/tools" 33 | append_path "$ANDROID_HOME/tools/bin" 34 | append_path "$ANDROID_HOME/platform-tools" 35 | fi 36 | 37 | # Our "own" bin directories, put these at the front so we can always override 38 | # system binaries here. Everything else goes at the end. 39 | prepend_path "$HOME/opt/bin" 40 | prepend_path "$HOME/bin" 41 | 42 | # Go 43 | append_path "$GOPATH/bin" 44 | # Python 45 | # append_path "$HOME/opt/python-env/bin" 46 | # Node version manager 47 | append_path "/home/arne/.fnm" 48 | # Pnpm 49 | append_path "$PNPM_HOME" 50 | # Yarn 51 | append_path "$HOME/.yarn/bin" 52 | append_path "$HOME/.config/yarn/global/node_modules/.bin" 53 | # Rust 54 | append_path "$CARGO_HOME/bin" 55 | # Fly.io 56 | append_path "$FLYCTL_INSTALL/bin" 57 | 58 | systemctl --user import-environment PREFIX PATH 59 | dbus-update-activation-environment --systemd PATH="$PATH" 60 | -------------------------------------------------------------------------------- /bin/ss: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # CLASS=$(xprop -id `xdotool getwindowfocus` | grep WM_CLASS | sed 's/.*"\([^"]*\)".*/\1/') 4 | # maim -s ~/Screenshots/"$(date +%F_%H%M%S)_$CLASS.png" "$@"S 5 | 6 | IMG_FILE="$HOME/Screenshots/$(date +%F_%H%M%S).png" 7 | 8 | if [ $DESKTOP_SESSION = "sway" ]; then 9 | slurp | grim -g - "$IMG_FILE" "$@" 10 | elif [ $DESKTOP_SESSINO = "plasma" ] ; then 11 | exec spectacle -r -b -o "$IMG_FILE" "$@" 12 | fi 13 | -------------------------------------------------------------------------------- /bin/sync_to_stick: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | 3 | gio mount -d /dev/sdc1 4 | 5 | ➜ /usr/bin/time rsync -aPvt --exclude '.local' --exclude '.cache' --exclude 'snap' --exclude 'Dropbox' --exclude 'ObsRecordings' --exclude LambdaIsland/clojurians-log --exclude repos/clojurians-log --exclude .npm --exclude ROMS --exclude '.mozilla/firefox' --exclude '.config/Nextcloud/logs' --exclude tmp --exclude .m2 --exclude .overtone --exclude .sdkman ~/ /media/arne/Marceline\ Backup/`hostname` 6 | -------------------------------------------------------------------------------- /bin/upgrade_clojure: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bb 2 | 3 | (require '[babashka.process :refer [process]]) 4 | 5 | (let [script (File/createTempFile "linux-install-" ".sh")] 6 | (spit script (slurp "https://github.com/clojure/brew-install/releases/latest/download/linux-install.sh")) 7 | @(process ["chmod" "+x" script] {:inherit :true}) 8 | @(process ["sudo" script] {:inherit :true})) 9 | -------------------------------------------------------------------------------- /bin/volume: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | if [ "$1" = "up" ] ; then 4 | exec pactl set-sink-volume 0 +5% 5 | elif [ "$1" = "down" ]; then 6 | exec pactl set-sink-volume 0 -5% 7 | fi 8 | -------------------------------------------------------------------------------- /bin/waybar: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | . ~/bin/setup_path 4 | 5 | exec /usr/bin/waybar "$@" 6 | -------------------------------------------------------------------------------- /connect-the-dots: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Script for creating symlinks under $HOME for any file in the current directory. 4 | # 5 | # (c) Arne Brasseur 2012-2023 6 | # 7 | # Use --dry-run to see what it would do without performing any actions. 8 | # 9 | # Generally this script is conservative, if an operation is destructive, for 10 | # instance because there's already a file or other symlink in place, then it 11 | # reports a warning and ignores that file. 12 | # 13 | # The only exception is if the file that's in the way is identical to the file 14 | # being linked, in that case the file under $HOME gets replaced by a symlink. 15 | # 16 | # Run with `-f` to force updating files/symlinks that are in the way. The 17 | # existing file will get renamed to have a `.bak` suffix. 18 | # 19 | # Files listed in the IGNORE file are ignored. 20 | 21 | ARG="$1" 22 | 23 | print_linking() { 24 | echo $'\e[34m[\e[33m⇠\e[34m]\e[0m' "$@" 25 | } 26 | 27 | print_forcing() { 28 | echo $'\e[34m[\e[31m⇠\e[34m]\e[0m' "$@" 29 | } 30 | 31 | print_already_linked() { 32 | echo $'\e[34m[\e[32m✓\e[34m]\e[0m' "$@" 33 | } 34 | 35 | print_problem() { 36 | echo $'\e[34m[\e[31m!\e[34m]\e[0m' "$@" 37 | } 38 | 39 | print_recursing() { 40 | echo $' \e[34m[\e[33m⇣\e[34m]\e[0m' "$@" 41 | } 42 | 43 | dotdir() { 44 | cd `dirname "${BASH_SOURCE[0]}"` && echo "`pwd`/$1" 45 | } 46 | 47 | export IGNORE="$(cat "`dotdir`/IGNORE")" 48 | 49 | ignore_p() { 50 | echo "$IGNORE" | while read f ; do 51 | if [[ "$1" =~ ^$f($|/) ]]; then 52 | exit 1 53 | fi 54 | done 55 | [[ $? -eq 1 ]] || false 56 | } 57 | 58 | export -f ignore_p 59 | 60 | scan_files() { 61 | export path="$1" 62 | find "$path" \ 63 | -exec bash -c 'for f; do f="${f#"$path"}" ; ignore_p "$f" || printf "$f\n"; done' \ 64 | find-sh {} \; 65 | } 66 | 67 | do_rm() { 68 | if [[ "$ARG" = "--dry-run" ]]; then 69 | echo rm "$1" 70 | else 71 | rm "$1" 72 | fi 73 | } 74 | 75 | do_ln_s() { 76 | if [[ "$ARG" = "--dry-run" ]]; then 77 | echo ln -s "$1" "$2" 78 | else 79 | ln -s "$1" "$2" 80 | fi 81 | } 82 | 83 | create_symlink_if_possible() { 84 | local dotfile=$1 85 | 86 | if [[ -e "$HOME/$dotfile" ]]; then 87 | if cmp --silent -- "`dotdir $dotfile`" "$HOME/$dotfile"; then 88 | print_linking "$dotfile : identical file in the way, replacing with symlink" 89 | do_rm "$HOME/$dotfile" 90 | do_ln_s "`dotdir $dotfile`" "$HOME/$dotfile" 91 | else 92 | print_problem "$dotfile : can't create symlink, different file is in the way." 93 | fi 94 | else 95 | print_linking "$dotfile : creating symlink" 96 | do_ln_s "`dotdir $dotfile`" "$HOME/$dotfile" 97 | fi 98 | } 99 | 100 | check_existing_symlink() { 101 | local dotfile=$1 102 | local target=$(readlink -f $HOME/$dotfile) 103 | 104 | if [[ "$target" != "`dotdir $dotfile`" ]]; then 105 | print_problem "$dotfile : symlink points elsewhere -> $target" 106 | else 107 | print_already_linked "$dotfile" 108 | fi 109 | } 110 | 111 | force_symlink() { 112 | local dotfile=$1 113 | 114 | print_forcing "$dotfile : forcing new symlink" 115 | mv "$HOME/$dotfile" "$HOME/${dotfile}.bak" 116 | ln -s "`dotdir $dotfile`" "$HOME/$dotfile" 117 | } 118 | 119 | handle_dotfile() { 120 | local dotfile=$1 121 | 122 | if [[ -L "$HOME/$dotfile" ]]; then 123 | if [[ "$ARG" == "-f" ]]; then 124 | force_symlink $dotfile 125 | else 126 | check_existing_symlink $dotfile 127 | fi 128 | else 129 | create_symlink_if_possible $dotfile 130 | fi 131 | } 132 | 133 | handle_directory() { 134 | local dir=$1; 135 | mkdir -p "$HOME/$dir" 136 | } 137 | 138 | handle() { 139 | local dotfile=$1 140 | 141 | if [[ -f "${dotfile}" ]]; then 142 | handle_dotfile "${dotfile}" 143 | elif [[ -d "${dotfile}" ]]; then 144 | handle_directory "${dotfile}" 145 | fi 146 | } 147 | 148 | main() { 149 | for dotfile in $(scan_files `dotdir`) ; do 150 | if [[ ! "${dotfile}" = "" ]]; then 151 | handle "${dotfile}" 152 | fi 153 | done 154 | } 155 | 156 | main 157 | -------------------------------------------------------------------------------- /extra_packages: -------------------------------------------------------------------------------- 1 | baobab 2 | dkms 3 | dosbox 4 | eid-mw 5 | eid-viewer 6 | entr 7 | eog 8 | flatpak 9 | gnome-terminal 10 | google-chrome-stable 11 | gtkpod 12 | inkscape 13 | jq 14 | kitty 15 | libgsl25 libgsl-dev 16 | libpipewire-0.3-dev 17 | liquidsoap 18 | lutris 19 | magic-wormhole 20 | maim 21 | meson 22 | net-tools 23 | okular 24 | okular-extra-backends 25 | okular-mobile 26 | okular-backend-odp 27 | okular-backend-odt 28 | openjdk-17-doc 29 | procyon-decompiler 30 | qpod 31 | qtbase5-private-dev 32 | s3cmd 33 | signal-desktop 34 | sqlite3 35 | system-config-printer-kde 36 | terraform 37 | tmuxp 38 | tuxboot 39 | watchman 40 | wine32 41 | xclip 42 | xdotool 43 | openjdk-17-docs 44 | openjdk-17-doc 45 | libwebkit2gtk-4.0-dev 46 | eid-viewer 47 | eid-mw 48 | shellcheck 49 | peek 50 | ffmpeg 51 | libdrm2 52 | peek 53 | openjdk-17 54 | openjdk-17-jdk 55 | mainline 56 | gcc-11 57 | python3.8 58 | octave 59 | obs-studio obs-cli obs-websocket obs-plugins~ 60 | obs-studio obs-cli obs-websocket obs-plugins 61 | makedeb 62 | just 63 | okra 64 | libxml2:i386 libcanberra-gtk-module:i386 gtk2-engines-murrine:i386 libatk-adaptor:i386 libgdk-pixbuf-xlib-2.0-0:i386 65 | kdenlive 66 | rclone 67 | libpcsclite-dev 68 | moonlight-qt 69 | vinagre 70 | vinagre 71 | 7zip 72 | guvcview 73 | blastem 74 | dgen 75 | milkytracker mikmod 76 | libwxbase3.0-dev libwxgtk-media3.0-gtk3-dev libwxgtk3.0-gtk3-dev wx3.0-headers libsqlite3-dev libyaml-cpp-dev libtagc0-dev libtag1-dev libtagc0 libexif-dev libpango1.0-dev libsndfile1-dev libspdlog-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev 77 | libaubio-dev 78 | omnidb-server 79 | pgadmin4 80 | rename 81 | nfs-common 82 | sshpass 83 | tesseract-ocr 84 | csvkit 85 | mono-runtime 86 | mono-devel 87 | mono-xbuild 88 | dotnet-sdk-7.0 89 | msbuild 90 | barrier 91 | rofi 92 | wofi 93 | barrier 94 | slurp grim 95 | libtree-sitter0 libtree-sitter-dev 96 | fonts-manrope 97 | fonts-gidole 98 | fonts-inter 99 | fonts-overpa 100 | fonts-overpass 101 | fonts-roboto-fontface 102 | alice 103 | tree-sitter-cli 104 | python3-pip 105 | python3-pipx 106 | pipx 107 | libavahi-compat-libdnssd-dev 108 | pulseaudio-dlna 109 | elisa 110 | syslog-ng-core 111 | lua 112 | lua5.4 113 | tmate 114 | fprint 115 | fprintd 116 | libpam-fprintd 117 | djvulibre 118 | djvu 119 | djvulibre-bin 120 | djview4 121 | texlive-extra-utils 122 | texlive-extra-utils 123 | libpodofo-utils 124 | plasma-workspace-wayland 125 | gdm 126 | gdm3 127 | wofi 128 | kde-spectacle 129 | gnome-screensaver 130 | amsynth 131 | qjackct 132 | qjackctl 133 | qjackctl 134 | cmake 135 | qtbase5-dev 136 | qt5svg 137 | qtsvg 138 | qt svg 139 | libqt5svg5-dev 140 | libpipewire-0.3-dev 141 | libjack-dev 142 | liblo-dev 143 | a2jmidid 144 | ams 145 | pipewire-jack 146 | pipewire-audio-client-libraries 147 | carla 148 | pipewire-audio-client-libraries libspa-0.2-bluetooth libspa-0.2-jack 149 | wireplumber pipewire-media-session- 150 | kwallet-pam 151 | libpam-kwallet5 152 | ksshaskpass 153 | gjacktransport 154 | gjacktransport 155 | catarina 156 | ardour 157 | qjackctl 158 | hydrogen 159 | pipewire-jack 160 | midisnoop 161 | supercollider-server 162 | supercollider-ide 163 | liboscpack-dev 164 | nextcloud-desktop dolphin-nextcloud 165 | inkscape 166 | certbot 167 | python3-certbot-dns-dnsimple 168 | libwlroots-dev libinput-dev 169 | wayland-protocols 170 | libwayland-server0 171 | python3.11-venv 172 | python3.11-venv 173 | jack-keyboard 174 | bemenu 175 | sway 176 | sway 177 | swaybar 178 | python3.12 python3.12-dev 179 | python3.12-venv 180 | waybar 181 | brightnessctl 182 | libncurses5-dev libncursesw5-dev libportmidi-dev 183 | libjack-jackd2-dev 184 | carla 185 | libfftw3-dev 186 | 187 | libavahi-client-dev 188 | build-essential cmake libjack-jackd2-dev libsndfile1-dev libfftw3-dev libxt-dev libavahi-client-dev 189 | git libasound2-dev libicu-dev libreadline6-dev libudev-dev pkg-config libncurses5-dev 190 | qt5-default qt5-qmake qttools5-dev qttools5-dev-tools qtwebengine5-dev libqt5svg5-dev libqt5websockets5-dev 191 | qt5 qt5-qmake qttools5-dev qttools5-dev-tools qtwebengine5-dev libqt5svg5-dev libqt5websockets5-dev 192 | qt5-qmake qttools5-dev qttools5-dev-tools qtwebengine5-dev libqt5svg5-dev libqt5websockets5-dev 193 | qtbase5-dev qt5-qmake qttools5-dev qttools5-dev-tools qtdeclarative5-dev libqt5svg5-dev libqt5websockets5-dev qtwebengine5-dev 194 | librust-gtk4-dev 195 | libadwaita-1-dev 196 | sway waybar 197 | bemenu 198 | pipewire-jack 199 | xdg-desktop-portal-wlr pipewire-libcamera libcamera-ipa 200 | sc3-plugins supercollider-server 201 | libgtkmm-3.0-dev 202 | qpwgraph 203 | sc3-plugins 204 | libscsynth1 205 | nextcloud-desktop 206 | redshift-gtk 207 | gammastep 208 | xdg-desktop-portal-wlr 209 | xdg-desktop-portal-wlr 210 | pipewire-libcamera 211 | libcamera-ipa 212 | supercollider sc3-plugins 213 | jmeters 214 | jkmeter 215 | obs-studio 216 | qmapshack 217 | dbeaver 218 | ansible 219 | qsampler 220 | ppa-purge 221 | synaptic 222 | apt-show-versions 223 | libspa-0.2-libcamera 224 | pipewire-v4l2 225 | mysql-client-core-8.0 226 | librubberband2 librubberband-dev 227 | brightnessctl 228 | ddcutil 229 | gcolor3 230 | bemenu 231 | sc3-plugins 232 | sc3-plugins-server 233 | sc3-plugins-language 234 | pipewire-alsa 235 | spek 236 | jaaa 237 | patchance 238 | python3-pyqt5.qtsvg 239 | rpi-imager 240 | f3 241 | gcolor3 242 | nautilus 243 | jack-mixer 244 | docker-compose 245 | mysql-client 246 | terraform 247 | libsecret-tools 248 | docker-compose-v2 249 | weasyprint 250 | fcitx5-pinyin fcitx5 251 | fcitx5-frontend-qt5 fcitx5-frontend-qt6 fcitx5-frontend-gtk 252 | fcitx5-frontend-qt5 fcitx5-frontend-qt6 253 | fcitx5-frontend-gtk2 fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 254 | fcitx-libs-dev 255 | fcitx5 fcitx5-module-pinyinhelper fcitx5-pinyin fcitx5-pinyin-gui 256 | fcitx5-libs-dev 257 | grimshot 258 | grimshot 259 | pipx 260 | tcptraceroute 261 | kodi 262 | plasma-bigscreen 263 | kodi* 264 | vmpk 265 | vmpk 266 | s4cmd 267 | jq 268 | mako-notifier 269 | sway-notification-center 270 | gimp 271 | chromium-browser 272 | gv 273 | python3-numpy 274 | python3-grpcio 275 | python3-cffi 276 | redis-tools 277 | libreoffice-kf5 278 | maildir-utils 279 | pass 280 | kwalletcli 281 | kleopatra 282 | kleopatra 283 | scdaemon 284 | mu4e 285 | meson 286 | libgmime-3.0-dev 287 | kmail 288 | kdenlive 289 | lintian 290 | locate 291 | pipewire-jack 292 | powerdevil 293 | powerdevil 294 | kdeconnect 295 | qt5-default 296 | cpufrequtils 297 | bluefish* 298 | swaylock 299 | swaylock 300 | swaylock 301 | lxpolkit 302 | nextcloud-desktop 303 | pdftk-java 304 | calibre 305 | calibre 306 | postgresql-client-16 307 | python3-pip 308 | python3-pip 309 | python3.12-venv 310 | jmtpfs 311 | xboxdrv 312 | bmenu 313 | waybar 314 | waybar 315 | bemenu 316 | bemenu 317 | nm-applet 318 | nm-tray 319 | xdg-desktop-portal-wlr 320 | slurp 321 | nwg-bar 322 | hwinfo 323 | libgtk-layer-shell0 324 | gtk-layer-shell 325 | libgtk-layer-shell-dev 326 | libplayerctl-dev 327 | python3-i3ipc 328 | brightnessctl 329 | python3-dasbus 330 | sway-notification-center 331 | wpagui 332 | network-manager-gnome 333 | kdeconnect 334 | grim 335 | grim 336 | ruby 337 | thonny 338 | python3-pygame python3-pgzero 339 | btop 340 | okular 341 | qml6-module-qt-labs-folderlistmodel 342 | libappindicator3-dev 343 | python3-dasbus 344 | libdbusmenu-gtk3-dev 345 | gnome-tweaks 346 | eid-mw eid-viewer 347 | eid-mw eid-viewer 348 | libpcsclite-dev python3-tk 349 | 350 | libpcsclite-dev python3-pyscard python3-tk 351 | brightnessctl 352 | libgtk4-layer-shell-dev 353 | libgtk-layer-shell-dev 354 | python-psutil 355 | python3-psutil 356 | playerctl 357 | libplayerctl-dev 358 | python3-i3ipc 359 | python3-dasbus 360 | libappindicator-gtk3 361 | libappindicator3-dev 362 | libayatana-appindicator3-dev 363 | python3-dasbus 364 | libdbusmenu-gtk3-dev 365 | python-gi-cairo 366 | python3-gi-cairo 367 | notify-send 368 | libnotify-bin 369 | network-manager 370 | golang 371 | d-feet 372 | libdbus-1-dev 373 | rlwrap 374 | netcat-openbsd 375 | libsecret-1-dev 376 | keychain 377 | slurp grim 378 | pavucontrol 379 | inkscape 380 | evince 381 | xdg-desktop-portal-wlr 382 | pipewire-libcamera 383 | xdg-desktop-portal-wlr pipewire-libcamera libcamera-ipa 384 | powertop 385 | powertop 386 | docker-compose-v2 387 | docker-compose-v2 388 | docker-compose-v2 -y 389 | docker-compose-v2 390 | docker-compose-v2 391 | tree 392 | openssh-server 393 | libqt5core5t64 394 | qml6-module-qtcore 395 | mysql-client-core-8.0 396 | postgresql-client-16 397 | pulseaudio-utils 398 | wev 399 | wdisplays 400 | gcolor3 401 | s4cmd 402 | python3-venv 403 | libreoffice 404 | rclone 405 | eog 406 | gimp3 407 | gimp 408 | qml6-module-qt-labs-folderlistmodel 409 | python3-dev 410 | python3-pip python3.12-venv python3-dev 411 | gparted 412 | lxpolkit 413 | partitionmanager 414 | chromium-browser 415 | chromium-browser 416 | mixxx 417 | mplayer 418 | system-config-printer 419 | cups-client 420 | foomatic-db cups-filters cups-filters-core-drivers foomatic-db-compressed-ppds 421 | foomatic-db cups-filters cups-filters-core-drivers 422 | print-manager 423 | thonny 424 | rustup 425 | supercollider sc3-plugins 426 | docker-build-x 427 | docker-buildx 428 | -------------------------------------------------------------------------------- /git/template/HEAD: -------------------------------------------------------------------------------- 1 | ref: refs/heads/main 2 | -------------------------------------------------------------------------------- /minimal.zshrc: -------------------------------------------------------------------------------- 1 | fpath=($fpath "/home/arne/.zfunctions") 2 | autoload -U promptinit; promptinit 3 | prompt spaceship 4 | 5 | alias en='emacsclient -n' 6 | 7 | export PATH="$HOME/bin:$HOME/monorepo/projects/csp-billing-dev/bin:$PATH" 8 | 9 | export HISTFILE="$HOME/.zhistory" 10 | setopt SHARE_HISTORY 11 | HISTSIZE=50000 12 | SAVEHIST=50000 13 | 14 | #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! 15 | export SDKMAN_DIR="$HOME/.sdkman" 16 | [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh" -------------------------------------------------------------------------------- /notes.md: -------------------------------------------------------------------------------- 1 | # Setup notes 2 | 3 | Info on more things to (re)configure on a new system. 4 | 5 | ## Packages 6 | 7 | ``` 8 | sudo apt-get install \ 9 | build-essential inkscape openssl sox gimp mplayer ffmpeg gitg libxml2-dev libxml2 libxslt1-dev \ 10 | maven pavucontrol apt-file scrot ant gparted p7zip \ 11 | gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-fluendo-mp3 \ 12 | ssed colordiff openssh-server tofrodos cowsay bsdgames openjdk-8-jdk openjdk-11-jdk unrar pandoc gnutls-bin \ 13 | lame chromium-browser tmux htop zsh silversearcher-ag vim \ 14 | \ 15 | autoconf automake texinfo libgtk2.0-dev libxpm-dev libjpeg-dev libtiff5-dev \ 16 | libgif-dev libtinfo-dev libotf-dev libjansson-dev \ 17 | libgtk-3-dev libgnutls28-dev libmagick++-dev \ 18 | \ 19 | qjackctl jackd jack-capture curl \ 20 | libreoffice thunderbird rlwrap postgresql-10 openvpn graphviz golang \ 21 | tint2 xscreensaver keychain powertop tree xterm \ 22 | fonts-emojione\ 23 | \ 24 | xclip 25 | 26 | # trayer xfce4-panel xfce4-power-manager 27 | 28 | # For building the lambdaisland guides 29 | texlive-full 30 | 31 | # notification server, see https://wiki.archlinux.org/index.php/Desktop_notifications 32 | dunst 33 | ``` 34 | 35 | possibly 36 | 37 | ``` 38 | redis-server zsnes dzen 39 | network-manager-vpnc 40 | libmysqlclient-dev mysql-client 41 | compizconfig-settings-manager 42 | ``` 43 | 44 | fonts 45 | 46 | ``` 47 | fonts-arphic-bkai00mp 48 | fonts-arphic-bsmi00lp 49 | fonts-arphic-gbsn00lp 50 | fonts-arphic-gkai00mp 51 | fonts-arphic-ukai 52 | fonts-arphic-uming 53 | fonts-babelstone-han 54 | ttf-mscorefonts-installer 55 | fonts-opensymbol 56 | fonts-wqy-zenhei 57 | ttf-anonymous-pro 58 | fonts-inconsolata 59 | 60 | 61 | ttf-unifont 62 | ttf-engadget 63 | ttf-essays1743 64 | ttf-femkeklaver 65 | ttf-goudybookletter 66 | ttf-staypuft 67 | ttf-summersby 68 | ttf-radisnoir 69 | ttf-bitstream-vera 70 | ttf-adf-accanthis 71 | ttf-adf-baskervald 72 | ttf-adf-berenis 73 | ttf-adf-gillius 74 | ttf-adf-ikarius 75 | ttf-adf-irianis 76 | ttf-adf-libris 77 | ttf-adf-mekanus 78 | ttf-adf-oldania 79 | ttf-adf-romande 80 | ttf-adf-switzera 81 | ttf-adf-tribus 82 | ttf-adf-universalis 83 | ttf-adf-verana 84 | ``` 85 | 86 | ## Chinese input with Fcitx (15.10) 87 | 88 | install 89 | 90 | ``` 91 | fcitx fcitx-pinyin fcitx-sunpinyin fcitx-googlepinyin fcitx-anthy fcitx-mozc fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-frontend-qt4 92 | ``` 93 | 94 | run `im-config`, choose `fcitx` 95 | 96 | log out, in (restart X), now you can configure your input methods 97 | 98 | ## Caps / Hyper / Compose 99 | 100 | More info: https://wiki.archlinux.org/index.php/X_KeyBoard_extension 101 | 102 | This used to be done with xmodmap, and the xmodmap dotfile is still there 103 | because it doesn't hurt (might still help on old systems). However newer systems 104 | have the problem that XKB will override the xmodmap settings. 105 | 106 | The fix, in /usr/share/X11/xkb/symbols/us add this section (I've added below the "euro" section since it relies on that) 107 | 108 | ``` 109 | partial alphanumeric_keys modifier_keys 110 | xkb_symbols "arne" { 111 | // US with Euro symbol on the 5 112 | include "us(euro)" 113 | name[Group1]= "English (US, for Arne)"; 114 | 115 | // Capslock = Ctrl 116 | include "capslock(ctrl_modifier)" 117 | 118 | // Right alt = compose 119 | include "compose(ralt)" 120 | 121 | // The old control keys are now Hyper keys 122 | key { [ Hyper_L ] }; 123 | key { [ Hyper_R ] }; 124 | modifier_map Mod3 { , }; 125 | }; 126 | ``` 127 | 128 | in /usr/share/X11/xkb/rules/evdev.xml add an extra "arne" variant under the us layout 129 | 130 | ``` 131 | 132 | 133 | us 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | arne 142 | English (US, for Arne) 143 | 144 | 145 | 146 | ``` 147 | 148 | You'll have to `sudo dpkg-reconfigure xkb-data` and log in/out again, but now you can select this custom keyboard in the fcitx config. 149 | 150 | ## Compose key 151 | 152 | To just get the compose key, you can do this, more info on the [ArchLinux wiki](https://wiki.archlinux.org/index.php/Keyboard_configuration_in_Xorg#Configuring_compose_key) 153 | 154 | ``` 155 | setxkbmap -option compose:ralt 156 | ``` 157 | 158 | Also interesting to have a look at the possible options 159 | 160 | ``` 161 | grep "compose:" /usr/share/X11/xkb/rules/base.lst 162 | ``` 163 | 164 | Some other interesting options 165 | 166 | - eurosign:e 167 | - terminate:ctrl_alt_bksp 168 | - caps:ctrl_modifier / ctrl:nocaps (same thing?) 169 | - grp:* -> switch to alternative layout. How does this play with fcitx? 170 | 171 | ## Manual installation 172 | 173 | * ruby-install 174 | * chruby 175 | * firefox-nightly 176 | * zprezto 177 | * phantomjs (still needed from source) 178 | * nvm / node 179 | * hub 180 | * leiningen 181 | * ngrok 182 | * emacs 183 | * Cloudberry 184 | * go get github.com/ericchiang/pup 185 | 186 | ## ShuttleXpress 187 | 188 | `/etc/udev/rules.d/90-shuttlexpress.rules` 189 | 190 | -rw-rw-r-- 1 root root 222 Oct 28 11:51 ./udev/rules.d/90-shuttlexpress.rules 191 | 192 | ``` 193 | SUBSYSTEM=="input", GROUP="input", MODE="0666" 194 | SUBSYSTEM=="usb", ATTRS{idVendor}=="0b33", ATTRS{idProduct}=="0020", MODE:="666", GROUP="plugdev", RUN="/bin/sh -c 'echo -n $kernel:1.0 > /sys/bus/usb/drivers/usbhid/unbind'" 195 | ``` 196 | 197 | reload: 198 | 199 | ``` 200 | sudo udevadm control --reload-rules 201 | ``` 202 | 203 | ## DNS 204 | 205 | https://www.ctrl.blog/entry/resolvconf-tutorial 206 | 207 | ``` 208 | sudo apt remove --purge resolvconf 209 | sudo sed 's/^dns/# dns/' -i /etc/NetworkManager/NetworkManager.conf 210 | ``` 211 | 212 | To recompile network-manager so it ignores devices created by docker: 213 | 214 | ``` 215 | sudo apt-get build-dep network-manager 216 | cd /tmp 217 | apt-get source network-manager 218 | cd network-manager-1.2.6 219 | cd debian/patches 220 | wget https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/1458322/+attachment/4914082/+files/hide_unmanaged_interfaces.patch 221 | cd - 222 | dpkg-buildpackage -b -uc -us 223 | cd /tmp 224 | sudo dpkg -i *.deb 225 | ``` 226 | 227 | ## WWW browser 228 | 229 | ``` 230 | sudo update-alternatives --config x-www-browser 231 | ``` 232 | 233 | ### Cloudberry 234 | 235 | Download: https://www.cloudberrylab.com/download-thanks.aspx?prod=cbbub1214 236 | 237 | Troubleshoot 238 | 239 | "/opt/local/CloudBerry Backup/bin/cbb" saveLog -p /tmp/cloudberry 240 | 241 | ## XMonad 242 | 243 | Elaborate xmonad config for inspiration: https://github.com/randomthought/xmonad-config 244 | 245 | ## Wifi 246 | 247 | NetworkManager stores wifi credentials in /etc/NetworkManager/system-connections/ with a mask of 0600. 248 | 249 | # Wayland / Gnome 250 | 251 | ``` 252 | gsettings set org.gnome.desktop.lockdown disable-lock-screen 'true' 253 | gsettings set org.gnome.desktop.input-sources xkb-options "['caps:ctrl_modifier']" 254 | 255 | ``` 256 | 257 | # General checklist when trying new environments 258 | 259 | - caps lock as control 260 | - tiling / xmonad style keys 261 | - compose key 262 | - dual screen 263 | -------------------------------------------------------------------------------- /sync: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | git add -A 4 | git commit -m 'sync' 5 | git push --------------------------------------------------------------------------------