Lot's of awesome changes and some added scripts
This commit is contained in:
		
							parent
							
								
									ed91c15381
								
							
						
					
					
						commit
						d36ce8b8b9
					
				
					 23 changed files with 303 additions and 374 deletions
				
			
		
							
								
								
									
										23
									
								
								awesome/globalkeys.fnl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								awesome/globalkeys.fnl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,23 @@
 | 
			
		|||
(local awful (require "awful"))
 | 
			
		||||
(local gears (require "gears"))
 | 
			
		||||
(local beautiful (require "beautiful"))
 | 
			
		||||
(local hotkeys_popup (require "awful.hotkeys_popup"))
 | 
			
		||||
 | 
			
		||||
(var mod "Mod4")
 | 
			
		||||
(var shift "Shift")
 | 
			
		||||
(var ctrl "Control")
 | 
			
		||||
(var alt "Mod1'")
 | 
			
		||||
 | 
			
		||||
(global globalkeys (gears.table.join
 | 
			
		||||
                 (awful.key [mod alt] "m" (awful.spawn "mpv --player-operation-mode=pseudo-gui")
 | 
			
		||||
                      { :description "launch mpv" :group "apps" })
 | 
			
		||||
                 (awful.key [mod] "s" hotkeys_popup.show_help
 | 
			
		||||
                      { :description "show help" :group "awesome" })))
 | 
			
		||||
 | 
			
		||||
globalkeys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    ;; -- mpv
 | 
			
		||||
    ;; awful.key({ modkey,  altkey   }, "m", function () awful.spawn("mpv --player-operation-mode=pseudo-gui") end,
 | 
			
		||||
              ;; {description = "open mpv", group = "apps"}),
 | 
			
		||||
| 
						 | 
				
			
			@ -4,13 +4,13 @@
 | 
			
		|||
(local ruled (require "ruled"))
 | 
			
		||||
(local rules (require "rules"))
 | 
			
		||||
(local beautiful (require "beautiful"))
 | 
			
		||||
(local keys (require "keys"))
 | 
			
		||||
(local wibox (require "wibox"))
 | 
			
		||||
(local xresources (require "beautiful.xresources"))
 | 
			
		||||
;; (local naughty (require "naughty"))
 | 
			
		||||
(local menubar (require "menubar"))
 | 
			
		||||
(local hotkeys_popup (require "awful.hotkeys_popup"))
 | 
			
		||||
(local dpi xresources.apply_dpi)
 | 
			
		||||
(local globalkeys (require "globalkeys"))
 | 
			
		||||
 | 
			
		||||
;;; rules
 | 
			
		||||
(set awful.rules.rules rules)
 | 
			
		||||
| 
						 | 
				
			
			@ -176,9 +176,7 @@
 | 
			
		|||
;;                           })
 | 
			
		||||
;;      ))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(root.keys globalkeys)
 | 
			
		||||
 | 
			
		||||
;;; autostart applications
 | 
			
		||||
(awful.spawn.with_shell "picom --experimental-backend")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,24 +0,0 @@
 | 
			
		|||
(local awful (require "awful"))
 | 
			
		||||
(local gears (require "gears"))
 | 
			
		||||
(local beautiful (require "beautiful"))
 | 
			
		||||
(local hotkeys_popup (require "awful.hotkeys_popup"))
 | 
			
		||||
 | 
			
		||||
(var modkey "Mod4")
 | 
			
		||||
(var alt "Mod1")
 | 
			
		||||
(var shift "Shift")
 | 
			
		||||
(var ctrl "Control")
 | 
			
		||||
 | 
			
		||||
(local globalkeys (awful.keyboard.append_global_keybindings [
 | 
			
		||||
                                                             (awful.key [ modkey alt ] "m" (awful.spawn "mpv --player-operation-mode=pseudo-gui")
 | 
			
		||||
                                                                        { :description "launch mpv" :group "apps" })
 | 
			
		||||
                                                             (awful.key [ modkey ] "s" hotkeys_popup.show_help
 | 
			
		||||
                                                                        { :description "show help" :group "awesome" })
 | 
			
		||||
                                                             ]))
 | 
			
		||||
 | 
			
		||||
globalkeys
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    ;; -- mpv
 | 
			
		||||
    ;; awful.key({ modkey,  altkey   }, "m", function () awful.spawn("mpv --player-operation-mode=pseudo-gui") end,
 | 
			
		||||
              ;; {description = "open mpv", group = "apps"}),
 | 
			
		||||
							
								
								
									
										256
									
								
								awesome/keys.lua
									
										
									
									
									
								
							
							
						
						
									
										256
									
								
								awesome/keys.lua
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,256 +0,0 @@
 | 
			
		|||
local awful = require('awful')
 | 
			
		||||
local gears = require('gears')
 | 
			
		||||
 | 
			
		||||
require('awful.autofocus')
 | 
			
		||||
 | 
			
		||||
local modkey = "Mod4"
 | 
			
		||||
local altkey = "Mod1"
 | 
			
		||||
 | 
			
		||||
