Compare commits
32 Commits
7ba9a65f19
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 4b12ae2c12 | |||
| 5227e5f05e | |||
| b8098eac8b | |||
| 5b610643c7 | |||
| 4fce8c955c | |||
| eabb972cb8 | |||
| 688b94c3ad | |||
| d4689d66cd | |||
| e28e3e6207 | |||
| b45b3d60d1 | |||
| 8d2e3cea85 | |||
| 8a42f9bfa2 | |||
| 09916ae68e | |||
| 5b5fa9ad4e | |||
| 814b975533 | |||
| d0a450d4e8 | |||
| 786d5c5fe0 | |||
| 5ba2894101 | |||
| 499bf793b2 | |||
| f1c57b8ecc | |||
| 20cc042b64 | |||
| ae9dcaa074 | |||
| 21b68b1e68 | |||
| fa4929a94b | |||
| 6b4d0e22b1 | |||
| d5615892e7 | |||
| 81d0df6023 | |||
| 9cf14d3b55 | |||
| 06325b09b8 | |||
| 539ec34b4c | |||
| 00d4f101fc | |||
| c9a89cf545 |
@@ -9,10 +9,10 @@ For my neovim config, see [here](https://git.janishutz.com/janishutz/nvim)
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
I am currently working on redoing my keybinds for Hyprland, in what I call `hyprmode`:
|
I am currently working on redoing my keybinds for Hyprland, in what I call `hyprvim`:
|
||||||
They are going to use submaps and will be significantly different, yet still familiar.
|
They are going to use submaps and will be significantly different, yet still familiar.
|
||||||
This will enable me to have many more keybinds with reasonable starter bindings.
|
This will enable me to have many more keybinds with reasonable starter bindings.
|
||||||
I will also update Astal to have a mode indicator if `hyprmode` is enabled.
|
I will also update Astal to have a mode indicator if `hyprvim` is enabled.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
- Astal4 based Status Bar and Quick Actions menu
|
- Astal4 based Status Bar and Quick Actions menu
|
||||||
|
|||||||
@@ -1,24 +1,29 @@
|
|||||||
import { App } from "astal/gtk4"
|
import {
|
||||||
import style from "./style.scss"
|
App
|
||||||
import Bar from "./components/bar/Bar";
|
} from 'astal/gtk4';
|
||||||
import AstalHyprland from "gi://AstalHyprland?version=0.1";
|
import AstalHyprland from 'gi://AstalHyprland?version=0.1';
|
||||||
import { hyprToGdk } from "./util/hyprland";
|
import Bar from './components/bar/Bar';
|
||||||
import Brightness from "./util/brightness";
|
import Brightness from './util/brightness';
|
||||||
|
import {
|
||||||
|
hyprToGdk
|
||||||
|
} from './util/hyprland';
|
||||||
|
import style from './style.scss';
|
||||||
|
|
||||||
App.start( {
|
App.start( {
|
||||||
instanceName: "runner",
|
'instanceName': 'runner',
|
||||||
css: style,
|
'css': style,
|
||||||
main () {
|
main () {
|
||||||
const hypr = AstalHyprland.get_default();
|
const hypr = AstalHyprland.get_default();
|
||||||
const bars = new Map<number, string>();
|
const bars = new Map<number, string>();
|
||||||
|
|
||||||
const barCreator = ( monitor: AstalHyprland.Monitor ) => {
|
const barCreator = ( monitor: AstalHyprland.Monitor ) => {
|
||||||
const gdkMonitor = hyprToGdk( monitor );
|
const gdkMonitor = hyprToGdk( monitor );
|
||||||
|
|
||||||
if ( gdkMonitor ) {
|
if ( gdkMonitor ) {
|
||||||
print( 'Bar added for screen ' + monitor.get_id() );
|
print( 'Bar added for screen ' + monitor.get_id() );
|
||||||
bars.set( monitor.get_id(), Bar.BarLauncher( gdkMonitor ) );
|
bars.set( monitor.get_id(), Bar.BarLauncher( gdkMonitor ) );
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
for ( const monitor of hypr.monitors ) {
|
for ( const monitor of hypr.monitors ) {
|
||||||
barCreator( monitor );
|
barCreator( monitor );
|
||||||
@@ -30,14 +35,17 @@ App.start({
|
|||||||
|
|
||||||
hypr.connect( 'monitor-removed', ( _, monitor ) => {
|
hypr.connect( 'monitor-removed', ( _, monitor ) => {
|
||||||
const windowName = bars.get( monitor );
|
const windowName = bars.get( monitor );
|
||||||
|
|
||||||
if ( windowName ) {
|
if ( windowName ) {
|
||||||
const win = App.get_window( windowName );
|
const win = App.get_window( windowName );
|
||||||
|
|
||||||
if ( win ) {
|
if ( win ) {
|
||||||
App.toggle_window( windowName );
|
App.toggle_window( windowName );
|
||||||
win.set_child( null );
|
win.set_child( null );
|
||||||
App.remove_window( win );
|
App.remove_window( win );
|
||||||
print( 'Bar removed for screen', monitor );
|
print( 'Bar removed for screen', monitor );
|
||||||
}
|
}
|
||||||
|
|
||||||
bars.delete( monitor );
|
bars.delete( monitor );
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
@@ -60,6 +68,7 @@ App.start({
|
|||||||
} else if ( args[ 0 ] === 'brightness' ) {
|
} else if ( args[ 0 ] === 'brightness' ) {
|
||||||
try {
|
try {
|
||||||
const brightness = Brightness.get_default();
|
const brightness = Brightness.get_default();
|
||||||
|
|
||||||
if ( brightness.screenAvailable ) {
|
if ( brightness.screenAvailable ) {
|
||||||
if ( args[ 1 ] === 'increase' ) {
|
if ( args[ 1 ] === 'increase' ) {
|
||||||
brightness.screen += args.length > 1 ? parseInt( args[ 2 ] ) / 100 : 1;
|
brightness.screen += args.length > 1 ? parseInt( args[ 2 ] ) / 100 : 1;
|
||||||
@@ -70,12 +79,15 @@ App.start({
|
|||||||
brightness.screen = parseInt( args[ 2 ] ) / 100;
|
brightness.screen = parseInt( args[ 2 ] ) / 100;
|
||||||
} else {
|
} else {
|
||||||
res( 'Argument <brightness> unspecified' );
|
res( 'Argument <brightness> unspecified' );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
res( 'Unknown command ' + args[ 1 ] );
|
res( 'Unknown command ' + args[ 1 ] );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
res( 'Ok' );
|
res( 'Ok' );
|
||||||
} else {
|
} else {
|
||||||
res( 'No controllable screen available' );
|
res( 'No controllable screen available' );
|
||||||
@@ -99,5 +111,4 @@ App.start({
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
},
|
},
|
||||||
})
|
} );
|
||||||
|
|
||||||
|
|||||||
@@ -1,44 +1,58 @@
|
|||||||
import { Gtk } from "astal/gtk4";
|
import Audio from './modules/Audio/Audio';
|
||||||
import Power from "./modules/Power";
|
import {
|
||||||
import Audio from "./modules/Audio/Audio";
|
BatteryBox
|
||||||
import Bluetooth from "./modules/Bluetooth/Bluetooth";
|
} from './modules/Battery';
|
||||||
import Brightness from "./modules/Brightness/Brightness";
|
import Bluetooth from './modules/Bluetooth/Bluetooth';
|
||||||
import Player from "./modules/Player/Player";
|
import Brightness from './modules/Brightness/Brightness';
|
||||||
import { BatteryBox } from "./modules/Battery";
|
import {
|
||||||
import { exec } from "astal";
|
Gtk
|
||||||
import Network from "./modules/Networking/Network";
|
} from 'astal/gtk4';
|
||||||
|
import Network from './modules/Networking/Network';
|
||||||
|
import Player from './modules/Player/Player';
|
||||||
|
import Power from './modules/Power';
|
||||||
|
import SysTray from './modules/SysTray';
|
||||||
|
import {
|
||||||
|
exec
|
||||||
|
} from 'astal';
|
||||||
|
|
||||||
const QuickActions = () => {
|
const QuickActions = () => {
|
||||||
const popover = new Gtk.Popover({ cssClasses: ["quick-actions-wrapper"] });
|
const popover = new Gtk.Popover( {
|
||||||
|
'cssClasses': [ 'quick-actions-wrapper' ]
|
||||||
|
} );
|
||||||
|
|
||||||
popover.set_child( renderQuickActions() );
|
popover.set_child( renderQuickActions() );
|
||||||
|
|
||||||
return popover;
|
return popover;
|
||||||
};
|
};
|
||||||
|
|
||||||
const renderQuickActions = () => {
|
const renderQuickActions = () => {
|
||||||
const user = exec("/bin/sh -c whoami");
|
const user = exec( '/bin/sh -c whoami' );
|
||||||
const profile = exec("/bin/fish -c get-profile-picture");
|
const profile = exec( '/bin/fish -c get-profile-picture' );
|
||||||
const cwd = exec("pwd");
|
const cwd = exec( 'pwd' );
|
||||||
const um = Power.UserMenu();
|
const um = Power.UserMenu();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<box visible cssClasses={["quick-actions", "popover-box"]} vertical>
|
<box visible cssClasses={[
|
||||||
|
'quick-actions',
|
||||||
|
'popover-box'
|
||||||
|
]} vertical>
|
||||||
<centerbox
|
<centerbox
|
||||||
startWidget={
|
startWidget={
|
||||||
<button
|
<button
|
||||||
onClicked={() => um.popup()}
|
onClicked={() => um.popup()}
|
||||||
cssClasses={["stealthy-button"]}
|
cssClasses={[ 'stealthy-button' ]}
|
||||||
child={
|
child={
|
||||||
<box>
|
<box>
|
||||||
{um}
|
{um}
|
||||||
<Gtk.Frame
|
<Gtk.Frame
|
||||||
cssClasses={["avatar-icon"]}
|
cssClasses={[ 'avatar-icon' ]}
|
||||||
child={
|
child={
|
||||||
<image
|
<image
|
||||||
file={
|
file={
|
||||||
profile !== ""
|
profile !== ''
|
||||||
? profile
|
? profile
|
||||||
: cwd +
|
: cwd
|
||||||
"/no-avatar-icon.jpg"
|
+ '/no-avatar-icon.jpg'
|
||||||
}
|
}
|
||||||
></image>
|
></image>
|
||||||
}
|
}
|
||||||
@@ -53,6 +67,7 @@ const renderQuickActions = () => {
|
|||||||
hexpand={false}
|
hexpand={false}
|
||||||
>
|
>
|
||||||
<BatteryBox></BatteryBox>
|
<BatteryBox></BatteryBox>
|
||||||
|
<SysTray.SystemTray></SysTray.SystemTray>
|
||||||
<Power.Power></Power.Power>
|
<Power.Power></Power.Power>
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ const BrightnessModule = () => {
|
|||||||
const setBrightness = (value: number) => {
|
const setBrightness = (value: number) => {
|
||||||
brightness.screen = value;
|
brightness.screen = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<box visible={bind(brightness, 'screenAvailable')}>
|
<box visible={bind(brightness, 'screenAvailable')}>
|
||||||
<image iconName={"brightness-high-symbolic"}></image>
|
<image iconName={"brightness-high-symbolic"}></image>
|
||||||
|
|||||||
@@ -1,48 +1,56 @@
|
|||||||
import { exec } from "astal";
|
import {
|
||||||
import { Gtk } from "astal/gtk4";
|
exec
|
||||||
|
} from 'astal';
|
||||||
|
import {
|
||||||
|
Gtk
|
||||||
|
} from 'astal/gtk4';
|
||||||
|
|
||||||
const PowerMenu = (): Gtk.Popover => {
|
const PowerMenu = (): Gtk.Popover => {
|
||||||
const popover = new Gtk.Popover({ cssClasses: ["PowerMenu"] });
|
const popover = new Gtk.Popover( {
|
||||||
|
'cssClasses': [ 'PowerMenu' ]
|
||||||
|
} );
|
||||||
|
|
||||||
const powerMenuBox = () => {
|
const powerMenuBox = () => {
|
||||||
return (
|
return (
|
||||||
<box>
|
<box>
|
||||||
<button
|
<button
|
||||||
cssClasses={["power-button"]}
|
cssClasses={[ 'power-button' ]}
|
||||||
child={
|
child={
|
||||||
<image iconName={"system-shutdown-symbolic"}></image>
|
<image iconName={'system-shutdown-symbolic'}></image>
|
||||||
}
|
}
|
||||||
onClicked={() => exec("/bin/sh -c 'shutdown now'")}
|
onClicked={() => exec( '/bin/sh -c \'shutdown now\'' )}
|
||||||
></button>
|
></button>
|
||||||
<button
|
<button
|
||||||
cssClasses={["power-button"]}
|
cssClasses={[ 'power-button' ]}
|
||||||
child={<image iconName={"system-reboot-symbolic"}></image>}
|
child={<image iconName={'system-reboot-symbolic'}></image>}
|
||||||
onClicked={() => exec("/bin/sh -c 'reboot'")}
|
onClicked={() => exec( '/bin/sh -c \'reboot\'' )}
|
||||||
></button>
|
></button>
|
||||||
<button
|
<button
|
||||||
cssClasses={["power-button"]}
|
cssClasses={[ 'power-button' ]}
|
||||||
child={<image iconName={"system-suspend-symbolic"}></image>}
|
child={<image iconName={'system-suspend-symbolic'}></image>}
|
||||||
onClicked={() => exec("/bin/sh -c 'systemctl suspend'")}
|
onClicked={() => exec( '/bin/sh -c \'systemctl suspend\'' )}
|
||||||
></button>
|
></button>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
popover.set_child( powerMenuBox() );
|
popover.set_child( powerMenuBox() );
|
||||||
|
|
||||||
return popover;
|
return popover;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Power = () => {
|
const Power = () => {
|
||||||
const pm = PowerMenu();
|
const pm = PowerMenu();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
widthRequest={0}
|
widthRequest={0}
|
||||||
hexpand={false}
|
hexpand={false}
|
||||||
vexpand={false}
|
vexpand={false}
|
||||||
cssClasses={["power-menu-button"]}
|
cssClasses={[ 'power-menu-button' ]}
|
||||||
child={
|
child={
|
||||||
<box>
|
<box>
|
||||||
<image iconName={"system-shutdown-symbolic"}></image>
|
<image iconName={'system-shutdown-symbolic'}></image>
|
||||||
{pm}
|
{pm}
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
@@ -58,17 +66,16 @@ const UserMenu = (): Gtk.Popover => {
|
|||||||
return (
|
return (
|
||||||
<box>
|
<box>
|
||||||
<button
|
<button
|
||||||
cssClasses={["power-button"]}
|
cssClasses={[ 'power-button' ]}
|
||||||
child={
|
child={
|
||||||
<image iconName={"system-lock-screen-symbolic"}></image>
|
<image iconName={'system-lock-screen-symbolic'}></image>
|
||||||
}
|
}
|
||||||
onClicked={() => exec("/bin/sh -c 'hyprlock'")}
|
onClicked={() => exec( '/bin/sh -c \'hyprlock\'' )}
|
||||||
></button>
|
></button>
|
||||||
<button
|
<button
|
||||||
cssClasses={["power-button"]}
|
cssClasses={[ 'power-button' ]}
|
||||||
child={<image iconName={"system-log-out-symbolic"}></image>}
|
child={<image iconName={'system-log-out-symbolic'}></image>}
|
||||||
onClicked={() =>
|
onClicked={() => exec( '/bin/sh -c \'hyprctl dispatch exit 0\'' )
|
||||||
exec("/bin/sh -c 'hyprctl dispatch exit 0'")
|
|
||||||
}
|
}
|
||||||
></button>
|
></button>
|
||||||
</box>
|
</box>
|
||||||
@@ -76,6 +83,7 @@ const UserMenu = (): Gtk.Popover => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
popover.set_child( powerMenuBox() );
|
popover.set_child( powerMenuBox() );
|
||||||
|
|
||||||
return popover;
|
return popover;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
88
config/astal/components/QuickActions/modules/SysTray.tsx
Normal file
88
config/astal/components/QuickActions/modules/SysTray.tsx
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
import AstalTray from 'gi://AstalTray';
|
||||||
|
import {
|
||||||
|
GObject
|
||||||
|
} from 'astal';
|
||||||
|
import {
|
||||||
|
Gtk
|
||||||
|
} from 'astal/gtk4';
|
||||||
|
|
||||||
|
const SYNC = GObject.BindingFlags.SYNC_CREATE;
|
||||||
|
|
||||||
|
const SysTray = () => {
|
||||||
|
const trayBox = new Gtk.Box( {
|
||||||
|
'cssClasses': [ '' ]
|
||||||
|
} );
|
||||||
|
const tray = AstalTray.get_default();
|
||||||
|
const trayItems = new Map<string, Gtk.MenuButton>();
|
||||||
|
const trayAddedHandler = tray.connect( 'item-added', ( _, id ) => {
|
||||||
|
const item = tray.get_item( id );
|
||||||
|
const popover = Gtk.PopoverMenu.new_from_model( item.menu_model );
|
||||||
|
const icon = new Gtk.Image();
|
||||||
|
const button = new Gtk.MenuButton( {
|
||||||
|
popover,
|
||||||
|
'child': icon,
|
||||||
|
'cssClasses': [ 'tray-item' ],
|
||||||
|
} );
|
||||||
|
|
||||||
|
item.bind_property(
|
||||||
|
'gicon', icon, 'gicon', SYNC
|
||||||
|
);
|
||||||
|
popover.insert_action_group( 'dbusmenu', item.action_group );
|
||||||
|
item.connect( 'notify::action-group', () => {
|
||||||
|
popover.insert_action_group( 'dbusmenu', item.action_group );
|
||||||
|
} );
|
||||||
|
|
||||||
|
trayItems.set( id, button );
|
||||||
|
trayBox.append( button );
|
||||||
|
} );
|
||||||
|
const trayRemovedHandler = tray.connect( 'item-removed', ( _, id ) => {
|
||||||
|
const button = trayItems.get( id );
|
||||||
|
|
||||||
|
if ( button ) {
|
||||||
|
trayBox.remove( button );
|
||||||
|
button.run_dispose();
|
||||||
|
trayItems.delete( id );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
trayBox.connect( 'destroy', () => {
|
||||||
|
tray.disconnect( trayAddedHandler );
|
||||||
|
tray.disconnect( trayRemovedHandler );
|
||||||
|
} );
|
||||||
|
|
||||||
|
return trayBox;
|
||||||
|
};
|
||||||
|
|
||||||
|
const TrayPopover = () => {
|
||||||
|
const popover = new Gtk.Popover( {
|
||||||
|
'cssClasses': [ 'TrayPopover' ]
|
||||||
|
} );
|
||||||
|
|
||||||
|
popover.set_child( SysTray() );
|
||||||
|
|
||||||
|
return popover;
|
||||||
|
};
|
||||||
|
|
||||||
|
const SystemTray = () => {
|
||||||
|
const systray = TrayPopover();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<button
|
||||||
|
widthRequest={0}
|
||||||
|
hexpand={false}
|
||||||
|
vexpand={false}
|
||||||
|
cssClasses={[ 'power-menu-button' ]}
|
||||||
|
child={
|
||||||
|
<box>
|
||||||
|
<image iconName={'systemtray'}></image>
|
||||||
|
{systray}
|
||||||
|
</box>
|
||||||
|
}
|
||||||
|
onClicked={() => systray.popup()}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default {
|
||||||
|
SystemTray
|
||||||
|
};
|
||||||
@@ -39,7 +39,6 @@ const Bar = ( {
|
|||||||
>
|
>
|
||||||
<Hyprland.ModeStatus />
|
<Hyprland.ModeStatus />
|
||||||
<Calendar.Time />
|
<Calendar.Time />
|
||||||
<SystemInfo.SystemInfo />
|
|
||||||
<Hyprland.Workspace />
|
<Hyprland.Workspace />
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
@@ -50,7 +49,7 @@ const Bar = ( {
|
|||||||
halign={Gtk.Align.END}
|
halign={Gtk.Align.END}
|
||||||
cssClasses={[ 'BarRight' ]}
|
cssClasses={[ 'BarRight' ]}
|
||||||
>
|
>
|
||||||
<Hyprland.SysTray />
|
<SystemInfo.SystemInfo />
|
||||||
<QuickView.QuickView />
|
<QuickView.QuickView />
|
||||||
</box>
|
</box>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,11 @@ window.Bar {
|
|||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
font-family: $monospace-font;
|
font-family: $monospace-font;
|
||||||
|
|
||||||
|
&.command-mode {
|
||||||
|
background-color: darkslategray;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
&.windowing-mode {
|
&.windowing-mode {
|
||||||
background-color: darkslategray;
|
background-color: darkslategray;
|
||||||
color: white;
|
color: white;
|
||||||
|
|||||||
@@ -1,62 +1,15 @@
|
|||||||
import {
|
import {
|
||||||
GObject, bind,
|
bind,
|
||||||
exec,
|
exec,
|
||||||
readFile
|
readFile
|
||||||
} from 'astal';
|
} from 'astal';
|
||||||
import AstalHyprland from 'gi://AstalHyprland';
|
import AstalHyprland from 'gi://AstalHyprland';
|
||||||
import AstalTray from 'gi://AstalTray';
|
|
||||||
import {
|
import {
|
||||||
Gtk
|
Gtk
|
||||||
} from 'astal/gtk4';
|
} from 'astal/gtk4';
|
||||||
import Pango from 'gi://Pango?version=1.0';
|
import Pango from 'gi://Pango?version=1.0';
|
||||||
|
|
||||||
const hypr = AstalHyprland.get_default();
|
const hypr = AstalHyprland.get_default();
|
||||||
const SYNC = GObject.BindingFlags.SYNC_CREATE;
|
|
||||||
|
|
||||||
const SysTray = () => {
|
|
||||||
const trayBox = new Gtk.Box( {
|
|
||||||
'cssClasses': [ 'bar-button' ]
|
|
||||||
} );
|
|
||||||
const tray = AstalTray.get_default();
|
|
||||||
const trayItems = new Map<string, Gtk.MenuButton>();
|
|
||||||
const trayAddedHandler = tray.connect( 'item-added', ( _, id ) => {
|
|
||||||
const item = tray.get_item( id );
|
|
||||||
const popover = Gtk.PopoverMenu.new_from_model( item.menu_model );
|
|
||||||
const icon = new Gtk.Image();
|
|
||||||
const button = new Gtk.MenuButton( {
|
|
||||||
popover,
|
|
||||||
'child': icon,
|
|
||||||
'cssClasses': [ 'tray-item' ],
|
|
||||||
} );
|
|
||||||
|
|
||||||
item.bind_property(
|
|
||||||
'gicon', icon, 'gicon', SYNC
|
|
||||||
);
|
|
||||||
popover.insert_action_group( 'dbusmenu', item.action_group );
|
|
||||||
item.connect( 'notify::action-group', () => {
|
|
||||||
popover.insert_action_group( 'dbusmenu', item.action_group );
|
|
||||||
} );
|
|
||||||
|
|
||||||
trayItems.set( id, button );
|
|
||||||
trayBox.append( button );
|
|
||||||
} );
|
|
||||||
const trayRemovedHandler = tray.connect( 'item-removed', ( _, id ) => {
|
|
||||||
const button = trayItems.get( id );
|
|
||||||
|
|
||||||
if ( button ) {
|
|
||||||
trayBox.remove( button );
|
|
||||||
button.run_dispose();
|
|
||||||
trayItems.delete( id );
|
|
||||||
}
|
|
||||||
} );
|
|
||||||
|
|
||||||
trayBox.connect( 'destroy', () => {
|
|
||||||
tray.disconnect( trayAddedHandler );
|
|
||||||
tray.disconnect( trayRemovedHandler );
|
|
||||||
} );
|
|
||||||
|
|
||||||
return trayBox;
|
|
||||||
};
|
|
||||||
|
|
||||||
const Workspace = () => {
|
const Workspace = () => {
|
||||||
return (
|
return (
|
||||||
@@ -123,33 +76,33 @@ const ActiveWindow = () => {
|
|||||||
type submaps = 'device' | 'launch' | 'workspace' | 'windowing' | 'screenshotting' | 'notifications' | '';
|
type submaps = 'device' | 'launch' | 'workspace' | 'windowing' | 'screenshotting' | 'notifications' | '';
|
||||||
|
|
||||||
const ModeStatus = () => {
|
const ModeStatus = () => {
|
||||||
let isUsingHyprmode = false;
|
let isUsingHyprvim = false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const path = exec( 'bash -c "cd ~ && pwd"' ) + '/.config/hyprmode';
|
const path = exec( 'bash -c "cd ~ && pwd"' ) + '/.config/hyprvim';
|
||||||
|
|
||||||
isUsingHyprmode = readFile( path ).trim() === 'y';
|
isUsingHyprvim = readFile( path ).trim() === 'y';
|
||||||
} catch ( e ) {
|
} catch ( e ) {
|
||||||
printerr( 'Failed to read hyprmode config', e );
|
printerr( 'Failed to read hyprvim config', e );
|
||||||
}
|
}
|
||||||
|
|
||||||
const label = new Gtk.Label();
|
const label = new Gtk.Label();
|
||||||
|
|
||||||
if ( !isUsingHyprmode ) return label;
|
if ( !isUsingHyprvim ) return label;
|
||||||
|
|
||||||
print( '==> Using hyprmode config' );
|
print( '==> Using hyprvim config' );
|
||||||
|
|
||||||
const map = {
|
const map = {
|
||||||
'device': 'D',
|
'device': 'DEV',
|
||||||
'launch': 'L',
|
'launch': 'LNC',
|
||||||
'workspace': 'W',
|
'workspace': 'WSP',
|
||||||
'windowing': 'M',
|
'windowing': 'WIN',
|
||||||
'screenshotting': 'S',
|
'screenshotting': 'SCS',
|
||||||
'notifications': 'N',
|
'notifications': 'NOT',
|
||||||
'': 'N'
|
'': 'NRM'
|
||||||
};
|
};
|
||||||
|
|
||||||
label.label = 'N';
|
label.label = map[''];
|
||||||
label.cssClasses = [ 'mode-status' ];
|
label.cssClasses = [ 'mode-status' ];
|
||||||
|
|
||||||
// TODO: Possibly add popover to it that lists binds
|
// TODO: Possibly add popover to it that lists binds
|
||||||
@@ -189,6 +142,5 @@ const WindowPopoverBox = () => {
|
|||||||
export default {
|
export default {
|
||||||
Workspace,
|
Workspace,
|
||||||
ActiveWindow,
|
ActiveWindow,
|
||||||
SysTray,
|
|
||||||
ModeStatus
|
ModeStatus
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ alias ff='fastfetch'
|
|||||||
alias p='nvimpager -p'
|
alias p='nvimpager -p'
|
||||||
alias latexdocs='zathura ~/projects/latex/docs/docs.pdf &>> /dev/null & disown'
|
alias latexdocs='zathura ~/projects/latex/docs/docs.pdf &>> /dev/null & disown'
|
||||||
alias gccerr='gcc -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes -std=c99'
|
alias gccerr='gcc -Wall -Wextra -Wpedantic -Werror -Wmissing-prototypes -std=c99'
|
||||||
|
alias linecount='cloc --vcs git .'
|
||||||
|
|
||||||
# Add scripts in ~/projects/dotfiles/scripts/ to path
|
# Add scripts in ~/projects/dotfiles/scripts/ to path
|
||||||
fish_add_path -P ~/projects/dotfiles/scripts/
|
fish_add_path -P ~/projects/dotfiles/scripts/
|
||||||
|
|||||||
@@ -9,21 +9,18 @@ exec-once = ~/.config/hypr/xdg-portal-hyprland
|
|||||||
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XAUTHORITY DISPLAY
|
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XAUTHORITY DISPLAY
|
||||||
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
|
||||||
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
||||||
# exec-once = waybar
|
|
||||||
exec-once = hypridle
|
exec-once = hypridle
|
||||||
exec-once = nm-applet
|
exec-once = nm-applet
|
||||||
exec-once = nextcloud --background
|
exec-once = nextcloud --background
|
||||||
exec-once = sleep 2 && bash -c "ags run -d ~/projects/dotfiles/config/astal/ --gtk 4 >> /tmp/runner-log 2>&1"
|
exec-once = sleep 2 && bash -c "ags run -d ~/projects/dotfiles/config/astal/ --gtk 4 >> /tmp/runner-log 2>&1"
|
||||||
# exec-once = sleep 2 && bash -c "ags run -d ~/projects/active/dotfiles/config/astal/ --gtk4"
|
exec-once = bash -c "ags run -d ~/projects/dotfiles/config/ags/notifications/ --gtk 3 >> /tmp/notifier-log 2>&1"
|
||||||
exec-once = bash -c "ags run -d ~/projects/dotfiles/config/ags/notifications/ >> /tmp/notifier-log 2>&1"
|
|
||||||
# exec-once = bash -c "ags run -d ~/projects/active/dotfiles/config/ags/notifications/"
|
|
||||||
|
|
||||||
# ── wlhist ──────────────────────────────────────────────────────────
|
# ── wlhist ──────────────────────────────────────────────────────────
|
||||||
exec-once = wl-paste --type text --watch cliphist store # Stores only text data
|
exec-once = wl-paste --type text --watch cliphist store # Stores only text data
|
||||||
exec-once = wl-paste --type image --watch cliphist store # Stores only image data
|
exec-once = wl-paste --type image --watch cliphist store # Stores only image data
|
||||||
|
|
||||||
|
|
||||||
exec = hyprctl setcursor oreo_spark_blue_cursors 24
|
|
||||||
env = QT_QPA_PLATFORM,wayland
|
env = QT_QPA_PLATFORM,wayland
|
||||||
env = QT_QPA_PLATFORM_THEME,qt6ct
|
env = QT_QPA_PLATFORM_THEME,qt6ct
|
||||||
env = OLLAMA_HOST,0.0.0.0
|
env = OLLAMA_HOST,0.0.0.0
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Hyprmode
|
# hyprvim
|
||||||
Using Vim Motions and in general vim-style commands is really neat - so why not apply to the Window Manager as well?
|
Using Vim Motions and in general vim-style commands is really neat - so why not apply to the Window Manager as well?
|
||||||
|
|
||||||
## Mapping
|
## Mapping
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ bind = $mainMod, D, submap, device
|
|||||||
submap = device
|
submap = device
|
||||||
|
|
||||||
|
|
||||||
|
# ── Swapescape ──────────────────────────────────────────────────────
|
||||||
|
bind = , S, exec, fish -c "toggle-swapescape"
|
||||||
|
bind = , S, submap, reset
|
||||||
|
|
||||||
|
|
||||||
# ── FPV goggles binds ───────────────────────────────────────────────
|
# ── FPV goggles binds ───────────────────────────────────────────────
|
||||||
bind = CTRL, D, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 1920x0, 1, mirror, DP-1 && notify-send 'Set FPV goggles to mirror main screen' --app-name="Hyprctl"
|
bind = CTRL, D, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 1920x0, 1, mirror, DP-1 && notify-send 'Set FPV goggles to mirror main screen' --app-name="Hyprctl"
|
||||||
bind = CTRL, E, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 3840x0, 1 && notify-send 'Set to expand FPV goggles' --app-name="Hyprctl"
|
bind = CTRL, E, exec, hyprctl keyword monitor HDMI-A-1, 1280x720@60, 3840x0, 1 && notify-send 'Set to expand FPV goggles' --app-name="Hyprctl"
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
# ╭────────────────────────────────────────────────╮
|
# ╭────────────────────────────────────────────────╮
|
||||||
# │ App launching │
|
# │ App launching │
|
||||||
# ╰────────────────────────────────────────────────╯
|
# ╰────────────────────────────────────────────────╯
|
||||||
bind = $mainMod SHIFT, L, exec, librewolf
|
|
||||||
bind = $mainMod SHIFT, D, exec, vesktop
|
|
||||||
bind = $mainMod SHIFT, Z, exec, zathura
|
|
||||||
bind = $mainMod, Return, exec, kitty
|
bind = $mainMod, Return, exec, kitty
|
||||||
|
|
||||||
|
|
||||||
@@ -43,6 +40,12 @@ bind = , E, submap, reset
|
|||||||
bind = , D, exec, vesktop
|
bind = , D, exec, vesktop
|
||||||
bind = , D, submap, reset
|
bind = , D, submap, reset
|
||||||
|
|
||||||
|
bind = SHIFT, B, exec, brave
|
||||||
|
bind = SHIFT, B, submap, reset
|
||||||
|
|
||||||
|
bind = , F, exec, filezilla
|
||||||
|
bind = , F, submap, reset
|
||||||
|
|
||||||
bind = , V, exec, vscodium
|
bind = , V, exec, vscodium
|
||||||
bind = , V, submap, reset
|
bind = , V, submap, reset
|
||||||
|
|
||||||
@@ -55,6 +58,12 @@ bind = , H, submap, reset
|
|||||||
bind = , Z, exec, zathura
|
bind = , Z, exec, zathura
|
||||||
bind = , Z, submap, reset
|
bind = , Z, submap, reset
|
||||||
|
|
||||||
|
bind = , B, exec, /opt/bs-manager/bs-manager
|
||||||
|
bind = , B, submap, reset
|
||||||
|
|
||||||
|
bind = , P, exec, alvr_dashboard
|
||||||
|
bind = , P, submap, reset
|
||||||
|
|
||||||
bind = , A, exec, notify-send 'AirPlay server starting...' --app-name="AirPlay Audio" && terminator -T "hidden-terminator" -e "systemctl start avahi-daemon && shairport-sync -a LinuxPlay"
|
bind = , A, exec, notify-send 'AirPlay server starting...' --app-name="AirPlay Audio" && terminator -T "hidden-terminator" -e "systemctl start avahi-daemon && shairport-sync -a LinuxPlay"
|
||||||
bind = , A, submap, reset
|
bind = , A, submap, reset
|
||||||
|
|
||||||
|
|||||||
@@ -9,10 +9,19 @@ submap = notifications
|
|||||||
|
|
||||||
|
|
||||||
bind = , T, exec, astal -i notifier toggle
|
bind = , T, exec, astal -i notifier toggle
|
||||||
|
bind = , T, submap, reset
|
||||||
|
|
||||||
bind = , D, exec, astal -i notifier clear-newest
|
bind = , D, exec, astal -i notifier clear-newest
|
||||||
|
bind = , D, submap, reset
|
||||||
|
|
||||||
bind = , C, exec, astal -i notifier clear
|
bind = , C, exec, astal -i notifier clear
|
||||||
|
bind = , C, submap, reset
|
||||||
|
|
||||||
bind = , S, exec, astal -i notifier show
|
bind = , S, exec, astal -i notifier show
|
||||||
|
bind = , S, submap, reset
|
||||||
|
|
||||||
bind = , H, exec, astal -i notifier hide
|
bind = , H, exec, astal -i notifier hide
|
||||||
|
bind = , H, submap, reset
|
||||||
|
|
||||||
|
|
||||||
# ── Exit submap ─────────────────────────────────────────────────────
|
# ── Exit submap ─────────────────────────────────────────────────────
|
||||||
|
|||||||
@@ -6,11 +6,17 @@ bind = $mainMod, S, submap, screenshotting
|
|||||||
submap = screenshotting
|
submap = screenshotting
|
||||||
|
|
||||||
bind = , Y, exec, grimblast --notify copy area
|
bind = , Y, exec, grimblast --notify copy area
|
||||||
|
bind = , Y, submap, reset
|
||||||
bind = , C, exec, grimblast --notify copysave area
|
bind = , C, exec, grimblast --notify copysave area
|
||||||
|
bind = , C, submap, reset
|
||||||
bind = , S, exec, grimblast --notify save area
|
bind = , S, exec, grimblast --notify save area
|
||||||
|
bind = , S, submap, reset
|
||||||
bind = SHIFT, Y, exec, grimblast --notify copy screen
|
bind = SHIFT, Y, exec, grimblast --notify copy screen
|
||||||
|
bind = SHIFT, Y, submap, reset
|
||||||
bind = SHIFT, C, exec, grimblast --notify copysave screen
|
bind = SHIFT, C, exec, grimblast --notify copysave screen
|
||||||
|
bind = SHIFT, C, submap, reset
|
||||||
bind = SHIFT, S, exec, grimblast --notify save screen
|
bind = SHIFT, S, exec, grimblast --notify save screen
|
||||||
|
bind = SHIFT, S, submap, reset
|
||||||
|
|
||||||
|
|
||||||
# ── Exit submap ─────────────────────────────────────────────────────
|
# ── Exit submap ─────────────────────────────────────────────────────
|
||||||
|
|||||||
@@ -1,17 +1,3 @@
|
|||||||
# ────────────────────────────────────────────────────────────────────
|
|
||||||
# ╭────────────────────────────────────────────────╮
|
|
||||||
# │ WORKSPACE RULES │
|
|
||||||
# ╰────────────────────────────────────────────────╯
|
|
||||||
# ────────────────────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
# Display full sized (without gaps), if only window on screen
|
|
||||||
# workspace = w[tv1], gapsout:0, gapsin:0
|
|
||||||
# workspace = f[1], gapsout:0, gapsin:0
|
|
||||||
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
|
|
||||||
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
|
|
||||||
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
|
|
||||||
# windowrule = rounding 0, floating:0, onworkspace:f[1]
|
|
||||||
|
|
||||||
$mainMod = SUPER
|
$mainMod = SUPER
|
||||||
|
|
||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
@@ -19,16 +5,20 @@ $mainMod = SUPER
|
|||||||
# │ WINDOW RULES │
|
# │ WINDOW RULES │
|
||||||
# ╰────────────────────────────────────────────────╯
|
# ╰────────────────────────────────────────────────╯
|
||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
windowrule = move 1450 50, title:^(.*)(Power menu)$
|
windowrule = move 1450 50, title:(.*)Power menu$
|
||||||
windowrule = workspace 2, class:evince
|
windowrule = workspace 2, class:evince
|
||||||
windowrule = workspace 2, title:.*(Okular).*
|
windowrule = workspace 2, title:.*Okular.*
|
||||||
windowrule = workspace 2, class:org.pwmt.zathura
|
windowrule = workspace 2, class:org.pwmt.zathura
|
||||||
windowrule = fullscreen, title:wlogout
|
windowrule = fullscreen, title:wlogout
|
||||||
windowrule = workspace 2, class:librewolf
|
windowrule = workspace 2, class:librewolf
|
||||||
windowrule = workspace 2, title:LibreWolf
|
windowrule = workspace 2, title:LibreWolf
|
||||||
windowrule = workspace 2, title:(.*)(Discord)(.*)
|
windowrule = workspace 2, title:BSManager
|
||||||
|
windowrule = workspace 1, title:ALVR(.*)
|
||||||
|
windowrule = workspace 2, title:(.*)Beat Saber(.*)
|
||||||
|
windowrule = fullscreen, title:(.*)Beat Saber(.*)
|
||||||
|
windowrule = workspace 2, title:(.*)Discord(.*)
|
||||||
windowrule = workspace 3, title:^(Steam)(.*)$
|
windowrule = workspace 3, title:^(Steam)(.*)$
|
||||||
windowrule = workspace 1, title:^(.*)(VSCodium)$
|
windowrule = workspace 1, title:(.*)(VSCodium)$
|
||||||
windowrule = center, title:^(.*)(VSCodium)$
|
windowrule = center, title:^(.*)(VSCodium)$
|
||||||
windowrule = workspace 3, class:minecraft-launcher
|
windowrule = workspace 3, class:minecraft-launcher
|
||||||
windowrule = tile, class:minecraft-launcher
|
windowrule = tile, class:minecraft-launcher
|
||||||
@@ -46,6 +36,7 @@ windowrule = float, title:^(.*)hidden-terminator*(.*)$
|
|||||||
windowrule = float, title:^(.*)termfilechooser*(.*)$
|
windowrule = float, title:^(.*)termfilechooser*(.*)$
|
||||||
windowrule = size 1400 800, title:^(.*)termfilechooser*(.*)$
|
windowrule = size 1400 800, title:^(.*)termfilechooser*(.*)$
|
||||||
windowrule = center, title:^(.*)termfilechooser*(.*)$
|
windowrule = center, title:^(.*)termfilechooser*(.*)$
|
||||||
|
windowrule = dimaround, title:^(.*)termfilechooser*(.*)$
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ Set floating windows & position them centered │
|
# │ Set floating windows & position them centered │
|
||||||
@@ -107,6 +98,7 @@ windowrule = center, class:pavucontrol
|
|||||||
windowrule = float, class:file-roller
|
windowrule = float, class:file-roller
|
||||||
windowrule = center, class:file-roller
|
windowrule = center, class:file-roller
|
||||||
|
|
||||||
|
# idleinhibit
|
||||||
windowrule = idleinhibit focus, title:^(Rocket League)(.*)$
|
windowrule = idleinhibit focus, title:^(Rocket League)(.*)$
|
||||||
windowrule = fullscreen, title:^(Steam Big Picture)$
|
windowrule = fullscreen, title:^(Steam Big Picture)$
|
||||||
windowrule = idleinhibit always, class:steam
|
windowrule = idleinhibit always, class:steam
|
||||||
@@ -116,6 +108,12 @@ windowrule = idleinhibit focus, class:supertuxkart
|
|||||||
windowrule = idleinhibit fullscreen, title:^(.*)(Discord)(.*)$
|
windowrule = idleinhibit fullscreen, title:^(.*)(Discord)(.*)$
|
||||||
windowrule = idleinhibit fullscreen, title:^(.*)(~)(.*)$
|
windowrule = idleinhibit fullscreen, title:^(.*)(~)(.*)$
|
||||||
|
|
||||||
|
# Do not screenshare bitwarden windows
|
||||||
|
windowrule = noscreenshare, title:(.*)(Bitwarden)(.*)
|
||||||
|
windowrule = noscreenshare, class:nm-connection-editor
|
||||||
|
windowrule = noscreenshare, title:(.*)(secret)(.*)
|
||||||
|
windowrule = noscreenshare, class:(.*)[aA]uthentication(.*)
|
||||||
|
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ Layer rules │
|
# │ Layer rules │
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
monitor=DP-1, 1920x1080@144, 0x0, 1, vrr, 2
|
monitor=DP-1, 1920x1080@144, 0x0, 1, vrr, 2
|
||||||
monitor=DP-2, 1920x1080@75, 1920x0, 1
|
monitor=DP-2, 1920x1080@75, 1920x0, 1
|
||||||
|
|
||||||
|
exec = hyprctl setcursor oreo_spark_blue_cursors 24
|
||||||
|
|
||||||
source=./hyprland/binds.conf
|
source=./hyprland/binds.conf
|
||||||
source=./hyprland/general.conf
|
source=./hyprland/general.conf
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ source=./hyprland/windowrules.conf
|
|||||||
exec = hyprctl setcursor oreo_spark_blue_cursors 36
|
exec = hyprctl setcursor oreo_spark_blue_cursors 36
|
||||||
env = HYPRCURSOR_THEME, Oreo_spark_blue_cursor
|
env = HYPRCURSOR_THEME, Oreo_spark_blue_cursor
|
||||||
env = X_CURSOR_THEME, Oreo_spark_blue_cursor
|
env = X_CURSOR_THEME, Oreo_spark_blue_cursor
|
||||||
env = XCURSOR_SIZE, 24
|
env = XCURSOR_SIZE, 36
|
||||||
env = ELECTRON_ENABLE_HIGHDPI_SUPPORT, 1
|
env = ELECTRON_ENABLE_HIGHDPI_SUPPORT, 1
|
||||||
env = XDG_SESSION_TYPE, wayland
|
env = XDG_SESSION_TYPE, wayland
|
||||||
env = QT_QPA_PLATFORM, wayland
|
env = QT_QPA_PLATFORM, wayland
|
||||||
|
|||||||
@@ -29,3 +29,8 @@ url_prefixes file ftp ftps gemini git gopher http https irc ircs kitty mailto ne
|
|||||||
detect_urls yes
|
detect_urls yes
|
||||||
show_hyperlink_targets yes
|
show_hyperlink_targets yes
|
||||||
include current-theme.conf
|
include current-theme.conf
|
||||||
|
|
||||||
|
# ┌ ┐
|
||||||
|
# │ Mappings │
|
||||||
|
# └ ┘
|
||||||
|
map kitty_mod+e
|
||||||
|
|||||||
@@ -4,6 +4,12 @@ defaultIndent: " "
|
|||||||
# Limit Number of backups
|
# Limit Number of backups
|
||||||
maxNumberOfBackups: 3
|
maxNumberOfBackups: 3
|
||||||
|
|
||||||
|
verbatimEnvironments:
|
||||||
|
verbatim: 1
|
||||||
|
lstlisting: 1
|
||||||
|
minted: 1
|
||||||
|
code: 1
|
||||||
|
|
||||||
indentRules:
|
indentRules:
|
||||||
recall: " "
|
recall: " "
|
||||||
remarks: " "
|
remarks: " "
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
[flavor]
|
[flavor]
|
||||||
use = "tokyo-night"
|
dark = "tokyo-night"
|
||||||
|
light = "tokyo-night"
|
||||||
|
|||||||
3
install
3
install
@@ -84,7 +84,7 @@ echo "
|
|||||||
==> Installing other utilities...
|
==> Installing other utilities...
|
||||||
"
|
"
|
||||||
sleep 2
|
sleep 2
|
||||||
yay -S --noconfirm --noremovemake okular vlc nextcloud-client p7zip zip unzip noto-fonts pavucontrol light fastfetch bashtop hugo uxplay upower gdu dig nwg-look serpl fcitx5 qalculate-gtk openconnect light blueman xdg-desktop-portal-termfilechooser-hunkyburrito-git lazygit tldr
|
yay -S --noconfirm --noremovemake okular vlc nextcloud-client p7zip zip unzip noto-fonts pavucontrol light fastfetch bashtop hugo uxplay upower gdu dig nwg-look serpl fcitx5 qalculate-gtk openconnect light blueman xdg-desktop-portal-termfilechooser-hunkyburrito-git lazygit tldr cloc usbutils bluez-utils bluez
|
||||||
|
|
||||||
# LaTeX
|
# LaTeX
|
||||||
echo "
|
echo "
|
||||||
@@ -128,6 +128,7 @@ cd nvim
|
|||||||
xdg-settings set default-web-browser librewolf.desktop
|
xdg-settings set default-web-browser librewolf.desktop
|
||||||
xdg-mime default org.pwmt.zathura.desktop application/pdf
|
xdg-mime default org.pwmt.zathura.desktop application/pdf
|
||||||
sudo systemctl disable rustdesk
|
sudo systemctl disable rustdesk
|
||||||
|
sudo systemctl enable --now systemd-timesyncd
|
||||||
hyprpm update
|
hyprpm update
|
||||||
|
|
||||||
git-credential-manager configure
|
git-credential-manager configure
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
[flavor]
|
[flavor]
|
||||||
use = "{{ yazi-theme }}"
|
dark = "{{ yazi-theme }}"
|
||||||
|
light = "{{ yazi-theme }}"
|
||||||
|
|||||||
14
scripts/convert-to-mp4
Executable file
14
scripts/convert-to-mp4
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
extension="out"
|
||||||
|
read -p "Pick extension to convert from: " extension
|
||||||
|
outfolder="out"
|
||||||
|
outext="mp4"
|
||||||
|
read -p "Output folder: " outfolder
|
||||||
|
read -p "Output extension: " outext
|
||||||
|
|
||||||
|
mkdir $outfolder
|
||||||
|
for file in *.$extension; do
|
||||||
|
ffmpeg -i "$file" "$outfolder/${file%.$extension}.$outext"
|
||||||
|
echo "\n\n==> Conversion complete\n\n"
|
||||||
|
done
|
||||||
@@ -2,11 +2,18 @@
|
|||||||
|
|
||||||
connect() {
|
connect() {
|
||||||
read -sp $'Please enter your Encryption Password: ' encpass
|
read -sp $'Please enter your Encryption Password: ' encpass
|
||||||
echo " ==> Connecting"
|
echo "
|
||||||
|
==> Connecting"
|
||||||
TOKEN=$(cat ~/.local/share/ethz-vpn-connect/ethzvpntoken.secret | openssl enc -aes-256-cbc -pbkdf2 -d -a -k $encpass)
|
TOKEN=$(cat ~/.local/share/ethz-vpn-connect/ethzvpntoken.secret | openssl enc -aes-256-cbc -pbkdf2 -d -a -k $encpass)
|
||||||
PASSWORD=$(cat ~/.local/share/ethz-vpn-connect/ethzvpnpass.secret | openssl enc -aes-256-cbc -pbkdf2 -d -a -k $encpass)
|
PASSWORD=$(cat ~/.local/share/ethz-vpn-connect/ethzvpnpass.secret | openssl enc -aes-256-cbc -pbkdf2 -d -a -k $encpass)
|
||||||
USERNAME=$(cat ~/.local/share/ethz-vpn-connect/ethzvpnusername.txt)
|
USERNAME=$(cat ~/.local/share/ethz-vpn-connect/ethzvpnusername.txt)
|
||||||
echo $PASSWORD | sudo openconnect -b -u $USERNAME@student-net.ethz.ch -g student-net --useragent=AnyConnect --passwd-on-stdin --token-mode=totp --token-secret=sha1:base32:$TOKEN sslvpn.ethz.ch
|
echo $PASSWORD | sudo openconnect -b -u $USERNAME@student-net.ethz.ch -g student-net --useragent=AnyConnect --no-external-auth --passwd-on-stdin --token-mode=totp --token-secret=sha1:base32:$TOKEN sslvpn.ethz.ch
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo ' ==> Failed to connect <=='
|
||||||
|
else
|
||||||
|
echo ' ==> Connected <==
|
||||||
|
'
|
||||||
|
fi
|
||||||
encpass=""
|
encpass=""
|
||||||
PASSWORD=""
|
PASSWORD=""
|
||||||
TOKEN=""
|
TOKEN=""
|
||||||
@@ -19,10 +26,16 @@ disconnect() {
|
|||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
echo 'You are about to overwrite your secrets. Press ctrl + C to cancel.'
|
echo 'You are about to overwrite your secrets. Press ctrl + C to cancel.'
|
||||||
read -p $'Please enter your ETHZ-Username: ' USERNAME
|
read -p 'Please enter your ETHZ-Username: ' USERNAME
|
||||||
read -sp $'Please choose and enter your Encryption Password (will be required when launching): ' encpass
|
read -sp 'Please choose and enter your Encryption Password (will be required when launching): ' encpass
|
||||||
read -sp $'Please enter your ETHZ WLAN (= Radius) Password: ' PASSWORD
|
echo ""
|
||||||
read -sp $'Please enter your ETHZ OTP Secret: ' TOKEN
|
read -sp 'Please enter your ETHZ WLAN (= Radius) Password: ' PASSWORD
|
||||||
|
echo ""
|
||||||
|
read -sp 'Please enter your ETHZ OTP Secret: ' TOKEN
|
||||||
|
echo ""
|
||||||
|
if [[ -d ~/.local/share/ethz-vpn-connect ]]; then
|
||||||
|
rm -rf ~/.local/share/ethz-vpn-connect
|
||||||
|
fi
|
||||||
mkdir ~/.local/share/ethz-vpn-connect
|
mkdir ~/.local/share/ethz-vpn-connect
|
||||||
echo $PASSWORD | openssl enc -aes-256-cbc -pbkdf2 -a -k $encpass >~/.local/share/ethz-vpn-connect/ethzvpnpass.secret
|
echo $PASSWORD | openssl enc -aes-256-cbc -pbkdf2 -a -k $encpass >~/.local/share/ethz-vpn-connect/ethzvpnpass.secret
|
||||||
echo $TOKEN | openssl enc -aes-256-cbc -pbkdf2 -a -k $encpass >~/.local/share/ethz-vpn-connect/ethzvpntoken.secret
|
echo $TOKEN | openssl enc -aes-256-cbc -pbkdf2 -a -k $encpass >~/.local/share/ethz-vpn-connect/ethzvpntoken.secret
|
||||||
@@ -30,7 +43,11 @@ setup() {
|
|||||||
encpass=""
|
encpass=""
|
||||||
PASSWORD=""
|
PASSWORD=""
|
||||||
TOKEN=""
|
TOKEN=""
|
||||||
echo $' ==> Secrets set <==\n'
|
if [ $? -ne 0 ]; then
|
||||||
|
echo ' ==> Failed to set secrets <=='
|
||||||
|
else
|
||||||
|
echo ' ==> Secrets set <==\n'
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
|||||||
3
scripts/pdf-wordcount
Executable file
3
scripts/pdf-wordcount
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
echo "Word count is $(pdftotext $1 - | tr -d '.' | wc -w)"
|
||||||
@@ -10,4 +10,4 @@ killall ags
|
|||||||
sleep 4
|
sleep 4
|
||||||
ags run -d ~/projects/dotfiles/config/astal --gtk 4 & disown
|
ags run -d ~/projects/dotfiles/config/astal --gtk 4 & disown
|
||||||
sleep 2
|
sleep 2
|
||||||
ags run -d ~/projects/dotfiles/config/ags/notifications & disown
|
ags run -d ~/projects/dotfiles/config/ags/notifications --gtk 3 & disown
|
||||||
|
|||||||
10
scripts/toggle-swapescape
Executable file
10
scripts/toggle-swapescape
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
enabled=$(hyprctl getoption input:kb_options | grep "caps:swapescape")
|
||||||
|
if [[ $enabled == "" ]]; then
|
||||||
|
hyprctl keyword input:kb_options "caps:swapescape"
|
||||||
|
notify-send "Swapescape enabled"
|
||||||
|
else
|
||||||
|
hyprctl keyword input:kb_options ""
|
||||||
|
notify-send "Swapescape disabled"
|
||||||
|
fi
|
||||||
5
scripts/update-nvim
Executable file
5
scripts/update-nvim
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cd ~/projects/nvim/
|
||||||
|
git pull
|
||||||
|
./nvim-install.sh
|
||||||
33
setup
33
setup
@@ -28,7 +28,6 @@ trap 'echo -e "\nCaught Ctrl+C, exiting..."; exit 130' SIGINT
|
|||||||
# Read platform to install on (only if no platform file present in ~/.config/)
|
# Read platform to install on (only if no platform file present in ~/.config/)
|
||||||
platform=""
|
platform=""
|
||||||
if [[ -f ~/.config/platform ]]; then
|
if [[ -f ~/.config/platform ]]; then
|
||||||
echo "Config type already selected, skipping"
|
|
||||||
platform=$(cat ~/.config/platform)
|
platform=$(cat ~/.config/platform)
|
||||||
else
|
else
|
||||||
read -p "Choose the configs to install, Laptop or Desktop (l/D): " platform
|
read -p "Choose the configs to install, Laptop or Desktop (l/D): " platform
|
||||||
@@ -55,19 +54,18 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
# Hyprmode config
|
# hyprvim config
|
||||||
hyprmode=""
|
hyprvim=""
|
||||||
if [[ -f ~/.config/hyprmode ]]; then
|
if [[ -f ~/.config/hyprvim ]]; then
|
||||||
echo "Hyprmode config already specified, skipping"
|
hyprvim=$(cat ~/.config/hyprvim)
|
||||||
platform=$(cat ~/.config/hyprmode)
|
|
||||||
else
|
else
|
||||||
read -p "Would you like to use Hyprmode? (Y/n) " hyprmode
|
read -p "Would you like to use hyprvim? (Y/n) " hyprvim
|
||||||
fi
|
fi
|
||||||
hyprmode=$(echo "$hyprmode" | tr '[:upper:]' '[:lower:]')
|
hyprvim=$(echo "$hyprvim" | tr '[:upper:]' '[:lower:]')
|
||||||
if [[ "$hyprmode" == "" ]]; then
|
if [[ "$hyprvim" == "" ]]; then
|
||||||
hyprmode="y"
|
hyprvim="y"
|
||||||
fi
|
fi
|
||||||
echo "$hyprmode" >~/.config/hyprmode
|
echo "$hyprvim" >~/.config/hyprvim
|
||||||
|
|
||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
echo "=> Moving configs to correct destinations"
|
echo "=> Moving configs to correct destinations"
|
||||||
@@ -81,19 +79,19 @@ cp -r ./config/xdg-desktop-portal/ ~/.config/
|
|||||||
|
|
||||||
# Depending on platform, remove one or the other config and rename remaining one
|
# Depending on platform, remove one or the other config and rename remaining one
|
||||||
if [[ "$platform" == "d" ]]; then
|
if [[ "$platform" == "d" ]]; then
|
||||||
echo "Running on desktop"
|
echo "==> Running on desktop"
|
||||||
cp -f ~/.config/hypr/hyprland_desktop.conf ~/.config/hypr/hyprland.conf
|
cp -f ~/.config/hypr/hyprland_desktop.conf ~/.config/hypr/hyprland.conf
|
||||||
else
|
else
|
||||||
echo "Running on laptop"
|
echo "==> Running on laptop"
|
||||||
cp -f ~/.config/hypr/hyprland_laptop.conf ~/.config/hypr/hyprland.conf
|
cp -f ~/.config/hypr/hyprland_laptop.conf ~/.config/hypr/hyprland.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Enable or disable "Hyprmode" (using hyprland with vim-inspired modes)
|
# Enable or disable "hyprvim" (using hyprland with vim-inspired modes)
|
||||||
if [[ "$hyprmode" == "y" ]]; then
|
if [[ "$hyprvim" == "y" ]]; then
|
||||||
echo "Enabling hyprmode"
|
echo "==> Enabling hyprvim"
|
||||||
mv -f ~/.config/hypr/hyprland/mode-binds.conf ~/.config/hypr/hyprland/binds.conf
|
mv -f ~/.config/hypr/hyprland/mode-binds.conf ~/.config/hypr/hyprland/binds.conf
|
||||||
else
|
else
|
||||||
echo "Disabling hyprmode"
|
echo "==> Disabling hyprvim"
|
||||||
rm -rf ~/.config/hypr/hyprland/modal-binds
|
rm -rf ~/.config/hypr/hyprland/modal-binds
|
||||||
rm ~/.config/hypr/hyprland/mode-binds.conf
|
rm ~/.config/hypr/hyprland/mode-binds.conf
|
||||||
fi
|
fi
|
||||||
@@ -114,6 +112,7 @@ cp ./config/lint/indentconfig.yaml ~/.indentconfig.yaml
|
|||||||
echo "
|
echo "
|
||||||
=> Installing yazi plugins
|
=> Installing yazi plugins
|
||||||
"
|
"
|
||||||
|
rm -rf ~/.config/yazi/plugins/*
|
||||||
ya pkg upgrade
|
ya pkg upgrade
|
||||||
|
|
||||||
if [[ "$restart" == "y" ]]; then
|
if [[ "$restart" == "y" ]]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user