POP!OS 21.10- Tweaked!

Recently, I decided to give another run at using POP!OS. There were a number of factors that prompted my choice but the most significant was:

System76’s decision to move their DE (Cosmic) from a Gnome to Rust base.

I understand this platform transition is not a short term effort. But, as a desktop environment/ window manager ‘wanderer’ I decided to check ‘things’ out.

By way of full disclosure: this is my first use of the Cosmic-Gnome platform.

I have been quite pleased. Here is a summary of my findings and tweaks. Yes, I made a few to suit my desktop biases (needs?).

Although, I normally prefer to use dwm and/or i3-wm as my desktop of choice, I find the Cosmic Desktop environment remarkably comfortable, tweakable, and dare I say, similar to my favorite wms.

Reading the Cosmic Roadmap, I found they agree that their major ‘competition’ is the i3-wm desktop. Yes, I know Cosmic-Gnome is a Desktop Environment, not a simple Window Manager but similarities between my two favorite Window Managers and the Cosmic DE abound or can be easily created/ enabled.

Here are some:

  • Unlike standard Gnome, the tiling here is similar to that on i3-wm but easier. From my perspective it is some of the easiest tiling ‘around’. Kudos to System76.
  • With the addition of a few Gnome extensions (Improved Workspace Indicator and Auto Move Windows) Cosmic applications are able to open in designated Workspaces and provide a tiny, simple indicator of which Workspace(s) are ‘active’. To activate these features all you need do is install the two plugins; and, designate which applications ‘belong’ on designated workspace(s). Nothing more (so far as I can remember).
  • Because I push open (opening) applications onto designated Workspaces, I use more than the meager number of Workspaces offered by gnome (4)- also by Cosmic-Gnome. I use 9 Workspaces. Luckily, it is quite simple to make 9 Workspaces available and provide keybindings to jump to any or transfer an open application to any Workspace. Look below to see how it can be done. There are probably better ways, but the way I uncovered works for me.  Here is the way I accomplished the above:
====== Gnome-Cosmic ======
Created Sunday 16 January 2022

Keyboard short-cuts:
This command will show what you have:
gsettings list-recursively org.gnome.desktop.wm.keybindings | grep switch-to-workspace

1. Set a static number of workspaces to 9:

gsettings set org.gnome.mutter dynamic-workspaces false

gsettings set org.gnome.desktop.wm.preferences num-workspaces 9

2. Unbind all the Gnome default keybindings for switching between applications:

gsettings set org.gnome.shell.keybindings switch-to-application-1 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-2 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-3 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-4 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-5 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-6 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-7 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-8 [] && 
gsettings set org.gnome.shell.keybindings switch-to-application-9 []

3. Unbind all the Gnome keybindings for moving between workspaces

gsettings set org.gnome.shell.keybindings move-to-workspace-1 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-2 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-3 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-4 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-5 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-6 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-7 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-8 [] && 
gsettings set org.gnome.shell.keybindings move-to-workspace-9 []

4. Rebind them to switch between workspaces on Super + number:

gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1 "[\"<Super>1\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2 "[\"<Super>2\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-3 "[\"<Super>3\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4 "[\"<Super>4\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-5 "[\"<Super>5\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-6 "[\"<Super>6\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-7 "[\"<Super>7\"]" && 
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-8 "[\"<Super>8\"]" &&  
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-9 "[\"<Super>9\"]" 

5. In addition, it's convenient to have Super + Shift + number move a window between workspaces:

gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-1 "[\"<Super><Shift>1\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-2 "[\"<Super><Shift>2\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-3 "[\"<Super><Shift>3\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4 "[\"<Super><Shift>4\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-5 "[\"<Super><Shift>5\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-6 "[\"<Super><Shift>6\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-7 "[\"<Super><Shift>7\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-8 "[\"<Super><Shift>8\"]" && 
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-9 "[\"<Super><Shift>9\"]" 

  • Because I have strong opinions (probably on everything), there are some things I removed from / disabled on Cosmic.
    • The most important being, I turned-off the ‘Desktop Icons NG’ extension. Sorry, I do not use or like desktop icons; too much clutter.
    • I, also, use my own preferred keybindings, not those standard to Cosmic-Gnome.
  • Additionally I am a fan of using keybind accessed pop-up services. I generally use at least two; they are System Monitoring & System Maintenance: two (2) Yad scripts.
    #!/bin/bash
    # system monitors
    yad --center --borders=1 --on-top --sticky --single-click --title="System Monitors" --height=80 --text="<b><u>System Monitoring Tools</u></b>" --window-icon=utilities-terminal --image "calligraplan" --image-on-top\
        --buttons-layout=center \
        --window-icon="gtk-quit: exit" \
        --button="Task Management!gtk-preferences:lxtask" \
        --button="Wavemon!network:gnome-terminal -e wavemon -i wlp2s0" \
        --button="BpyTop!system:gnome-terminal -e bpytop" \
        --button="Glances!system-run:gnome-terminal -e glances" \
        --button="htop!cpu:gnome-terminal -e htop" \
        --button="nmon!search:gnome-terminal -e nmon" \
        --button=Cancel:0 \
    #!/bin/bash
    #System Maintenance - Tools
    yad --title "System Tools" --form --width=325 --height=200 --posx=850 --posy=200 --text="<b><u>System Maintenance Tools</u></b>" --window-icon=utilities-terminal --image "calligraplan" --image-on-top \
    --field="<b>aptitude</b>":fbtn "gnome-terminal -e aptitude" \
    --field="<b>Bleachbit</b>":fbtn "bleachbit" \
    --field="<b>Clean, Update, Upgrade</b>":fbtn "gnome-terminal -e /home/mark/.local/share/scripts/clean-update.sh" \
    --field="<b>Grsync</b>":fbtn "grsync" \
    --field="<b>Grub Customizer</b>":fbtn "grub-customizer" \
    --field="<b>Network Manager TUI</b>":fbtn "gnome-terminal -e nmtui" \
    --field="<b>Print Manager Settings</b>":fbtn "system-config-printer" \
    --field="<b>Restart Network</b>":fbtn "systemctl restart NetworkManager" \
    --field="<b>Sound Control</b>":fbtn "pavucontrol" \
    --field="<b>Synaptic</b>":fbtn "synaptic-pkexec" \
    --field="<b>Topgrade (Upgrade)</b>":fbtn "gnome-terminal -e /home/mark/.local/bin/topgrade/topgrade.sh" \
    --field="<b>USB Formatter</b>":fbtn "mintstick -m format" \
    --field="<b>USB Image Writer</b>":fbtn "mintstick -m iso" \
    --button=Exit:1
    
  • Due to my ancient brain’s lack of precision memory, I use two (2) Conkies:
    • one for keybindings (to provide a handy reminder of those I most often need and use);
--[[                               
# Based on Oberon's fine work on i3wm-Manjaro
# https://github.com/oberon-manjaro/conkies
# Add'l Color, functional and branding changes were made by 
# Mark Rabideau (ManyRoads) http://eirenicon.org
# in order to work, this conky requires the installation
# of pamixer in order to report sound volume correctly.
# 
# REMEMBER to change the location of scripts, devices, wifi, etc.
# to match those used on your environment(s)
# you also need appropriate glyph fonts like Nerd Fonts
# fontawesome, etc. in order for the glyphs to present correctly
#
]]
conky.config = {
    alignment = 'bottom_left',
    border_width = 1,
    border_inner_margin = 10,
    cpu_avg_samples = 2,
    default_color = '#CFD8DC',
    default_outline_color = '#000000',
    default_shade_color = '#CFD8DC',
    draw_borders = false,
    draw_graph_borders = true,
    draw_shades = false,
    double_buffer = true,
    use_xft = true,
    font = 'Inconsolata Regular:size=11',
    gap_x = 30,
    gap_y = 70,
    minimum_height = 100,
    minimum_width = 300,
    maximum_width = 300,
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_stderr = false,
    extra_newline = false,
    own_window = true,
    own_window_class = 'Conky',
    own_window_type = 'desktop',
    own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
    own_window_colour = '#2A2A2A',
    own_window_argb_visual = true,
    own_window_argb_value = 160,
    update_interval = 1.0,
    uppercase = false,
    use_spacer = 'none',
    xftalpha = .85,
    times_in_seconds = true,
    color1 = 'FFFFFF',
    color2 = '#6CC7D2',
}
conky.text = [[
#### Keybindings
${voffset -5}$color2${font Roboto:size=20}Keybindings ${font}
#### Applications
${voffset 10}${color}${font Roboto:size=11}Applicationss $hr ${font}
${voffset 5}${color2}calibre $alignr${color}[alt]+
${color2}text editor $alignr${color}[alt]+[e]
${color2}geany $alignr${color}[alt]+[g]
${color2}onlyoffice $alignr${color}[alt]+[o]
${color2}skype $alignr${color}[alt]+[s]
${color2}thunderbird $alignr${color}[alt]+[m]
${color2}virtualbox $alignr${color}[alt]+[v]
${color2}web browser $alignr${color}[alt]+[w]
${color2}zim $alignr${color}[alt]+[z]
#### Tiling
${voffset 5}${color}${font Roboto:size=11}Tiling $hr ${font}
${voffset 5}${color2}tiling toggle $alignr${color}[super]+y
${color2}hide window $alignr${color}[alt]+F9
${color2}toggle fullscreen mode $alignr${color}F10
${color2}toggle fullscreen mode $alignr${color}[super]+[m]
${color2}workspace jump $alignr${color}[super]+[1,2...]
${color2}move window $alignr${color}[super]+[shift]+[1,2...]
${color2}show workspaces $alignr${color}[super]+[d]
${color2}view split left $alignr${color}[super]+[ctrl]+[h]
${color2}view split right $alignr${color}[super]+[ctrl]+[l]
#### Menus-Terminal
${voffset 5}${color}${font Roboto:size=11}Menus-Terminals $hr ${font}
${voffset 5}${color2}open new terminal $alignr${color}[super]+enter
${color2}applications $alignr${color}[super]+[a]
#### Quit
${voffset 5}${color}${font Roboto:size=11}Quit $hr ${font}
${voffset 5}${color2}kill focused $alignr${color}[alt]+F4
${color2}logout $alignr${color}[ctrl]+[alt]+[del]

]]
    • and, another to provide systems status.
--[[                               
# Based on Oberon's fine work on i3wm-Manjaro
# https://github.com/oberon-manjaro/conkies
# Add'l Color, functional and branding changes were made by 
# Mark Rabideau (ManyRoads) http://eirenicon.org
# in order to work, this conky requires the installation
# of pamixer in order to report sound volume correctly.
# 
# REMEMBER to change the location of scripts, devices, wifi, etc.
# to match those used on your environment(s)
# you also need appropriate glyph fonts like Nerd Fonts
# fontawesome, etc. in order for the glyphs to present correctly
#
]]
conky.config = {
    alignment = 'top_right',
    border_width = 1,
    border_inner_margin = 10,
    cpu_avg_samples = 2,
    default_color = '#CFD8DC',
    default_outline_color = '#000000',
    default_shade_color = '#CFD8DC',
    draw_borders = false,
    draw_graph_borders = true,
    draw_shades = false,
    double_buffer = true,
    use_xft = true,
    font = 'Inconsolata Regular:size=11',
    gap_x = 30,
    gap_y = 110,
    minimum_height = 100,
    minimum_width = 300,
    maximum_width = 300,
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_stderr = false,
    extra_newline = false,
    own_window = true,
    own_window_class = 'Conky',
    own_window_type = 'desktop',
    own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager',
    own_window_colour = '#2A2A2A',
    own_window_argb_visual = true,
    own_window_argb_value = 160,
    update_interval = 1.0,
    uppercase = false,
    use_spacer = 'none',
    xftalpha = .85,
    times_in_seconds = true,
    color1 = 'FFFFFF',
    color2 = '#6CC7D2',
}
conky.text = [[
${voffset -5}$color2${font Roboto:size=20}${time %A}$font\
${voffset -15}$alignr$color${font Roboto:size=42}${time %e}$font
$color${voffset -12}$color${font Roboto:size=20}${time %b}$font\
${voffset -6} $color${font Roboto:size=20}${time %Y}$font$color2 $hr
#### System
${voffset 5}${color}${font Roboto:size=11}System $hr ${font}
#### CPU
${voffset 5}${color}${font Roboto:size=11}CPU$alignr$cpu%
$font$color2${top name 1}$alignr$color${top cpu 1}%
$color2${top name 2}$alignr$color${top cpu 2}%
$color2${top name 3}$alignr$color${top cpu 3}%
$color2${top name 4}$alignr$color${top cpu 4}%
$color2${top name 5}$alignr$color${top cpu 5}%
#### RAM
${voffset 10}${color}${font Roboto:size=11}RAM$alignr$mem$font
${voffset 5}$color2${top_mem name 1}$alignr$color${top_mem mem_res 1}
$color2${top_mem name 2}$alignr$color${top_mem mem_res 2}
$color2${top_mem name 3}$alignr$color${top_mem mem_res 3}
$color2${top_mem name 4}$alignr$color${top_mem mem_res 4}
$color2${top_mem name 5}$alignr$color${top_mem mem_res 5}
#### Status
${voffset 5}${color}${font Roboto:size=11}Status $hr ${font}
${voffset 0}${color2}${font Roboto:size=11}Swap ${font FontAwesome:size=11}?${alignr}${font Roboto:size=11}${color}${swap}/ ${swapfree}
${voffset 0}${color2}${font Roboto:size=11}Disk ${font FontAwesome:size=11}?${font Roboto:size=11}${color}${alignr}${fs_used /home/mark} of ${fs_size /home/mark} / ${fs_used_perc /home/mark}%
${voffset 0}${color2}${font Roboto:size=11}Wifi ${font FontAwesome:size=11}?${font Roboto:size=11}${color}${alignr}${wireless_essid wlp2s0} ${wireless_link_qual_perc wlp2s0}%${font}
${voffset 5}${color}${font Roboto:size=11}Distro $hr ${font}
${voffset 0}${color2}${font Roboto:size=11}Kernel${alignr} ${color}${kernel}
${voffset 0}${color2}${font Roboto:size=11}Init ${alignr}  ${color}${execi 86400 .$Home/.local/share/scripts/init-id.sh}
${voffset 0}${color2}${font Roboto:size=11}Desktop ${color}${font Roboto:size=11}$alignr${execi 86400 awk -F= '/TION/ {print $2}' /etc/lsb-release |sed 's/"//g'} \
]]
  • I prefer to access and use a fully searchable application menu via keybinding F1. To that end, I have installed and created a Cosmic-look jgmenu -jgmenurc.  I do not really like the huge, mouse centric, application maze, very much. jgmenu uses almost zero resources and you simply type the application name (which is automagically provide as you type). then arrow and ‘hit’ enter to run. On window Managers I often also provide dmenu, rofi, and j4-dmenu-desktop as additional options. You can do that here if you wish; I may do that later. But for now, jgmenu offers me a nice, fast, ‘eye-candy’ menu, easily made to conform with the Cosmic style. The jgmenurc follows:
position_mode = center
columns = 3
menu_width = 650
menu_height_min = 410
menu_height_max = 410
menu_padding_top = 15
menu_padding_right = 15
menu_padding_bottom = 15
menu_padding_left = 15
menu_radius = 3
menu_border = 3
#menu_halign = center
#menu_valign = center
color_menu_bg = #303030 99
color_menu_border = #FBB86C 90
csv_no_dirs = 1
csv_name_format = %n

If you wish to use these materials, you may do so without any encumbrances. If you like any of the ideas, feel free to implement them in manner that suits your need.  The bottom line, for me, is Cosmic-Gnome (part of POP!OS 21.10) is a VERY nice Desktop. I plan to use it for a while.

 

Remember, like with all of my work, I am able to provide the following assurance(s):
  • It is almost certainly going to work until it breaks; although I have to admit it may never work and that would be sad.
  • When/if it does break, you may keep all of the pieces.
  • If you find my materials helpful, both you & I will be happy, at least for a little while.
  • My advice is worth every penny you paid for it!