local dpi = require('beautiful').xresources.apply_dpi
 | 
			
		||||
 | 
			
		||||
local clientKeys =
 | 
			
		||||
	awful.util.table.join(
 | 
			
		||||
 | 
			
		||||
	-- toggle fullscreen
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey},
 | 
			
		||||
		'f',
 | 
			
		||||
		function(c)
 | 
			
		||||
			-- Toggle fullscreen
 | 
			
		||||
			c.fullscreen = not c.fullscreen
 | 
			
		||||
			c:raise()
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'toggle fullscreen', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
 | 
			
		||||
	-- close client
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey},
 | 
			
		||||
		'c',
 | 
			
		||||
		function(c)
 | 
			
		||||
			c:kill()
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'close', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	-- Default client focus
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey},
 | 
			
		||||
		'd',
 | 
			
		||||
		function()
 | 
			
		||||
			awful.client.focus.byidx(1)
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'focus next by index', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey},
 | 
			
		||||
		'a',
 | 
			
		||||
		function()
 | 
			
		||||
			awful.client.focus.byidx(-1)
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'focus previous by index', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{ modkey, "Shift"  },
 | 
			
		||||
		"d",
 | 
			
		||||
		function ()
 | 
			
		||||
			awful.client.swap.byidx(1)
 | 
			
		||||
		end,
 | 
			
		||||
		{description = "swap with next client by index", group = "client"}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{ modkey, "Shift" },
 | 
			
		||||
		"a",
 | 
			
		||||
		function ()
 | 
			
		||||
			awful.client.swap.byidx(-1)
 | 
			
		||||
		end,
 | 
			
		||||
		{description = "swap with next client by index", group = "client"}
 | 
			
		||||
	),
 | 
			
		||||
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey}, 
 | 
			
		||||
		'u', 
 | 
			
		||||
		awful.client.urgent.jumpto, 
 | 
			
		||||
		{description = 'jump to urgent client', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey},
 | 
			
		||||
		'Tab',
 | 
			
		||||
		function()
 | 
			
		||||
			awful.client.focus.history.previous()
 | 
			
		||||
			if client.focus then
 | 
			
		||||
				client.focus:raise()
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'go back', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
    awful.key(
 | 
			
		||||
        {modkey},
 | 
			
		||||
        'n',
 | 
			
		||||
        function(c)
 | 
			
		||||
            c.minimized = true
 | 
			
		||||
        end,
 | 
			
		||||
        {description = "minimize client", group = 'client'}
 | 
			
		||||
    ),
 | 
			
		||||
	-- move floating client to center
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{ modkey, "Shift" }, 
 | 
			
		||||
		"c", 
 | 
			
		||||
		function(c)
 | 
			
		||||
			local focused = awful.screen.focused()
 | 
			
		||||
 | 
			
		||||
			awful.placement.centered(c, {
 | 
			
		||||
				honor_workarea = true
 | 
			
		||||
			})
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'align a client to the center of the focused screen.', group = "client"}
 | 
			
		||||
	),
 | 
			
		||||
 | 
			
		||||
	-- toggle client floating mode
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey},
 | 
			
		||||
		'c',
 | 
			
		||||
		function(c)
 | 
			
		||||
			c.fullscreen = false
 | 
			
		||||
			c.maximized = false
 | 
			
		||||
			c.floating = not c.floating
 | 
			
		||||
			c:raise()
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'toggle floating', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
 | 
			
		||||
	-- move client position
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey},
 | 
			
		||||
		'Up',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating then
 | 
			
		||||
				c:relative_move(0, dpi(-10), 0, 0)
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'move floating client up by 10 px', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey},
 | 
			
		||||
		'Down',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating then
 | 
			
		||||
				c:relative_move(0, dpi(10), 0, 0)
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'move floating client down by 10 px', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey},
 | 
			
		||||
		'Left',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating then
 | 
			
		||||
				c:relative_move(dpi(-10), 0, 0, 0)
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'move floating client to the left by 10 px', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey},
 | 
			
		||||
		'Right',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating then
 | 
			
		||||
				c:relative_move(dpi(10), 0, 0, 0)
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'move floating client to the right by 10 px', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
 | 
			
		||||
	-- Increasing floating client size
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey, 'Shift'},
 | 
			
		||||
		'Up',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating then
 | 
			
		||||
				c:relative_move(0, dpi(-10), 0, dpi(10))
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'increase floating client size vertically by 10 px up', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey, 'Shift'},
 | 
			
		||||
		'Down',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating then
 | 
			
		||||
				c:relative_move(0, 0, 0, dpi(10))
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'increase floating client size vertically by 10 px down', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey, 'Shift'},
 | 
			
		||||
		'Left',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating then
 | 
			
		||||
				c:relative_move(dpi(-10), 0, dpi(10), 0)
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'increase floating client size horizontally by 10 px left', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey, 'Shift'},
 | 
			
		||||
		'Right',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating then
 | 
			
		||||
				c:relative_move(0, 0, dpi(10), 0)
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'increase floating client size horizontally by 10 px right', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
 | 
			
		||||
	-- Decreasing floating client size
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey, 'Control'},
 | 
			
		||||
		'Up',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating and c.height > 10 then
 | 
			
		||||
				c:relative_move(0, 0, 0, dpi(-10))
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'decrease floating client size vertically by 10 px up', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey, 'Control'},
 | 
			
		||||
		'Down',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating then
 | 
			
		||||
				local c_height = c.height
 | 
			
		||||
				c:relative_move(0, 0, 0, dpi(-10))
 | 
			
		||||
				if c.height ~= c_height and c.height > 10 then
 | 
			
		||||
					c:relative_move(0, dpi(10), 0, 0)
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'decrease floating client size vertically by 10 px down', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey, 'Control'},
 | 
			
		||||
		'Left',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating and c.width > 10 then
 | 
			
		||||
				c:relative_move(0, 0, dpi(-10), 0)
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'decrease floating client size horizontally by 10 px left', group = 'client'}
 | 
			
		||||
	),
 | 
			
		||||
	awful.key(
 | 
			
		||||
		{modkey, 'Control'},
 | 
			
		||||
		'Right',
 | 
			
		||||
		function(c)
 | 
			
		||||
			if c.floating then
 | 
			
		||||
				local c_width = c.width
 | 
			
		||||
				c:relative_move(0, 0, dpi(-10), 0)
 | 
			
		||||
				if c.width ~= c_width and c.width > 10 then
 | 
			
		||||
					c:relative_move(dpi(10), 0 , 0, 0)
 | 
			
		||||
				end
 | 
			
		||||
			end
 | 
			
		||||
		end,
 | 
			
		||||
		{description = 'decrease floating client size horizontally by 10 px right', group = 'client'}
 | 
			
		||||
	)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
return clientKeys
 | 
			
		||||
| 
						 | 
				
			
			@ -139,7 +139,7 @@ local function set_wallpaper(s)
 | 
			
		|||
        if type(wallpaper) == "function" then
 | 
			
		||||
            wallpaper = wallpaper(s)
 | 
			
		||||
        end
 | 
			
		||||
        gears.wallpaper.centered(wallpaper, s, "#282a36")
 | 
			
		||||
        gears.wallpaper.maximized(wallpaper, s)
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -154,6 +154,9 @@ awful.screen.connect_for_each_screen(function(s)
 | 
			
		|||
     -- Each screen has its own tag table.
 | 
			
		||||
     awful.tag({ "   ", "   ", "   ", "   "}, s, awful.layout.layouts[1])
 | 
			
		||||
 | 
			
		||||
     s.padding = {
 | 
			
		||||
         bottom = dpi(20)
 | 
			
		||||
     }
 | 
			
		||||
 | 
			
		||||
     yoffset = dpi(45)
 | 
			
		||||
     xoffset = dpi(18)
 | 
			
		||||
| 
						 | 
				
			
			@ -448,7 +451,23 @@ awful.keyboard.append_global_keybindings({
 | 
			
		|||
   awful.key({}, "XF86AudioPrev", function()
 | 
			
		||||
     awful.util.spawn("playerctl previous", false)
 | 
			
		||||
   end),
 | 
			
		||||
       -- Mute Microphone
 | 
			
		||||
   awful.key({}, "XF86Launch8", function()
 | 
			
		||||
     awful.util.spawn("amixer -c 2 set Mic toggle", false)
 | 
			
		||||
   end),
 | 
			
		||||
 | 
			
		||||
   awful.key({}, "XF86Launch7", function()
 | 
			
		||||
     awful.util.spawn("", false)
 | 
			
		||||
   end),
 | 
			
		||||
   awful.key({}, "XF86Launch6", function()
 | 
			
		||||
     awful.util.spawn("", false)
 | 
			
		||||
   end),
 | 
			
		||||
   awful.key({}, "XF86Launch5", function()
 | 
			
		||||
     awful.util.spawn("", false)
 | 
			
		||||
   end),
 | 
			
		||||
   awful.key({}, "XF86Tools", function()
 | 
			
		||||
     awful.util.spawn("", false)
 | 
			
		||||
   end),
 | 
			
		||||
    -- Brightness Keys
 | 
			
		||||
   awful.key({}, "XF86MonBrightnessUp", function()
 | 
			
		||||
           awful.util.spawn("brightnessctl set +10%", false)
 | 
			
		||||
| 
						 | 
				
			
			@ -614,6 +633,7 @@ root.keys(globalkeys)
 | 
			
		|||
-- }}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- {{{ Signals
 | 
			
		||||
-- Signal function to execute when a new client appears.
 | 
			
		||||
client.connect_signal("manage", function (c)
 | 
			
		||||
| 
						 | 
				
			
			@ -631,27 +651,6 @@ client.connect_signal("manage", function (c)
 | 
			
		|||
    ruled.client.apply(c)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
-- Enable sloppy focus, so that focus follows mouse.
 | 
			
		||||
-- client.connect_signal("mouse::enter", function(c)
 | 
			
		||||
--     c:emit_signal("request::activate", "mouse_enter", {raise = false})
 | 
			
		||||
-- end)
 | 
			
		||||
 | 
			
		||||
-- Enable nice titlebars
 | 
			
		||||
-- nice()
 | 
			
		||||
 | 
			
		||||
client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
 | 
			
		||||
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
 | 
			
		||||
-- }}}
 | 
			
		||||
 | 
			
		||||
-- {{{ Autostart Applications
 | 
			
		||||
-- awful.spawn.with_shell("picom --experimental-backend")
 | 
			
		||||
-- awful.spawn.with_shell("libinput-gestures-setup start")
 | 
			
		||||
-- awful.spawn.with_shell("flameshot")
 | 
			
		||||
-- awful.spawn.with_shell("xset r rate 220 90")
 | 
			
		||||
-- awful.spawn.with_shell("feh --bg-fill ~/Pictures/wallpapers/RoyalKing.png")
 | 
			
		||||
-- awful.spawn.with_shell("/usr/lib/polkit-kde-authentication-agent-1")
 | 
			
		||||
-- awful.spawn.with_shell("emacs -daemon")
 | 
			
		||||
-- awful.spawn.with_shell("nextcloud --background")
 | 
			
		||||
-- awful.spawn.with_shell("caffeine")
 | 
			
		||||
 | 
			
		||||
-- }}}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,5 @@
 | 
			
		|||
(local awful (require "awful"))
 | 
			
		||||
(local beautiful (require "beautiful"))
 | 
			
		||||
(local keybindings (require "keys"))
 | 
			
		||||
 | 
			
		||||
(local
 | 
			
		||||
 rules
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ theme.fg_minimize   = "#e2e4e5"
 | 
			
		|||
 | 
			
		||||
theme.red           = "#ff5c57"
 | 
			
		||||
 | 
			
		||||
theme.useless_gap   = dpi(16)
 | 
			
		||||
theme.useless_gap   = dpi(6)
 | 
			
		||||
theme.border_width  = dpi(0)
 | 
			
		||||
theme.transparent   = "#00000000"
 | 
			
		||||
theme.border_normal = "#00000000"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										42
									
								
								espanso/default.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								espanso/default.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
# espanso configuration file
 | 
			
		||||
 | 
			
		||||
# This is the default configuration file, change it as you like it
 | 
			
		||||
# You can refer to the official documentation:
 | 
			
		||||
# https://espanso.org/docs/
 | 
			
		||||
 | 
			
		||||
# Matches are the substitution rules, when you type the "trigger" string
 | 
			
		||||
# it gets replaced by the "replace" string.
 | 
			
		||||
matches:
 | 
			
		||||
  # Simple text replacement
 | 
			
		||||
  - trigger: ":espanso"
 | 
			
		||||
    replace: "Hi there!"
 | 
			
		||||
 | 
			
		||||
  # Dates
 | 
			
		||||
  - trigger: ":date"
 | 
			
		||||
    replace: "{{mydate}}"
 | 
			
		||||
    vars:
 | 
			
		||||
      - name: mydate
 | 
			
		||||
        type: date
 | 
			
		||||
        params:
 | 
			
		||||
          format: "%m/%d/%Y"
 | 
			
		||||
 | 
			
		||||
  # Shell commands
 | 
			
		||||
  - trigger: ":shell"
 | 
			
		||||
    replace: "{{output}}"
 | 
			
		||||
    vars:
 | 
			
		||||
      - name: output
 | 
			
		||||
        type: shell
 | 
			
		||||
        params:
 | 
			
		||||
          cmd: "echo Hello from your shell"
 | 
			
		||||
 | 
			
		||||
  - trigger: "gml"
 | 
			
		||||
    replace: "ccochrun21@gmail.com"
 | 
			
		||||
 | 
			
		||||
  - trigger: "otl"
 | 
			
		||||
    replace: "chris.cochrun@outlook.com"
 | 
			
		||||
 | 
			
		||||
  - trigger: "tfcml"
 | 
			
		||||
    replace: "chris@tfcconnection.org"
 | 
			
		||||
 | 
			
		||||
  - trigger: ":name"
 | 
			
		||||
    replace: "Chris Cochrun"
 | 
			
		||||
| 
						 | 
				
			
			@ -10,6 +10,74 @@
 | 
			
		|||
  #urlbar-container{ min-width:unset !important }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Transparent tabs */
 | 
			
		||||
.toolbar-items:-moz-lwtheme-darktext,
 | 
			
		||||
.toolbar-items:-moz-lwtheme-brighttext {
 | 
			
		||||
	background-color: transparent !important;
 | 
			
		||||
	-moz-appearance: var(--bf-moz-appearance) !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Stretch Tabs */
 | 
			
		||||
.tabbrowser-tab[fadein]:not([pinned]) {
 | 
			
		||||
	max-width: none !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.tab-background:-moz-lwtheme-darktext,
 | 
			
		||||
.tab-background:-moz-lwtheme-brighttext {
 | 
			
		||||
	background: transparent !important;
 | 
			
		||||
	-moz-appearance: var(--bf-moz-appearance) !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.tab-background[selected="true"] {
 | 
			
		||||
	background: var(--bf-tab-selected-bg) !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.tab-background:not[visuallyselected] {
 | 
			
		||||
	background: var(--bf-tab-selected-bg) !important;
 | 
			
		||||
	opacity: 0.5 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Style all the lines before and after selected tab */
 | 
			
		||||
.tabbrowser-tab::after,
 | 
			
		||||
.tabbrowser-tab::before {
 | 
			
		||||
	border-width: 1px !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.tabbrowser-arrowscrollbox {
 | 
			
		||||
	margin-inline-start: 4px !important;
 | 
			
		||||
	margin-inline-end: 0 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Center all content */
 | 
			
		||||
.tab-content {
 | 
			
		||||
	justify-content: center;
 | 
			
		||||
	align-items: center;
 | 
			
		||||
	margin-top: -1px;
 | 
			
		||||
	min-width: 100% !important;
 | 
			
		||||
	padding: 0 10px !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* A way to center the label and icon while 
 | 
			
		||||
the close button is positioned to the far right */
 | 
			
		||||
.tab-content::before{
 | 
			
		||||
	content: "";
 | 
			
		||||
	display: -moz-box;
 | 
			
		||||
	-moz-box-flex: 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Tab close button */
 | 
			
		||||
.tab-close-button {
 | 
			
		||||
	opacity: 1 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* If tab close button is not present, don't force favicon to the center */
 | 
			
		||||
#tabbrowser-tabs[closebuttons="activetab"] .tabbrowser-tab:not([selected="true"]) .tab-throbber,
 | 
			
		||||
#tabbrowser-tabs[closebuttons="activetab"] .tabbrowser-tab:not([selected="true"]) .tab-throbber-fallback,
 | 
			
		||||
#tabbrowser-tabs[closebuttons="activetab"] .tabbrowser-tab:not([selected="true"]):not([busy]) .tab-icon-image,
 | 
			
		||||
#tabbrowser-tabs[closebuttons="activetab"] .tabbrowser-tab:not([selected="true"]):not([image]) .tab-label-container {
 | 
			
		||||
	margin-left: 0 !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#toolbar-menubar{ height:initial !important; }
 | 
			
		||||
#toolbar-menubar[inactive] > #menubar-items{ opacity: 0; pointer-events: none; }
 | 
			
		||||
| 
						 | 
				
			
			@ -19,15 +87,6 @@
 | 
			
		|||
  height: calc(var(--uc-toolbar-height) - 5) !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#TabsToolbar > .titlebar-buttonbox-container,
 | 
			
		||||
#TabsToolbar > .toolbar-items > spacer,
 | 
			
		||||
.titlebar-spacer[type="post-tabs"]{
 | 
			
		||||
  display: none;
 | 
			
		||||
  visibility: none;
 | 
			
		||||
  max-height: 20px !important;
 | 
			
		||||
  max-width: 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#tabs-newtab-button {
 | 
			
		||||
  visibility: hidden !important;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +100,7 @@
 | 
			
		|||
  font-size: 13px !important;
 | 
			
		||||
  z-index: 10;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#toolbar-menubar[autohide="true"] > .titlebar-buttonbox-container,
 | 
			
		||||
#tabbrowser-tabs,
 | 
			
		||||
.tabbrowser-tab[pinned]{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,85 @@
 | 
			
		|||
/* Color controls for theme_***.css files */
 | 
			
		||||
:root{
 | 
			
		||||
  --uc-dark-bkgnd-color: #2b2b2b;
 | 
			
		||||
  --uc-light-bkgnd-color: rgb(24, 24, 24);
 | 
			
		||||
  --uc-active-color: rgb(59, 59, 59);
 | 
			
		||||
  --uc-text-color: rgb(228, 228, 228);
 | 
			
		||||
  --uc-border-color: rgb(172, 172, 172);
 | 
			
		||||
:root {
 | 
			
		||||
  /* All the CSS variables here are global */
 | 
			
		||||
  /* These applies to all colorschemes */
 | 
			
		||||
 | 
			
		||||
  /* If windows - `-moz-win-glass`, if macOS - `-moz-mac-vibrancy-dark` */
 | 
			
		||||
 
 | 
			
		||||
  --bf-moz-appearance: -moz-win-glass !important;
 | 
			
		||||
 | 
			
		||||
  --bf-backdrop-blur: 6px;
 | 
			
		||||
 | 
			
		||||
  --bf-sidebar-searchbar-radius: 6px;
 | 
			
		||||
 | 
			
		||||
  --bf-accent-bg: #9aedfeCC;
 | 
			
		||||
  --bf-blank-page-bg: #282a36;
 | 
			
		||||
  
 | 
			
		||||
  --bf-urlbar-hightlight-bg: var(--bf-accent-bg);
 | 
			
		||||
  --bf-urlbar-radius: 9px;
 | 
			
		||||
  --bf-urlbar-results-font-size: 12pt;
 | 
			
		||||
  --bf-urlbar-results-font-weight: 550;
 | 
			
		||||
  --bf-urlbar-font-size: 12pt;
 | 
			
		||||
  --bf-urlbar-font-weight: 500;
 | 
			
		||||
  --bf-urlbar-switch-tab-color: #57c7ff;
 | 
			
		||||
  --bf-urlbar-bookmark-color: #5af78e;
 | 
			
		||||
  
 | 
			
		||||
  --bf-navbar-padding: 6px;
 | 
			
		||||
  
 | 
			
		||||
  --bf-tab-selected-bg: #34353e88;
 | 
			
		||||
  --bf-tab-font-size: 11pt;
 | 
			
		||||
  --bf-tab-font-weight: 400;
 | 
			
		||||
  --bf-tab-height: 36px;
 | 
			
		||||
  --bf-tab-border-radius: 6px;
 | 
			
		||||
  --bf-tab-soundplaying-bg: #ff6ac1CC;
 | 
			
		||||
 | 
			
		||||
  /*--toolbar-bgcolor: transparent !important;
 | 
			
		||||
  --urlbar-separator-color: transparent !important;*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Light Mode */
 | 
			
		||||
:root:-moz-lwtheme-darktext {
 | 
			
		||||
  --bf-main-window: transparent;
 | 
			
		||||
  --bf-bg: #F2F2F266;
 | 
			
		||||
  --bf-color: #0A0A0A;
 | 
			
		||||
  
 | 
			
		||||
  --bf-hover-bg: #1A1A1A33;
 | 
			
		||||
  --bf-active-bg: #1A1A1A66;
 | 
			
		||||
  
 | 
			
		||||
  --bf-icon-color: #0A0A0A;
 | 
			
		||||
  --bf-tab-toolbar-bg: #F2F2F2AA;
 | 
			
		||||
  --bf-tab-selected-bg: #00000022;
 | 
			
		||||
  --bf-navbar-bg: var(--bf-bg);
 | 
			
		||||
  --bf-urlbar-bg: var(--bf-bg);
 | 
			
		||||
  --bf-urlbar-active-bg: var(--bf-bg);
 | 
			
		||||
  --bf-urlbar-focused-color: var(--bf-color);
 | 
			
		||||
  
 | 
			
		||||
  --bf-sidebar-bg: var(--bf-bg);
 | 
			
		||||
  --bf-sidebar-color: var(--bf-color);
 | 
			
		||||
  
 | 
			
		||||
  --bf-menupopup-bg: #F2F2F2AA;
 | 
			
		||||
  --bf-menupopup-color: var(--bf-color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Dark Mode */
 | 
			
		||||
:root:-moz-lwtheme-brighttext {
 | 
			
		||||
  --bf-main-window: transparent;
 | 
			
		||||
  --bf-bg: #282a3666;
 | 
			
		||||
  --bf-color: #e2e4e5;
 | 
			
		||||
  
 | 
			
		||||
  --bf-hover-bg: #34353e33;
 | 
			
		||||
  --bf-active-bg: #eff0eb66;
 | 
			
		||||
  
 | 
			
		||||
  --bf-icon-color: #eff0eb;
 | 
			
		||||
  --bf-tab-toolbar-bg: #282a36AA;
 | 
			
		||||
  --bf-tab-selected-bg: #e2e4e510;
 | 
			
		||||
  --bf-navbar-bg: var(--bf-bg);
 | 
			
		||||
  --bf-urlbar-bg: var(--bf-bg);
 | 
			
		||||
  --bf-urlbar-active-bg: var(--bf-bg);
 | 
			
		||||
  --bf-urlbar-focused-color: var(--bf-color);
 | 
			
		||||
  
 | 
			
		||||
  --bf-sidebar-bg: var(--bf-bg);
 | 
			
		||||
  --bf-sidebar-color: var(--bf-color);
 | 
			
		||||
  
 | 
			
		||||
  --bf-menupopup-bg: #282a36AA;
 | 
			
		||||
  --bf-menupopup-color: var(--bf-color);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,52 +1,9 @@
 | 
			
		|||
/* Example file enabling theme + some features */
 | 
			
		||||
 | 
			
		||||
/* material firefox imports */
 | 
			
		||||
 | 
			
		||||
/* @import "global/variables.css"; */
 | 
			
		||||
 | 
			
		||||
/* @import "global/global.css"; */
 | 
			
		||||
 | 
			
		||||
/* @import "icons/icons.css"; */
 | 
			
		||||
 | 
			
		||||
/* @import "tabbar/tabbar.css"; */
 | 
			
		||||
 | 
			
		||||
/* @import "navbar/navbar.css"; */
 | 
			
		||||
 | 
			
		||||
/* @import "personalbar/personalbar.css"; */
 | 
			
		||||
 | 
			
		||||
/* @import "popup/popup.css"; */
 | 
			
		||||
 | 
			
		||||
/* @import "urlbar/urlbar.css"; */
 | 
			
		||||
 | 
			
		||||
/* @import "findbar/findbar.css"; */
 | 
			
		||||
 | 
			
		||||
/*@import url(chrome/theme_color_variables.css);
 | 
			
		||||
@import url(chrome/theme_toolbars.css);
 | 
			
		||||
@import url(chrome/theme_sidebar.css);
 | 
			
		||||
@import url(chrome/theme_popups_and_menus.css);
 | 
			
		||||
@import url(chrome/theme_additional_windows.css);*/
 | 
			
		||||
 | 
			
		||||
/* @import url(chrome/status_inside_urlbar.css); */
 | 
			
		||||
 | 
			
		||||
/*@import url(chrome/navigation_buttons_inside_urlbar.css);*/
 | 
			
		||||
 | 
			
		||||
@import url(chrome/tab_close_button_always_on_hover.css);
 | 
			
		||||
 | 
			
		||||
@import url(chrome/button_effect_scale_onclick.css);
 | 
			
		||||
 | 
			
		||||
@import url(chrome/blank_page_background.css);
 | 
			
		||||
 | 
			
		||||
/* @import url(chrome/navbar_tabs_oneliner.css); */
 | 
			
		||||
 | 
			
		||||
@import url(chrome/theme_color_variables.css);
 | 
			
		||||
@import url(chrome/navbar_tabs_oneliner_tabs_on_left.css);
 | 
			
		||||
 | 
			
		||||
/* @import url(chrome/navbar_notabs.css); */
 | 
			
		||||
 | 
			
		||||
/* @import url(chrome/page_action_buttons_on_hover.css); */
 | 
			
		||||
 | 
			
		||||
@import url(chrome/autohide_sidebar.css);
 | 
			
		||||
 | 
			
		||||
@import url(chrome/menubar_in_toolbar.css);
 | 
			
		||||
 | 
			
		||||
@import url(chrome/hide_toolbox_top_bottom_borders.css);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,11 +6,11 @@ set -q XDG_DATA_HOME
 | 
			
		|||
# Load Oh My Fish configuration.
 | 
			
		||||
source $OMF_PATH/init.fish
 | 
			
		||||
 | 
			
		||||
# vi mode - off so that emacs can still be in control without having 2 vi modes
 | 
			
		||||
# fish_vi_key_bindings
 | 
			
		||||
 | 
			
		||||
# variables
 | 
			
		||||
# set -x GOPATH=$HOME/dev/go
 | 
			
		||||
# set -x PATH=$PATH:/usr/local/dev/go/bin
 | 
			
		||||
# set -x PATH=$PATH:/home/chris/.config/polybar
 | 
			
		||||
set -x PATH {/bin,/usr/bin,/home/chris/.dotfiles,/home/chris/.emacs.d/bin}
 | 
			
		||||
set -x PATH {/bin,/usr/bin,/home/chris/.dotfiles,/home/chris/.emacs.d/bin,/home/chris/scripts}
 | 
			
		||||
set -x QT_QPA_PLATFORMTHEME "qt5ct"
 | 
			
		||||
set -x EDITOR "emacsclient -a emacs"
 | 
			
		||||
set -x TERM alacritty
 | 
			
		||||
| 
						 | 
				
			
			@ -18,3 +18,4 @@ set -x TERM alacritty
 | 
			
		|||
# aliases
 | 
			
		||||
alias ls="lsd -a"
 | 
			
		||||
alias rfi="/home/chris/.dotfiles/rofi/launchers-git/launcher.sh"
 | 
			
		||||
alias scl="pkexec systemctl "
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								mpv/mpv.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								mpv/mpv.conf
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
# Use GPU-accelerated video output by default
 | 
			
		||||
vo=gpu
 | 
			
		||||
af=scaletempo2
 | 
			
		||||
speed=2
 | 
			
		||||
| 
						 | 
				
			
			@ -9,7 +9,7 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
configuration {
 | 
			
		||||
    font:                           "VictorMono Nerd Font 38.0";
 | 
			
		||||
    font:                           "VictorMono Nerd Font 22.0";
 | 
			
		||||
    show-icons:                     true;
 | 
			
		||||
	icon-theme: 					"Papirus";
 | 
			
		||||
    display-drun: 					" ";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										13
									
								
								scripts/drvid.fish
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								scripts/drvid.fish
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
#!/usr/bin/env fish
 | 
			
		||||
 | 
			
		||||
mkdir transcoded
 | 
			
		||||
for vid in *.mp4
 | 
			
		||||
    touch $vid.txt
 | 
			
		||||
    echo $vid >>$vid.txt
 | 
			
		||||
    set newvid (sed "s/\.mp4//g" $vid.txt)
 | 
			
		||||
    echo $newvid
 | 
			
		||||
    ffmpeg -i $vid -c:v dnxhd -profile:v 3 -qscale:v 9 -c:a pcm_s16le $newvid.mov
 | 
			
		||||
    mv $newvid.mov ./transcoded/$newvid.mov
 | 
			
		||||
    rm $vid.txt
 | 
			
		||||
    echo \n finished transcoding new file is in transcoded/$newvid.mov
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										15
									
								
								scripts/lbrympv.fish
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								scripts/lbrympv.fish
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
#!/usr/bin/fish
 | 
			
		||||
 | 
			
		||||
set arg (getopt -s sh : $argv)
 | 
			
		||||
set arg (fish -c "for el in $arg; echo \$el; end")
 | 
			
		||||
 | 
			
		||||
echo "arguments are: " $arg
 | 
			
		||||
 | 
			
		||||
for val in $arg
 | 
			
		||||
           if test $val = "--"
 | 
			
		||||
              echo "value in arg is: " $val
 | 
			
		||||
           else
 | 
			
		||||
              echo "value in arg is: " $val
 | 
			
		||||
              mpv -(youtube-dl (curl $arg | rg embed | sed 's/.*embed\(.*\)">.*/\1/' | cut -d '"' -f1 | awk -v prefix="https://cdn.lbryplayer.xyz/api/v2/streams/free" '{print prefix $0}'))
 | 
			
		||||
           end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										15
									
								
								scripts/lbryytdl.fish
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								scripts/lbryytdl.fish
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
#!/usr/bin/fish
 | 
			
		||||
 | 
			
		||||
set arg (getopt -s sh : $argv)
 | 
			
		||||
set arg (fish -c "for el in $arg; echo \$el; end")
 | 
			
		||||
 | 
			
		||||
echo "arguments are: " $arg
 | 
			
		||||
 | 
			
		||||
for val in $arg
 | 
			
		||||
           if test $val = "--"
 | 
			
		||||
              echo "value in arg is: " $val
 | 
			
		||||
           else
 | 
			
		||||
              echo "value in arg is: " $val
 | 
			
		||||
              youtube-dl (curl $arg | rg embed | sed 's/.*embed\(.*\)">.*/\1/' | cut -d '"' -f1 | awk -v prefix="https://cdn.lbryplayer.xyz/api/v2/streams/free" '{print prefix $0}')
 | 
			
		||||
           end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										4
									
								
								scripts/mailsync.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								scripts/mailsync.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,4 @@
 | 
			
		|||
#!/usr/bin/sh
 | 
			
		||||
 | 
			
		||||
mbsync --all
 | 
			
		||||
mu index
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +11,7 @@ set searchurls.y https://www.yewtu.be/search?q=
 | 
			
		|||
set searchurls.aw https://wiki.archlinux.org/index.php?search=
 | 
			
		||||
set searchurls.qt https://doc.qt.io/qt-5/search-results.html?q=
 | 
			
		||||
set searchurls.mel https://melpa.org/#/?q=
 | 
			
		||||
set searchurls.ser https://searx.xyz/?q=
 | 
			
		||||
set searchurls.fel https://felgo.com/search-results?q=
 | 
			
		||||
set searchurls.o https://www.office.com/search?auth=2&q=
 | 
			
		||||
set searchurls.wiki https://en.wikipedia.org/wiki/Special:Search/
 | 
			
		||||
| 
						 | 
				
			
			@ -30,12 +31,12 @@ set searchurls.amazon https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3
 | 
			
		|||
set searchurls.amazonuk https://www.amazon.co.uk/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=
 | 
			
		||||
set searchurls.startpage https://startpage.com/do/search?language=english&cat=web&query=
 | 
			
		||||
set searchurls.github https://github.com/search?utf8=✓&q=
 | 
			
		||||
set searchurls.searx https://searx.me/?category_general=on&q=
 | 
			
		||||
set searchurls.cnrtl http://www.cnrtl.fr/lexicographie/
 | 
			
		||||
set searchurls.osm https://www.openstreetmap.org/search?query=
 | 
			
		||||
set searchurls.mdn https://developer.mozilla.org/en-US/search?q=
 | 
			
		||||
set searchurls.gentoo_wiki https://wiki.gentoo.org/index.php?title=Special%3ASearch&profile=default&fulltext=Search&search=
 | 
			
		||||
set searchurls.qwant https://www.qwant.com/?q=
 | 
			
		||||
set searchengine ser
 | 
			
		||||
 | 
			
		||||
" For syntax highlighting see https://github.com/tridactyl/vim-tridactyl
 | 
			
		||||
" vim: set filetype=tridactyl
 | 
			
		||||
| 
						 | 
				
			
			@ -43,4 +44,5 @@ set searchurls.qwant https://www.qwant.com/?q=
 | 
			
		|||
 | 
			
		||||
bind v hint -W mpvsafe
 | 
			
		||||
bind gc composite get_current_url | org-capture
 | 
			
		||||
command org-capture js -p tri.excmds.shellescape(JS_ARG).then(url => tri.excmds.exclaim_quiet('org-capture ' + url))
 | 
			
		||||
bind gC hint -W org-capture
 | 
			
		||||
command org-capture js -p tri.excmds.exclaim_quiet('org-capture ' + JS_ARG)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue