Compare commits
125 Commits
v2
...
f4aedf7b5e
Author | SHA1 | Date | |
---|---|---|---|
f4aedf7b5e | |||
f51cc0049a | |||
c01529a599 | |||
121f02c785 | |||
f6cd98e458 | |||
cc9f38c71c | |||
606a1fec1b | |||
d3bf33a142 | |||
91a6566d68 | |||
ce0d951a54 | |||
106fe9cd9e | |||
a199569aac | |||
80d16ab6ff | |||
1c8b72867e | |||
9d59b24995 | |||
e78d07b25b | |||
a2c11e5cd1 | |||
70aceee3ca | |||
8e6340e4c7 | |||
46a4d7628d | |||
2ec9356aca | |||
3c19159c23 | |||
f6afd785fd | |||
e20a33e132 | |||
4683a171b9 | |||
4189258def | |||
2e8f1ec9ae | |||
78c97c5d84 | |||
4540dc00e7 | |||
294d7a9a98 | |||
77dd4b4ca8 | |||
7394ab63bf | |||
7f851fac73 | |||
a5a6d9a916 | |||
3967a4cd5c | |||
f684f52d8f | |||
1079f62c06 | |||
1f460ccc38 | |||
8b7f15eddf | |||
0750c45111 | |||
0db1815665 | |||
d028b027c5 | |||
e91f5aa5d6 | |||
6105341234 | |||
6a362a963f | |||
9005bd089a | |||
1921545d08 | |||
05b463699f | |||
6f33358f4a | |||
909983d069 | |||
a259206de8 | |||
3f058cbfd3 | |||
318fc39b61 | |||
6b1c8dec58 | |||
3541ec68e7 | |||
3a3674670b | |||
b2c6d72a2f | |||
b9c68535d4 | |||
ae5226202a | |||
580aee4ad5 | |||
a8bf678d45 | |||
73feae1142 | |||
b26b870bb2 | |||
2d3a6ad33f | |||
ef9439b92c | |||
c635f3bfa9 | |||
7c3eb71150 | |||
4fef18041f | |||
df3384c667 | |||
7a97d7425e | |||
73ca687358 | |||
88441958d9 | |||
e59af388b1 | |||
39da9176ad | |||
e4ee9c9dc8 | |||
feef8452f4 | |||
c3ff5a58d6 | |||
a005189aef | |||
e98f5c2bd7 | |||
e7f6be4291 | |||
4fa7dc3c1a | |||
2ccb49f24b | |||
ec04ebee66 | |||
2b2f1c2b66 | |||
21f7e53b2b | |||
5f09b7b915 | |||
688013a6b8 | |||
4e7c3ceee8 | |||
390874374e | |||
7f7a755e32 | |||
ac6b47449a | |||
ce5f530ed2 | |||
62789224a7 | |||
0b849bad4f | |||
0022880936 | |||
1d5240b7c6 | |||
0b0e83f505 | |||
f4cfa20dea | |||
d866102fcc | |||
921373f049 | |||
1c39478650 | |||
a845e086fd | |||
b363438f6a | |||
7d9da82b6c | |||
c52c5b5a42 | |||
97c49f17e6 | |||
134519558a | |||
9e5ae7db83 | |||
a31b3481c3 | |||
1c757d1173 | |||
89b97c4ba1 | |||
2ba627a370 | |||
995de3617c | |||
a477078f16 | |||
f93eeb5d87 | |||
5b0e3767bd | |||
51962c424b | |||
a6ce7ccdce | |||
0f0e0e8671 | |||
c6061e0f12 | |||
cac0e41a2e | |||
c4797dd592 | |||
8986ad894e | |||
f127ea8a41 | |||
bb75cfabaf |
34
README.md
34
README.md
@@ -1,4 +1,36 @@
|
|||||||
# janishutz Hyprland
|
<div id="title" align="center">
|
||||||
|
<img src="https://static.janishutz.com/logo.jpg" width="300">
|
||||||
|
<h1>janishutz Hyprland</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Collection of dotfiles for my personal Hyprland setup, running on Arch Linux. Includes a setup and install script (that one is not complete yet though). For my neovim config, see [here](https://git.janishutz.com/janishutz/nvim)
|
||||||
|
|
||||||
|
## Features
|
||||||
|
- Astal4 based Status Bar and Quick Actions menu
|
||||||
|
- System info
|
||||||
|
- Hyprland info
|
||||||
|
- Date & Time
|
||||||
|
- Bluetooth picker
|
||||||
|
- some networking settings (more coming later)
|
||||||
|
- Audio and brightness control
|
||||||
|
- battery monitoring
|
||||||
|
- Logout, Reboot, Shutdown, etc
|
||||||
|
- Rofi config for App launcher
|
||||||
|
- Wlogout config
|
||||||
|
- Theming script that generates a GTK theme and theming for bar, Hyprland, etc
|
||||||
|
- Fish config (with some handy aliases, based on one from ohh-my-fish)
|
||||||
|
- Fastfetch config
|
||||||
|
- kitty config with cursor trail
|
||||||
|
- Linter configs (currently only eslint, which is not complete yet)
|
||||||
|
- mpv config
|
||||||
|
- zathura configs
|
||||||
|
- yazi configs with links to various directories I use commonly plus a few plugins and themes that are applied by the script
|
||||||
|
- Astal3 based Notifications (due to be migrated to Astal4)
|
||||||
|
|
||||||
|
## Installing
|
||||||
|
Clone your repo to any folder and adapt what you need. Some folders are still hard-coded, which I will be changing later on, so you will likely run into issues.
|
||||||
|
|
||||||
|
You may then run the `setup` script. That won't install all dependencies though. The `install` script is what serves that purpose, but that is not complete yet
|
||||||
|
|
||||||
|
|
||||||
## Setting up to develop
|
## Setting up to develop
|
||||||
|
@@ -30,7 +30,7 @@ const build = ( wallpaper, lockpaper, theme ) => {
|
|||||||
name: 'confirm-proceed-build',
|
name: 'confirm-proceed-build',
|
||||||
message: 'Okay to proceed with these colours?'
|
message: 'Okay to proceed with these colours?'
|
||||||
} ] ).then( answer => {
|
} ] ).then( answer => {
|
||||||
if ( answer ) proceedWithBuild( wallpaper, lockpaper, theme, palette );
|
if ( answer['confirm-proceed-build'] ) proceedWithBuild( wallpaper, lockpaper, theme, palette );
|
||||||
else {
|
else {
|
||||||
// Have the user pick any other of the extracted colours instead
|
// Have the user pick any other of the extracted colours instead
|
||||||
let counter = -1;
|
let counter = -1;
|
||||||
|
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"gen": {
|
|
||||||
"overrides": {}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,4 +1,4 @@
|
|||||||
import { bind, Binding } from "astal";
|
import { bind } from "astal";
|
||||||
import { Gtk } from "astal/gtk4";
|
import { Gtk } from "astal/gtk4";
|
||||||
import AstalWp from "gi://AstalWp";
|
import AstalWp from "gi://AstalWp";
|
||||||
|
|
||||||
@@ -13,8 +13,8 @@ const AudioModule = () => {
|
|||||||
wp.defaultMicrophone.set_volume(volume / 100);
|
wp.defaultMicrophone.set_volume(volume / 100);
|
||||||
};
|
};
|
||||||
|
|
||||||
const speakerSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_SPEAKER);
|
const speakerSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_SINK);
|
||||||
const micSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_MICROPHONE);
|
const micSelector = SinkSelectPopover(AstalWp.MediaClass.AUDIO_SOURCE);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<box cssClasses={["audio-box"]} vertical>
|
<box cssClasses={["audio-box"]} vertical>
|
||||||
@@ -107,12 +107,18 @@ const AudioModule = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const SinkPicker = (type: AstalWp.MediaClass) => {
|
const SinkPicker = (type: AstalWp.MediaClass) => {
|
||||||
const devices = bind(wp, "endpoints");
|
const devices = bind(wp, "nodes");
|
||||||
|
wp.connect("ready", () => {
|
||||||
|
const dev = wp.get_nodes()!
|
||||||
|
for (let i = 0; i < dev.length; i++) {
|
||||||
|
const d = dev[i];
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<box vertical>
|
<box vertical>
|
||||||
<label
|
<label
|
||||||
label={`Available Audio ${type === AstalWp.MediaClass.AUDIO_SPEAKER ? "Output" : type === AstalWp.MediaClass.AUDIO_MICROPHONE ? "Input" : ""} Devices`}
|
label={`Available Audio ${type === AstalWp.MediaClass.AUDIO_SINK ? "Output" : type === AstalWp.MediaClass.AUDIO_SOURCE ? "Input" : ""} Devices`}
|
||||||
cssClasses={[ 'title-2' ]}
|
cssClasses={[ 'title-2' ]}
|
||||||
></label>
|
></label>
|
||||||
<Gtk.Separator marginBottom={5} marginTop={3}></Gtk.Separator>
|
<Gtk.Separator marginBottom={5} marginTop={3}></Gtk.Separator>
|
||||||
@@ -128,11 +134,11 @@ const SinkPicker = (type: AstalWp.MediaClass) => {
|
|||||||
if (
|
if (
|
||||||
id ===
|
id ===
|
||||||
(type ===
|
(type ===
|
||||||
AstalWp.MediaClass.AUDIO_SPEAKER
|
AstalWp.MediaClass.AUDIO_SINK
|
||||||
? wp.defaultSpeaker.id
|
? wp.defaultSpeaker.id
|
||||||
: type ===
|
: type ===
|
||||||
AstalWp.MediaClass
|
AstalWp.MediaClass
|
||||||
.AUDIO_MICROPHONE
|
.AUDIO_SOURCE
|
||||||
? wp.defaultMicrophone.id
|
? wp.defaultMicrophone.id
|
||||||
: "")
|
: "")
|
||||||
) {
|
) {
|
||||||
|
51
config/astal/components/QuickActions/modules/Audio/dump
Normal file
51
config/astal/components/QuickActions/modules/Audio/dump
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
|
||||||
|
{devices.as(d => {
|
||||||
|
return d.map(device => {
|
||||||
|
if (device.get_media_class() !== type) {
|
||||||
|
return <box cssClasses={[ 'empty' ]}></box>;
|
||||||
|
}
|
||||||
|
return (
|
||||||
|
<button
|
||||||
|
cssClasses={bind(device, "id").as(id => {
|
||||||
|
if (
|
||||||
|
id ===
|
||||||
|
(type ===
|
||||||
|
AstalWp.MediaClass.AUDIO_SPEAKER
|
||||||
|
? wp.defaultSpeaker.id
|
||||||
|
: type ===
|
||||||
|
AstalWp.MediaClass
|
||||||
|
.AUDIO_MICROPHONE
|
||||||
|
? wp.defaultMicrophone.id
|
||||||
|
: "")
|
||||||
|
) {
|
||||||
|
return [
|
||||||
|
"sink-option",
|
||||||
|
"currently-selected-sink-option",
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
return ["sink-option"];
|
||||||
|
}
|
||||||
|
})}
|
||||||
|
child={
|
||||||
|
<box halign={Gtk.Align.START}>
|
||||||
|
<image
|
||||||
|
iconName={bind(device, "icon").as(
|
||||||
|
icon => icon,
|
||||||
|
)}
|
||||||
|
marginEnd={3}
|
||||||
|
></image>
|
||||||
|
<label
|
||||||
|
label={bind(
|
||||||
|
device,
|
||||||
|
"description",
|
||||||
|
).as(t => t ?? "")}
|
||||||
|
></label>
|
||||||
|
</box>
|
||||||
|
}
|
||||||
|
onClicked={() => {
|
||||||
|
device.set_is_default(true);
|
||||||
|
}}
|
||||||
|
></button>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
})}
|
@@ -29,11 +29,13 @@ export const BatteryBox = () => {
|
|||||||
cssClasses={["battery-time"]}
|
cssClasses={["battery-time"]}
|
||||||
visible={bind(battery, "charging").as(c => !c)}
|
visible={bind(battery, "charging").as(c => !c)}
|
||||||
label={bind(battery, "timeToEmpty").as(t => `(${toTime(t)})`)}
|
label={bind(battery, "timeToEmpty").as(t => `(${toTime(t)})`)}
|
||||||
|
tooltipText={bind(battery, 'energyRate').as(er => `Time to empty. Power usage: ${batteryEnergy(er)}`)}
|
||||||
/>
|
/>
|
||||||
<label
|
<label
|
||||||
cssClasses={["battery-time"]}
|
cssClasses={["battery-time"]}
|
||||||
visible={bind(battery, "charging")}
|
visible={bind(battery, "charging")}
|
||||||
label={bind(battery, "timeToFull").as(t => `(${toTime(t)})`)}
|
label={bind(battery, "timeToFull").as(t => `(${toTime(t)})`)}
|
||||||
|
tooltipText={bind(battery, 'energyRate').as(er => `Time to full. Charge rate: ${batteryEnergy(er)}`)}
|
||||||
/>
|
/>
|
||||||
</box>
|
</box>
|
||||||
);
|
);
|
||||||
@@ -43,7 +45,7 @@ const toTime = (time: number) => {
|
|||||||
const MINUTE = 60;
|
const MINUTE = 60;
|
||||||
const HOUR = MINUTE * 60;
|
const HOUR = MINUTE * 60;
|
||||||
|
|
||||||
if (time > 24 * HOUR) return "";
|
if (time > 24 * HOUR) return "24h+";
|
||||||
|
|
||||||
const hours = Math.round(time / HOUR);
|
const hours = Math.round(time / HOUR);
|
||||||
const minutes = Math.round((time - hours * HOUR) / MINUTE);
|
const minutes = Math.round((time - hours * HOUR) / MINUTE);
|
||||||
|
@@ -4,7 +4,6 @@ import Brightness from "../../../../util/brightness";
|
|||||||
const brightness = Brightness.get_default();
|
const brightness = Brightness.get_default();
|
||||||
|
|
||||||
const BrightnessModule = () => {
|
const BrightnessModule = () => {
|
||||||
print( brightness.screen * 100 );
|
|
||||||
const setBrightness = (value: number) => {
|
const setBrightness = (value: number) => {
|
||||||
brightness.screen = value;
|
brightness.screen = value;
|
||||||
}
|
}
|
||||||
|
@@ -135,8 +135,9 @@ const PlayerItem = ({ player }: { player: AstalMpris.Player }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const secondsToFriendlyTime = (time: number) => {
|
const secondsToFriendlyTime = (time: number) => {
|
||||||
const minutes = Math.floor(time / 60);
|
const m = Math.floor(time / 60);
|
||||||
const hours = Math.floor(minutes / 60);
|
const minutes = Math.floor(m % 60);
|
||||||
|
const hours = Math.floor(m / 60 % 24);
|
||||||
const seconds = Math.floor(time % 60);
|
const seconds = Math.floor(time % 60);
|
||||||
if (hours > 0) {
|
if (hours > 0) {
|
||||||
return `${hours}:${expandTime(minutes)}:${expandTime(seconds)}`;
|
return `${hours}:${expandTime(minutes)}:${expandTime(seconds)}`;
|
||||||
|
@@ -21,7 +21,7 @@ const Bar = ( { gdkmonitor, name }: { gdkmonitor: Gdk.Monitor, name: string } )
|
|||||||
child={
|
child={
|
||||||
<CenterBox
|
<CenterBox
|
||||||
orientation={Gtk.Orientation.HORIZONTAL}
|
orientation={Gtk.Orientation.HORIZONTAL}
|
||||||
start_widget={
|
startWidget={
|
||||||
<box
|
<box
|
||||||
hexpand
|
hexpand
|
||||||
halign={Gtk.Align.START}
|
halign={Gtk.Align.START}
|
||||||
|
@@ -2,6 +2,7 @@ import AstalTray from "gi://AstalTray";
|
|||||||
import { bind, GObject } from "astal";
|
import { bind, GObject } from "astal";
|
||||||
import AstalHyprland from "gi://AstalHyprland";
|
import AstalHyprland from "gi://AstalHyprland";
|
||||||
import { Gtk } from "astal/gtk4";
|
import { Gtk } from "astal/gtk4";
|
||||||
|
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 SYNC = GObject.BindingFlags.SYNC_CREATE;
|
||||||
@@ -105,7 +106,10 @@ const ActiveWindow = () => {
|
|||||||
focused.as(
|
focused.as(
|
||||||
client =>
|
client =>
|
||||||
client && (
|
client && (
|
||||||
<label label={bind(client, "title").as(String)} />
|
<label
|
||||||
|
maxWidthChars={70}
|
||||||
|
ellipsize={Pango.EllipsizeMode.END}
|
||||||
|
label={bind(client, "title").as(String)} />
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}></button>
|
}></button>
|
||||||
|
@@ -125,9 +125,9 @@ const BatteryWidget = () => {
|
|||||||
if (battery.get_is_present()) {
|
if (battery.get_is_present()) {
|
||||||
return (
|
return (
|
||||||
<image
|
<image
|
||||||
iconName={bind(battery, "iconName").as(icon => icon)}
|
iconName={bind(battery, "batteryIconName").as(icon => icon)}
|
||||||
cssClasses={["quick-view-symbol"]}
|
cssClasses={["quick-view-symbol"]}
|
||||||
tooltipText={bind(battery, 'percentage').as(p => `${Math.round(p * 100)}%`)}
|
tooltipText={bind(battery, 'percentage').as(p => `Battery Level: ${Math.round(p * 100)}%`)}
|
||||||
></image>
|
></image>
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
@@ -75,7 +75,7 @@ const SystemInfo = () => {
|
|||||||
<box
|
<box
|
||||||
cssClasses={[ 'quick-view-symbol' ]}
|
cssClasses={[ 'quick-view-symbol' ]}
|
||||||
>
|
>
|
||||||
<image iconName={"histogram-symbolic"}></image>
|
<image iconName={"memory"}></image>
|
||||||
<label label={sysinfo.ramUtil(util => util)}></label>
|
<label label={sysinfo.ramUtil(util => util)}></label>
|
||||||
</box>
|
</box>
|
||||||
<box
|
<box
|
||||||
|
@@ -1,10 +1,12 @@
|
|||||||
alias ls='ls -l --color'
|
alias ls='ls -l --color'
|
||||||
alias ll='ls -la --color'
|
alias ll='ls -la --color'
|
||||||
alias v='nvim'
|
alias v='nvim'
|
||||||
|
alias i='vimiv'
|
||||||
alias c='clear'
|
alias c='clear'
|
||||||
alias zs='zathura-sandbox'
|
alias zs='zathura-sandbox'
|
||||||
|
alias z='zathura'
|
||||||
alias bt='bluetui'
|
alias bt='bluetui'
|
||||||
alias vicfg='cd ~/.config/nvim/ && nvim'
|
alias vicfg='nvim ~/projects/active/nvim/'
|
||||||
alias fm='thunar .'
|
alias fm='thunar .'
|
||||||
alias gl='git ls-files --others --exclude-standard'
|
alias gl='git ls-files --others --exclude-standard'
|
||||||
alias gm='gti ls-files -m'
|
alias gm='gti ls-files -m'
|
||||||
@@ -15,8 +17,7 @@ alias ga='git add ./*'
|
|||||||
alias cfh='nvim ~/projects/active/dotfiles/config/hypr/'
|
alias cfh='nvim ~/projects/active/dotfiles/config/hypr/'
|
||||||
alias cfn='nvim ~/projects/active/nvim/'
|
alias cfn='nvim ~/projects/active/nvim/'
|
||||||
alias cff='nvim ~/projects/active/dotfiles/config/fish/'
|
alias cff='nvim ~/projects/active/dotfiles/config/fish/'
|
||||||
alias cfw='nvim ~/projects/archive/dotfiles-old/pc/configs/waybar/'
|
alias cfa='nvim ~/projects/active/dotfiles/config/astal/'
|
||||||
alias cfa='nvim ~/projects/active/dotfiles/config/ags/'
|
|
||||||
alias cf='nvim ~/projects/active/dotfiles/'
|
alias cf='nvim ~/projects/active/dotfiles/'
|
||||||
alias g='lazygit'
|
alias g='lazygit'
|
||||||
alias open-webui='sudo systemctl start docker && sudo docker start -i open-webui'
|
alias open-webui='sudo systemctl start docker && sudo docker start -i open-webui'
|
||||||
@@ -36,7 +37,6 @@ function y
|
|||||||
end
|
end
|
||||||
|
|
||||||
zoxide init --cmd j fish | source
|
zoxide init --cmd j fish | source
|
||||||
# [ -f /usr/share/autojump/autojump.fish ]; and source /usr/share/autojump/autojump.fish
|
|
||||||
|
|
||||||
if status is-interactive
|
if status is-interactive
|
||||||
function fish_prompt
|
function fish_prompt
|
||||||
@@ -124,3 +124,5 @@ end
|
|||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
set -g fish_greeting ""
|
||||||
|
@@ -9,30 +9,19 @@
|
|||||||
#██████████████ █████ ████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
#██████████████ █████ ████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
||||||
|
|
||||||
general {
|
general {
|
||||||
lock_cmd = hyprlock --immediate
|
lock_cmd = hyprlock
|
||||||
unlock_cmd = loginctl unlock-session
|
unlock_cmd = loginctl unlock-session
|
||||||
before_sleep_cmd = hyprlock --immediate
|
before_sleep_cmd = hyprlock
|
||||||
after_sleep_cmd = hyprlock --immediate
|
after_sleep_cmd = hyprlock
|
||||||
}
|
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 100
|
|
||||||
on-timeout = notify-send "Entering idle state... (200s to screen off)"
|
|
||||||
on-resume = notify-send "Welcome back!"
|
|
||||||
}
|
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 200
|
|
||||||
on-timeout = notify-send "100s to screen off"
|
|
||||||
}
|
|
||||||
|
|
||||||
listener {
|
|
||||||
timeout = 210
|
|
||||||
on-timeout = hyprlock
|
|
||||||
}
|
}
|
||||||
|
|
||||||
listener {
|
listener {
|
||||||
timeout = 300
|
timeout = 300
|
||||||
|
on-timeout = hyprlock --grace 15
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 360
|
||||||
on-timeout = hyprctl dispatch dpms off
|
on-timeout = hyprctl dispatch dpms off
|
||||||
on-resume = hyprctl dispatch dpms on
|
on-resume = hyprctl dispatch dpms on
|
||||||
}
|
}
|
||||||
|
@@ -8,9 +8,7 @@ $mainMod = SUPER
|
|||||||
# These key-binds are non-specific, laptop config has a separate file that includes
|
# These key-binds are non-specific, laptop config has a separate file that includes
|
||||||
# extra config for it specifically
|
# extra config for it specifically
|
||||||
bind = $mainMod, Q, killactive
|
bind = $mainMod, Q, killactive
|
||||||
# bind = $mainMod SHIFT, Q, exit
|
|
||||||
bind = $mainMod, Return, exec, kitty
|
bind = $mainMod, Return, exec, kitty
|
||||||
# bind = $mainMod, E, exec, thunar
|
|
||||||
bind = $mainMod SHIFT, E, exec, thunar
|
bind = $mainMod SHIFT, E, exec, thunar
|
||||||
bind = $mainMod, E, exec, kitty --hold fish -c "y"
|
bind = $mainMod, E, exec, kitty --hold fish -c "y"
|
||||||
bind = $mainMod, V, togglefloating,
|
bind = $mainMod, V, togglefloating,
|
||||||
@@ -46,13 +44,11 @@ bind = $mainMod SHIFT, L, exec, librewolf
|
|||||||
bind = $mainMod SHIFT, D, exec, vesktop
|
bind = $mainMod SHIFT, D, exec, vesktop
|
||||||
bind = $mainMod SHIFT, V, exec, vscodium
|
bind = $mainMod SHIFT, V, exec, vscodium
|
||||||
bind = $mainMod SHIFT, T, exec, thunderbird
|
bind = $mainMod SHIFT, T, exec, thunderbird
|
||||||
bind = $mainMod SHIFT, H, exec, heroic
|
bind = $mainMod CTRL, H, exec, heroic
|
||||||
bind = $mainMod SHIFT, Z, exec, zathura
|
bind = $mainMod SHIFT, Z, exec, zathura
|
||||||
bind = $mainMod SHIFT, I, exec, notify-send 'AirPlay video server starting...' --app-name="AirPlay Video" && terminator -e "systemctl start avahi-daemon && sleep 5 && uxplay -n LinuxVideoPlay -nh"
|
bind = $mainMod SHIFT, I, exec, notify-send 'AirPlay video server starting...' --app-name="AirPlay Video" && terminator -e "systemctl start avahi-daemon && sleep 5 && uxplay -n LinuxVideoPlay -nh"
|
||||||
bind = $mainMod SHIFT, 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 = $mainMod SHIFT, 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 = $mainMod SHIFT, G, exec, notify-send 'Preparing system for gaming...' --app-name="Util" && corectrl
|
|
||||||
bind = $mainMod SHIFT, P, exec, notify-send 'Steam is launching...' --app-name="Steam" && steam
|
bind = $mainMod SHIFT, P, exec, notify-send 'Steam is launching...' --app-name="Steam" && steam
|
||||||
bind = $mainMod SHIFT, R, exec, notify-send 'Launching in Remoteplay optimised session' --app-name="Steam" && steam -pipewire
|
|
||||||
bind = $mainMod CTRL, K, exec, notify-send 'Insta-Kill activated' --app-name="Hyprctl" && hyprctl kill
|
bind = $mainMod CTRL, K, exec, notify-send 'Insta-Kill activated' --app-name="Hyprctl" && hyprctl kill
|
||||||
bind = $mainMod SHIFT, O, exec, terminator -e "~/projects/dotfiles/ai.sh"
|
bind = $mainMod SHIFT, O, exec, terminator -e "~/projects/dotfiles/ai.sh"
|
||||||
|
|
||||||
@@ -70,12 +66,12 @@ bind = SHIFT, PRINT, exec, grimblast --notify save screen
|
|||||||
# │ Rofi commands │
|
# │ Rofi commands │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
bind = $mainMod, Space, exec, killall rofi || rofi -show combi -modes combi -combi-modes "window,drun,run"
|
bind = $mainMod, Space, exec, killall rofi || rofi -show combi -modes combi -combi-modes "window,drun,run"
|
||||||
|
bind = $mainMod SHIFT, H, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ Logout commands │
|
# │ Logout commands │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
bind = $mainMod, escape, exec, wlogout
|
bind = $mainMod, escape, exec, wlogout
|
||||||
bind = $mainMod ALT CTRL, L, exec, hyprlock --immediate
|
|
||||||
|
|
||||||
|
|
||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
@@ -160,8 +156,6 @@ bind = $mainMod, mouse_up, workspace, e-1
|
|||||||
# │ ALT + Tab / SHIFT + ALT + Tab │
|
# │ ALT + Tab / SHIFT + ALT + Tab │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
bind = ALT SHIFT, tab, cyclenext, prev
|
bind = ALT SHIFT, tab, cyclenext, prev
|
||||||
# bind = ALT, tab, cyclenext, next
|
|
||||||
# bind = ALT CTRL, tab, focusurgentorlast
|
|
||||||
bind = ALT, tab, focusurgentorlast
|
bind = ALT, tab, focusurgentorlast
|
||||||
|
|
||||||
|
|
||||||
@@ -181,6 +175,12 @@ bind = $mainMod SHIFT CTRL, left, layoutmsg, orientationprev
|
|||||||
bindm = $mainMod, mouse:272, movewindow
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
bindm = $mainMod, mouse:273, resizewindow
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
|
||||||
|
# ┌ ┐
|
||||||
|
# │ Resize window with keybinds (change split) │
|
||||||
|
# └ ┘
|
||||||
|
bind = $mainMod CTRL ALT, H, splitratio, -0.01
|
||||||
|
bind = $mainMod CTRL ALT, L, splitratio, +0.01
|
||||||
|
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ Freeze │
|
# │ Freeze │
|
||||||
@@ -199,8 +199,8 @@ bind = ,code:121, exec, pamixer -t
|
|||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ Brightness-Control │
|
# │ Brightness-Control │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
bind = ,code:232, exec, light -U 5 && notify-send 'Display brightness decreased by 5%' --app-name="Brightness"
|
bind = ,code:232, exec, light -U 5
|
||||||
bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased by 5%' --app-name="Brightness"
|
bind = ,code:233, exec, light -A 5
|
||||||
|
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
|
@@ -13,11 +13,14 @@ exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
|
|||||||
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/active/dotfiles/config/astal/ --gtk4 >> ~/log 2>&1"
|
exec-once = sleep 2 && bash -c "ags run -d ~/projects/active/dotfiles/config/astal/ --gtk4 >> /tmp/runner-log 2>&1"
|
||||||
exec-once = sleep 2 && bash -c "ags run -d ~/projects/active/dotfiles/config/astal/ --gtk4"
|
# exec-once = sleep 2 && bash -c "ags run -d ~/projects/active/dotfiles/config/astal/ --gtk4"
|
||||||
# exec-once = bash -c "ags run -d ~/projects/active/dotfiles/config/ags/notifications/ >> ~/logn 2>&1"
|
exec-once = bash -c "ags run -d ~/projects/active/dotfiles/config/ags/notifications/ >> /tmp/notifier-log 2>&1"
|
||||||
exec-once = bash -c "ags run -d ~/projects/active/dotfiles/config/ags/notifications/"
|
# exec-once = bash -c "ags run -d ~/projects/active/dotfiles/config/ags/notifications/"
|
||||||
|
|
||||||
|
# ── wlhist ──────────────────────────────────────────────────────────
|
||||||
|
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 = hyprctl setcursor oreo_spark_blue_cursors 24
|
exec = hyprctl setcursor oreo_spark_blue_cursors 24
|
||||||
@@ -47,13 +50,13 @@ input {
|
|||||||
|
|
||||||
focus_on_close = 1
|
focus_on_close = 1
|
||||||
|
|
||||||
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
sensitivity = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
gestures {
|
gestures {
|
||||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
workspace_swipe_distance = 200
|
||||||
workspace_swipe = true
|
workspace_swipe_cancel_ratio = 0.3
|
||||||
workspace_swipe_distance = 300
|
workspace_swipe_forever = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -63,27 +66,21 @@ gestures {
|
|||||||
# ╰────────────────────────────────────────────────╯
|
# ╰────────────────────────────────────────────────╯
|
||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
general {
|
general {
|
||||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
|
||||||
|
|
||||||
gaps_in = 3
|
gaps_in = 3
|
||||||
gaps_out = 4
|
gaps_out = 4
|
||||||
border_size = 1
|
border_size = 2
|
||||||
# col.active_border = rgba(cc5c00ff) rgba(cc5c00ff) rgba(ff0000ff) 45deg
|
|
||||||
# col.inactive_border = rgba(595959aa)
|
|
||||||
|
|
||||||
layout = master
|
layout = dwindle
|
||||||
no_border_on_floating = false
|
no_border_on_floating = false
|
||||||
}
|
}
|
||||||
|
|
||||||
decoration {
|
decoration {
|
||||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
|
||||||
inactive_opacity = 1
|
inactive_opacity = 1
|
||||||
rounding = 10
|
rounding = 10
|
||||||
|
|
||||||
shadow {
|
shadow {
|
||||||
enabled = true
|
enabled = true
|
||||||
range = 4
|
range = 4
|
||||||
# color = rgba(1a1a1aee)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
blur {
|
blur {
|
||||||
@@ -100,8 +97,6 @@ decoration {
|
|||||||
animations {
|
animations {
|
||||||
enabled = yes
|
enabled = yes
|
||||||
|
|
||||||
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
|
||||||
|
|
||||||
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||||
|
|
||||||
animation = windows, 1, 7, myBezier
|
animation = windows, 1, 7, myBezier
|
||||||
@@ -119,17 +114,11 @@ misc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dwindle {
|
dwindle {
|
||||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
pseudotile = true
|
||||||
pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
force_split = 2
|
||||||
preserve_split = yes # you probably want this
|
preserve_split = true
|
||||||
}
|
}
|
||||||
|
|
||||||
master {
|
|
||||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
|
||||||
# no_gaps_when_only = true
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
cursor {
|
cursor {
|
||||||
no_warps = false
|
no_warps = false
|
||||||
inactive_timeout = 60
|
inactive_timeout = 60
|
||||||
|
58
config/hypr/hyprland_docked.conf
Normal file
58
config/hypr/hyprland_docked.conf
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
||||||
|
#░ ░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ ░░░░░░░░░░░░░░
|
||||||
|
#▒ ▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒
|
||||||
|
#▒ ▒▒▒▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒ ▒ ▒ ▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒ ▒▒▒ ▒ ▒▒▒▒▒▒▒ ▒▒
|
||||||
|
#▓ ▓▓ ▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓ ▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓
|
||||||
|
#▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓▓ ▓▓ ▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓
|
||||||
|
#▓ ▓▓▓▓ ▓▓▓▓▓ ▓▓▓ ▓ ▓▓▓ ▓▓▓▓ ▓ ▓▓▓ ▓▓▓ ▓▓ ▓ ▓▓▓ ▓▓▓▓▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓ ▓
|
||||||
|
#█ ████ ████ ████ ██████ ████ ███ █ █ ██ ██ █ ███████████ ██████ █████ ██ ███ ████ █████ █
|
||||||
|
#██████████████ █████ ██████████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ────────────────────────────────────────────────────────────────────
|
||||||
|
# ╭────────────────────────────────────────────────╮
|
||||||
|
# │ MONITORS │
|
||||||
|
# ╰────────────────────────────────────────────────╯
|
||||||
|
# ────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
monitor=eDP-1, disable
|
||||||
|
monitor=,highres highrr, auto, 1
|
||||||
|
|
||||||
|
|
||||||
|
source=./hyprland/binds.conf
|
||||||
|
source=./hyprland/general.conf
|
||||||
|
source=./hyprland/windowrules.conf
|
||||||
|
|
||||||
|
# ┌ ┐
|
||||||
|
# │ LAPTOP │
|
||||||
|
# └ ┘
|
||||||
|
exec = hyprctl setcursor oreo_spark_blue_cursors 36
|
||||||
|
env = HYPRCURSOR_THEME, Oreo_spark_blue_cursor
|
||||||
|
env = X_CURSOR_THEME, Oreo_spark_blue_cursor
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
env = XDG_SESSION_TYPE, wayland
|
||||||
|
env = QT_QPA_PLATFORM,wayland
|
||||||
|
env = ELECTRON_OZONE_PLATFORM_HINT,wayland
|
||||||
|
exec-once = hyprpm reload -nn
|
||||||
|
|
||||||
|
xwayland {
|
||||||
|
force_zero_scaling = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# ── Volume control ──────────────────────────────────────────────────
|
||||||
|
bind = ,code:123, exec, pamixer -i 5
|
||||||
|
bind = ,code:122, exec, pamixer -d 5
|
||||||
|
bind = ,code:121, exec, pamixer -t
|
||||||
|
|
||||||
|
|
||||||
|
# ── Brightness-Control ──────────────────────────────────────────────
|
||||||
|
bind = ,code:232, exec, light -U 5 && notify-send 'Display brightness decreased by 5%'
|
||||||
|
bind = ,code:233, exec, light -A 5 && notify-send 'Display brightness increased by 5%'
|
||||||
|
|
||||||
|
|
||||||
|
# ── Vivado inversion ────────────────────────────────────────────────
|
||||||
|
windowrule = plugin:invertwindow, class:Vivado
|
||||||
|
windowrule = tile, title:(.*)Vivado(.*)
|
@@ -19,7 +19,7 @@
|
|||||||
# ────────────────────────────────────────────────────────────────────
|
# ────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
monitor=eDP-1, 2880x1800@60, 0x0, 1.5
|
monitor=eDP-1, 2880x1800@60, 0x0, 1.5
|
||||||
# monitor=,highres highrr, auto, 1
|
monitor=,highres highrr, auto, 1
|
||||||
|
|
||||||
|
|
||||||
# exec = swaybg -m fill -i /home/janis/Pictures/arch-bg.png
|
# exec = swaybg -m fill -i /home/janis/Pictures/arch-bg.png
|
||||||
@@ -68,6 +68,8 @@ bind = $mainMod CTRL, E, exec, hyprctl keyword monitor HDMI-A-1, 1920x1080@60, 1
|
|||||||
bind = $mainMod ALT, E, exec, hyprctl keyword monitor eDP-1, 2880x1800@60, 0x0, 1.5 && cpupower-gui -b && notify-send 'Set to battery optimized settings'
|
bind = $mainMod ALT, E, exec, hyprctl keyword monitor eDP-1, 2880x1800@60, 0x0, 1.5 && cpupower-gui -b && notify-send 'Set to battery optimized settings'
|
||||||
bind = $mainMod ALT, P, exec, hyprctl keyword monitor eDP-1, 2880x1800@120, 0x0, 1.5 && cpupower-gui -p && notify-send 'Set to performance optimized settings'
|
bind = $mainMod ALT, P, exec, hyprctl keyword monitor eDP-1, 2880x1800@120, 0x0, 1.5 && cpupower-gui -p && notify-send 'Set to performance optimized settings'
|
||||||
|
|
||||||
|
# ── Using docked ────────────────────────────────────────────────────
|
||||||
|
bind = $mainMod ALT, D, exec, hyprctl keyword monitor eDP-1, disable
|
||||||
|
|
||||||
# ── Vivado inversion ────────────────────────────────────────────────
|
# ── Vivado inversion ────────────────────────────────────────────────
|
||||||
windowrule = plugin:invertwindow, class:Vivado
|
windowrule = plugin:invertwindow, class:Vivado
|
||||||
|
@@ -9,16 +9,12 @@
|
|||||||
#██████████████ █████ ███████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
#██████████████ █████ ███████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
||||||
|
|
||||||
|
|
||||||
general {
|
|
||||||
grace = 15
|
|
||||||
}
|
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ BACKGROUND │
|
# │ BACKGROUND │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
background {
|
background {
|
||||||
monitor =
|
monitor =
|
||||||
path = /home/janis/NextCloud/Wallpapers/dark/colour-splash.jpg # Or screenshot
|
path = /home/janis/NextCloud/Wallpapers/dark/mountains.jpg # Or screenshot
|
||||||
|
|
||||||
blur_passes = 1
|
blur_passes = 1
|
||||||
}
|
}
|
||||||
|
@@ -17,6 +17,7 @@ font_size 12.0
|
|||||||
# │ Cursor config │
|
# │ Cursor config │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
cursor_trail 1
|
cursor_trail 1
|
||||||
|
cursor_trail_start_threshold 0
|
||||||
|
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
|
2
config/lint/.indentconfig.yaml
Normal file
2
config/lint/.indentconfig.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
paths:
|
||||||
|
- /home/janis/projects/active/dotfiles/config/lint/latexfmt.yaml
|
65
config/lint/dump
Normal file
65
config/lint/dump
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
// @ts-check
|
||||||
|
|
||||||
|
import eslint from '@eslint/js';
|
||||||
|
import tseslint from 'typescript-eslint';
|
||||||
|
import stylistic from '@stylistic/eslint-plugin';
|
||||||
|
|
||||||
|
export default tseslint.config(
|
||||||
|
eslint.configs.recommended,
|
||||||
|
...tseslint.configs.recommended,
|
||||||
|
{
|
||||||
|
'plugins': {
|
||||||
|
'@stylistic/js': stylistic,
|
||||||
|
'@stylistic/ts': stylistic,
|
||||||
|
},
|
||||||
|
'rules': {
|
||||||
|
// Formatting
|
||||||
|
'@stylistic/js/array-bracket-newline': [ 'error', { 'multiline': true, 'minItems': 4 } ],
|
||||||
|
'@stylistic/js/array-bracket-spacing': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/array-element-newline': [ 'error', { 'multiline': true, 'minItems': 4 } ],
|
||||||
|
'@stylistic/js/arrow-parens': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/arrow-spacing': [ 'error', { 'before': true, 'after': true } ],
|
||||||
|
'@stylistic/js/block-spacing': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/brace-style': [ 'error', '1tbs' ],
|
||||||
|
'@stylistic/js/comma-spacing': [ 'error', { 'before': false, 'after': true } ],
|
||||||
|
'@stylistic/js/comma-style': [ 'error', 'last' ],
|
||||||
|
'@stylistic/js/dot-location': [ 'error', 'property' ],
|
||||||
|
'@stylistic/js/eol-last': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/function-call-spacing': [ 'error', 'never' ],
|
||||||
|
'@stylistic/js/implicit-arrow-linebreak': [ 'error', 'beside' ],
|
||||||
|
'@stylistic/js/indent': [ 'error', 4 ],
|
||||||
|
'@stylistic/js/key-spacing': [ 'error', { 'beforeColon': false, 'afterColon': true } ],
|
||||||
|
'@stylistic/js/keyword-spacing': [ 'error', { 'before': true, 'after': true } ],
|
||||||
|
'@stylistic/js/lines-between-class-members': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/new-parens': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/no-extra-parens': [ 'error', 'all' ],
|
||||||
|
'@stylistic/js/no-extra-semi': 'error',
|
||||||
|
'@stylistic/js/no-floating-decimal': 'error',
|
||||||
|
'@stylistic/js/no-mixed-operators': 'error',
|
||||||
|
'@stylistic/js/no-mixed-spaces-and-tabs': 'error',
|
||||||
|
'@stylistic/js/no-multi-spaces': 'error',
|
||||||
|
'@stylistic/js/no-trailing-spaces': 'error',
|
||||||
|
'@stylistic/js/no-whitespace-before-property': 'error',
|
||||||
|
'@stylistic/js/object-curly-newline': [ 'error', { 'multiline': true, 'minProperties': 3 } ],
|
||||||
|
'@stylistic/js/object-curly-spacing': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/one-var-declaration-per-line': 'error',
|
||||||
|
'@stylistic/js/quote-props': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/quotes': [ 'error', 'single' ],
|
||||||
|
'@stylistic/js/rest-spread-spacing': [ 'error', 'never' ],
|
||||||
|
'@stylistic/js/semi': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/semi-spacing': [ 'error', { 'before': false, 'after': true } ],
|
||||||
|
'@stylistic/js/semi-style': [ 'error', 'last' ],
|
||||||
|
'@stylistic/js/space-before-blocks': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/space-before-function-paren': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/space-in-parens': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/space-infix-ops': [ 'error', { 'int32Hint': false } ],
|
||||||
|
'@stylistic/js/space-unary-ops': 'error',
|
||||||
|
'@stylistic/js/spaced-comment': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/switch-colon-spacing': 'error',
|
||||||
|
'@stylistic/js/template-curly-spacing': [ 'error', 'always' ],
|
||||||
|
'@stylistic/js/wrap-iife': [ 'error', 'inside' ],
|
||||||
|
'@stylistic/js/wrap-regex': 'error',
|
||||||
|
'@stylistic/ts/type-annotation-spacing': 'error',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
@@ -1,65 +1,702 @@
|
|||||||
// @ts-check
|
import vue from 'eslint-plugin-vue';
|
||||||
|
|
||||||
import eslint from '@eslint/js';
|
import eslint from '@eslint/js';
|
||||||
import tseslint from 'typescript-eslint';
|
import globals from 'globals';
|
||||||
|
import typescript from '@typescript-eslint/eslint-plugin';
|
||||||
import stylistic from '@stylistic/eslint-plugin';
|
import stylistic from '@stylistic/eslint-plugin';
|
||||||
|
import tseslint from 'typescript-eslint';
|
||||||
|
|
||||||
export default tseslint.config(
|
const style = {
|
||||||
eslint.configs.recommended,
|
|
||||||
...tseslint.configs.recommended,
|
|
||||||
{
|
|
||||||
'plugins': {
|
'plugins': {
|
||||||
|
'@stylistic': stylistic,
|
||||||
'@stylistic/js': stylistic,
|
'@stylistic/js': stylistic,
|
||||||
'@stylistic/ts': stylistic,
|
'@stylistic/ts': stylistic,
|
||||||
},
|
},
|
||||||
|
'files': [
|
||||||
|
'**/*.ts',
|
||||||
|
'**/*.js',
|
||||||
|
'**/*.mjs',
|
||||||
|
'**/*.cjs',
|
||||||
|
'**/*.tsx',
|
||||||
|
'**/*.jsx'
|
||||||
|
],
|
||||||
'rules': {
|
'rules': {
|
||||||
// Formatting
|
// Formatting
|
||||||
'@stylistic/js/array-bracket-newline': [ 'error', { 'multiline': true, 'minItems': 4 } ],
|
'@stylistic/array-bracket-newline': [
|
||||||
'@stylistic/js/array-bracket-spacing': [ 'error', 'always' ],
|
'error',
|
||||||
'@stylistic/js/array-element-newline': [ 'error', { 'multiline': true, 'minItems': 4 } ],
|
{
|
||||||
'@stylistic/js/arrow-parens': [ 'error', 'always' ],
|
'multiline': true,
|
||||||
'@stylistic/js/arrow-spacing': [ 'error', { 'before': true, 'after': true } ],
|
'minItems': 2
|
||||||
'@stylistic/js/block-spacing': [ 'error', 'always' ],
|
}
|
||||||
'@stylistic/js/brace-style': [ 'error', '1tbs' ],
|
],
|
||||||
'@stylistic/js/comma-spacing': [ 'error', { 'before': false, 'after': true } ],
|
'@stylistic/array-bracket-spacing': [
|
||||||
'@stylistic/js/comma-style': [ 'error', 'last' ],
|
'error',
|
||||||
'@stylistic/js/dot-location': [ 'error', 'property' ],
|
'always'
|
||||||
'@stylistic/js/eol-last': [ 'error', 'always' ],
|
],
|
||||||
'@stylistic/js/function-call-spacing': [ 'error', 'never' ],
|
'@stylistic/array-element-newline': [
|
||||||
'@stylistic/js/implicit-arrow-linebreak': [ 'error', 'beside' ],
|
'error',
|
||||||
'@stylistic/js/indent': [ 'error', 4 ],
|
{
|
||||||
'@stylistic/js/key-spacing': [ 'error', { 'beforeColon': false, 'afterColon': true } ],
|
'multiline': true,
|
||||||
'@stylistic/js/keyword-spacing': [ 'error', { 'before': true, 'after': true } ],
|
'minItems': 2
|
||||||
'@stylistic/js/lines-between-class-members': [ 'error', 'always' ],
|
}
|
||||||
'@stylistic/js/new-parens': [ 'error', 'always' ],
|
],
|
||||||
'@stylistic/js/no-extra-parens': [ 'error', 'all' ],
|
'@stylistic/arrow-parens': [
|
||||||
'@stylistic/js/no-extra-semi': 'error',
|
'error',
|
||||||
'@stylistic/js/no-floating-decimal': 'error',
|
'as-needed'
|
||||||
'@stylistic/js/no-mixed-operators': 'error',
|
],
|
||||||
'@stylistic/js/no-mixed-spaces-and-tabs': 'error',
|
'@stylistic/arrow-spacing': [
|
||||||
'@stylistic/js/no-multi-spaces': 'error',
|
'error',
|
||||||
'@stylistic/js/no-trailing-spaces': 'error',
|
{
|
||||||
'@stylistic/js/no-whitespace-before-property': 'error',
|
'before': true,
|
||||||
'@stylistic/js/object-curly-newline': [ 'error', { 'multiline': true, 'minProperties': 3 } ],
|
'after': true
|
||||||
'@stylistic/js/object-curly-spacing': [ 'error', 'always' ],
|
}
|
||||||
'@stylistic/js/one-var-declaration-per-line': 'error',
|
],
|
||||||
'@stylistic/js/quote-props': [ 'error', 'always' ],
|
'@stylistic/block-spacing': [
|
||||||
'@stylistic/js/quotes': [ 'error', 'single' ],
|
'error',
|
||||||
'@stylistic/js/rest-spread-spacing': [ 'error', 'never' ],
|
'always'
|
||||||
'@stylistic/js/semi': [ 'error', 'always' ],
|
],
|
||||||
'@stylistic/js/semi-spacing': [ 'error', { 'before': false, 'after': true } ],
|
'@stylistic/brace-style': [
|
||||||
'@stylistic/js/semi-style': [ 'error', 'last' ],
|
'error',
|
||||||
'@stylistic/js/space-before-blocks': [ 'error', 'always' ],
|
'1tbs'
|
||||||
'@stylistic/js/space-before-function-paren': [ 'error', 'always' ],
|
],
|
||||||
'@stylistic/js/space-in-parens': [ 'error', 'always' ],
|
'@stylistic/comma-spacing': [
|
||||||
'@stylistic/js/space-infix-ops': [ 'error', { 'int32Hint': false } ],
|
'error',
|
||||||
'@stylistic/js/space-unary-ops': 'error',
|
{
|
||||||
'@stylistic/js/spaced-comment': [ 'error', 'always' ],
|
'before': false,
|
||||||
'@stylistic/js/switch-colon-spacing': 'error',
|
'after': true
|
||||||
'@stylistic/js/template-curly-spacing': [ 'error', 'always' ],
|
}
|
||||||
'@stylistic/js/wrap-iife': [ 'error', 'inside' ],
|
],
|
||||||
'@stylistic/js/wrap-regex': 'error',
|
'@stylistic/comma-style': [
|
||||||
|
'error',
|
||||||
|
'last'
|
||||||
|
],
|
||||||
|
'@stylistic/dot-location': [
|
||||||
|
'error',
|
||||||
|
'property'
|
||||||
|
],
|
||||||
|
'@stylistic/eol-last': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/function-call-spacing': [
|
||||||
|
'error',
|
||||||
|
'never'
|
||||||
|
],
|
||||||
|
'@stylistic/function-paren-newline': [
|
||||||
|
'error',
|
||||||
|
'multiline'
|
||||||
|
],
|
||||||
|
'@stylistic/function-call-argument-newline': [
|
||||||
|
'error',
|
||||||
|
'consistent'
|
||||||
|
],
|
||||||
|
'@stylistic/implicit-arrow-linebreak': [
|
||||||
|
'error',
|
||||||
|
'beside'
|
||||||
|
],
|
||||||
|
'@stylistic/indent': [
|
||||||
|
'error',
|
||||||
|
4
|
||||||
|
],
|
||||||
|
'@stylistic/key-spacing': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
'beforeColon': false,
|
||||||
|
'afterColon': true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'@stylistic/keyword-spacing': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
'before': true,
|
||||||
|
'after': true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'@stylistic/lines-between-class-members': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/max-len': [
|
||||||
|
'warn',
|
||||||
|
{
|
||||||
|
'code': 120,
|
||||||
|
'comments': 140,
|
||||||
|
'ignoreComments': false,
|
||||||
|
'ignoreUrls': true,
|
||||||
|
'ignoreStrings': false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'@stylistic/new-parens': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/newline-per-chained-call': [ 'error' ],
|
||||||
|
'@stylistic/no-extra-parens': [
|
||||||
|
'error',
|
||||||
|
'all',
|
||||||
|
{
|
||||||
|
'nestedBinaryExpressions': false,
|
||||||
|
'ternaryOperandBinaryExpressions': false,
|
||||||
|
'ignoreJSX': 'multi-line',
|
||||||
|
'nestedConditionalExpressions': false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'@stylistic/no-extra-semi': 'error',
|
||||||
|
'@stylistic/no-floating-decimal': 'error',
|
||||||
|
'@stylistic/no-mixed-operators': 'error',
|
||||||
|
'@stylistic/no-mixed-spaces-and-tabs': 'error',
|
||||||
|
'@stylistic/no-multi-spaces': 'error',
|
||||||
|
'@stylistic/no-multiple-empty-lines': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
'max': 3,
|
||||||
|
'maxEOF': 2
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'@stylistic/no-tabs': 'error',
|
||||||
|
'@stylistic/no-trailing-spaces': 'error',
|
||||||
|
'@stylistic/no-whitespace-before-property': 'error',
|
||||||
|
'@stylistic/object-curly-newline': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
'multiline': true,
|
||||||
|
'minProperties': 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'@stylistic/object-curly-spacing': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/object-property-newline': 'error',
|
||||||
|
'@stylistic/operator-linebreak': [
|
||||||
|
'error',
|
||||||
|
'before'
|
||||||
|
],
|
||||||
|
'@stylistic/one-var-declaration-per-line': 'error',
|
||||||
|
'@stylistic/padded-blocks': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
'blocks': 'never',
|
||||||
|
'classes': 'always',
|
||||||
|
'switches': 'never',
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
// Padding lines. The most in-depth part of this config
|
||||||
|
'@stylistic/padding-line-between-statements': [
|
||||||
|
'error',
|
||||||
|
// Variables, Constants
|
||||||
|
{
|
||||||
|
'blankLine': 'never',
|
||||||
|
'prev': 'var',
|
||||||
|
'next': 'var'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'never',
|
||||||
|
'prev': 'let',
|
||||||
|
'next': 'let'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'never',
|
||||||
|
'prev': 'const',
|
||||||
|
'next': 'const'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'var',
|
||||||
|
'next': [
|
||||||
|
'block',
|
||||||
|
'block-like',
|
||||||
|
'break',
|
||||||
|
'cjs-export',
|
||||||
|
'cjs-import',
|
||||||
|
'class',
|
||||||
|
'const',
|
||||||
|
'continue',
|
||||||
|
'debugger',
|
||||||
|
'directive',
|
||||||
|
'do',
|
||||||
|
'empty',
|
||||||
|
'export',
|
||||||
|
'expression',
|
||||||
|
'for',
|
||||||
|
'function',
|
||||||
|
'if',
|
||||||
|
'iife',
|
||||||
|
'import',
|
||||||
|
'let',
|
||||||
|
'return',
|
||||||
|
'switch',
|
||||||
|
'throw',
|
||||||
|
'try',
|
||||||
|
'var',
|
||||||
|
'with'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'let',
|
||||||
|
'next': [
|
||||||
|
'block',
|
||||||
|
'block-like',
|
||||||
|
'break',
|
||||||
|
'cjs-export',
|
||||||
|
'cjs-import',
|
||||||
|
'class',
|
||||||
|
'const',
|
||||||
|
'continue',
|
||||||
|
'debugger',
|
||||||
|
'directive',
|
||||||
|
'do',
|
||||||
|
'empty',
|
||||||
|
'export',
|
||||||
|
'expression',
|
||||||
|
'for',
|
||||||
|
'function',
|
||||||
|
'if',
|
||||||
|
'iife',
|
||||||
|
'import',
|
||||||
|
'return',
|
||||||
|
'switch',
|
||||||
|
'throw',
|
||||||
|
'try',
|
||||||
|
'var',
|
||||||
|
'while',
|
||||||
|
'with'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'const',
|
||||||
|
'next': [
|
||||||
|
'block',
|
||||||
|
'block-like',
|
||||||
|
'break',
|
||||||
|
'cjs-export',
|
||||||
|
'cjs-import',
|
||||||
|
'class',
|
||||||
|
'continue',
|
||||||
|
'debugger',
|
||||||
|
'directive',
|
||||||
|
'do',
|
||||||
|
'empty',
|
||||||
|
'export',
|
||||||
|
'expression',
|
||||||
|
'for',
|
||||||
|
'function',
|
||||||
|
'if',
|
||||||
|
'iife',
|
||||||
|
'import',
|
||||||
|
'let',
|
||||||
|
'return',
|
||||||
|
'switch',
|
||||||
|
'throw',
|
||||||
|
'try',
|
||||||
|
'var',
|
||||||
|
'while',
|
||||||
|
'with'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// Import
|
||||||
|
{
|
||||||
|
'blankLine': 'never',
|
||||||
|
'prev': 'import',
|
||||||
|
'next': 'import'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'never',
|
||||||
|
'prev': 'cjs-import',
|
||||||
|
'next': 'cjs-import'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': [
|
||||||
|
'block',
|
||||||
|
'block-like',
|
||||||
|
'break',
|
||||||
|
'cjs-export',
|
||||||
|
'class',
|
||||||
|
'const',
|
||||||
|
'continue',
|
||||||
|
'debugger',
|
||||||
|
'directive',
|
||||||
|
'do',
|
||||||
|
'empty',
|
||||||
|
'export',
|
||||||
|
'expression',
|
||||||
|
'for',
|
||||||
|
'function',
|
||||||
|
'if',
|
||||||
|
'iife',
|
||||||
|
'let',
|
||||||
|
'return',
|
||||||
|
'switch',
|
||||||
|
'throw',
|
||||||
|
'try',
|
||||||
|
'var',
|
||||||
|
'while',
|
||||||
|
'with'
|
||||||
|
],
|
||||||
|
'next': 'cjs-import'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'cjs-import',
|
||||||
|
'next': [
|
||||||
|
'block',
|
||||||
|
'block-like',
|
||||||
|
'break',
|
||||||
|
'cjs-export',
|
||||||
|
'class',
|
||||||
|
'const',
|
||||||
|
'continue',
|
||||||
|
'debugger',
|
||||||
|
'directive',
|
||||||
|
'do',
|
||||||
|
'empty',
|
||||||
|
'export',
|
||||||
|
'expression',
|
||||||
|
'for',
|
||||||
|
'function',
|
||||||
|
'if',
|
||||||
|
'iife',
|
||||||
|
'let',
|
||||||
|
'return',
|
||||||
|
'switch',
|
||||||
|
'throw',
|
||||||
|
'try',
|
||||||
|
'var',
|
||||||
|
'while',
|
||||||
|
'with'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': [
|
||||||
|
'block',
|
||||||
|
'block-like',
|
||||||
|
'break',
|
||||||
|
'cjs-export',
|
||||||
|
'class',
|
||||||
|
'const',
|
||||||
|
'continue',
|
||||||
|
'debugger',
|
||||||
|
'directive',
|
||||||
|
'do',
|
||||||
|
'empty',
|
||||||
|
'export',
|
||||||
|
'expression',
|
||||||
|
'for',
|
||||||
|
'function',
|
||||||
|
'if',
|
||||||
|
'iife',
|
||||||
|
'let',
|
||||||
|
'return',
|
||||||
|
'switch',
|
||||||
|
'throw',
|
||||||
|
'try',
|
||||||
|
'var',
|
||||||
|
'while',
|
||||||
|
'with'
|
||||||
|
],
|
||||||
|
'next': 'import'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'import',
|
||||||
|
'next': [
|
||||||
|
'block',
|
||||||
|
'block-like',
|
||||||
|
'break',
|
||||||
|
'cjs-export',
|
||||||
|
'class',
|
||||||
|
'const',
|
||||||
|
'continue',
|
||||||
|
'debugger',
|
||||||
|
'directive',
|
||||||
|
'do',
|
||||||
|
'empty',
|
||||||
|
'export',
|
||||||
|
'expression',
|
||||||
|
'for',
|
||||||
|
'function',
|
||||||
|
'if',
|
||||||
|
'iife',
|
||||||
|
'let',
|
||||||
|
'return',
|
||||||
|
'switch',
|
||||||
|
'throw',
|
||||||
|
'try',
|
||||||
|
'var',
|
||||||
|
'while',
|
||||||
|
'with'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
// If
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'if'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'if',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
// For
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'for'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'for',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
// While
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'while'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'while',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
// Functions
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'function'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'function',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
// Block Statements
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'block-like'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'block-like',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
// Switch
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'switch'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'switch',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
// Try-Catch
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'try'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'try',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
// Throw
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'throw'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'throw',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
// Return
|
||||||
|
{
|
||||||
|
'blankLine': 'never',
|
||||||
|
'prev': 'return',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'return'
|
||||||
|
},
|
||||||
|
// Export
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'export'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'export',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'cjs-export'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'cjs-export',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
// Classes
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': '*',
|
||||||
|
'next': 'class'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'blankLine': 'always',
|
||||||
|
'prev': 'class',
|
||||||
|
'next': '*'
|
||||||
|
},
|
||||||
|
],
|
||||||
|
'@stylistic/quote-props': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/quotes': [
|
||||||
|
'error',
|
||||||
|
'single'
|
||||||
|
],
|
||||||
|
'@stylistic/rest-spread-spacing': [
|
||||||
|
'error',
|
||||||
|
'never'
|
||||||
|
],
|
||||||
|
'@stylistic/semi': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/semi-spacing': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
'before': false,
|
||||||
|
'after': true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'@stylistic/semi-style': [
|
||||||
|
'error',
|
||||||
|
'last'
|
||||||
|
],
|
||||||
|
'@stylistic/space-before-blocks': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/space-before-function-paren': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/space-in-parens': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/space-infix-ops': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
'int32Hint': false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'@stylistic/space-unary-ops': 'error',
|
||||||
|
'@stylistic/spaced-comment': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/template-curly-spacing': [
|
||||||
|
'error',
|
||||||
|
'always'
|
||||||
|
],
|
||||||
|
'@stylistic/switch-colon-spacing': 'error',
|
||||||
|
'@stylistic/wrap-iife': [
|
||||||
|
'error',
|
||||||
|
'inside'
|
||||||
|
],
|
||||||
|
'@stylistic/wrap-regex': 'error',
|
||||||
'@stylistic/ts/type-annotation-spacing': 'error',
|
'@stylistic/ts/type-annotation-spacing': 'error',
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @type {import('eslint').Linter.Config} */
|
||||||
|
export default tseslint.config(
|
||||||
|
// Base JavaScript rules
|
||||||
|
eslint.configs.recommended,
|
||||||
|
tseslint.configs.recommended,
|
||||||
|
style,
|
||||||
|
|
||||||
|
// Vue support (including TS and JSX inside SFCs)
|
||||||
|
{
|
||||||
|
'files': [ '**/*.vue' ],
|
||||||
|
'languageOptions': {
|
||||||
|
'sourceType': 'module',
|
||||||
|
'ecmaVersion': 'latest',
|
||||||
|
'globals': globals.browser,
|
||||||
|
'parserOptions': {
|
||||||
|
'parser': tseslint.parser,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'plugins': {
|
||||||
|
'vue': vue,
|
||||||
|
'@stylistic': stylistic,
|
||||||
|
'@stylistic/js': stylistic,
|
||||||
|
'@stylistic/ts': stylistic,
|
||||||
|
'@typescript-eslint': typescript,
|
||||||
|
},
|
||||||
|
'extends': [
|
||||||
|
eslint.configs.recommended,
|
||||||
|
...vue.configs['flat/recommended']
|
||||||
|
],
|
||||||
|
'rules': {
|
||||||
|
...typescript.configs.recommended.rules,
|
||||||
|
...style.rules,
|
||||||
|
|
||||||
|
// Vue specific rules
|
||||||
|
'@stylistic/indent': 'off',
|
||||||
|
'vue/html-indent': [
|
||||||
|
'error',
|
||||||
|
4
|
||||||
|
],
|
||||||
|
'vue/html-comment-indent': [
|
||||||
|
'error',
|
||||||
|
4
|
||||||
|
],
|
||||||
|
'vue/script-indent': [
|
||||||
|
'error',
|
||||||
|
4,
|
||||||
|
{
|
||||||
|
'baseIndent': 1,
|
||||||
|
'switchCase': 1
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
'vue/html-self-closing': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
'html': {
|
||||||
|
'void': 'never',
|
||||||
|
'normal': 'never',
|
||||||
|
'component': 'always'
|
||||||
|
},
|
||||||
|
'svg': 'always',
|
||||||
|
'math': 'never'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'vue/max-attributes-per-line': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
'singleline': 3,
|
||||||
|
'multiline': 1,
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
);
|
);
|
||||||
|
75
config/lint/latexfmt.yaml
Normal file
75
config/lint/latexfmt.yaml
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
# Use spaces for indent (because f*k tabs)
|
||||||
|
defaultIndent: " "
|
||||||
|
|
||||||
|
# Limit Number of backups
|
||||||
|
maxNumberOfBackups: 3
|
||||||
|
|
||||||
|
indentRules:
|
||||||
|
recall: " "
|
||||||
|
remarks: " "
|
||||||
|
guides: " "
|
||||||
|
properties: " "
|
||||||
|
restrictions: " "
|
||||||
|
limitations: " "
|
||||||
|
terms: " "
|
||||||
|
notation: " "
|
||||||
|
usage: " "
|
||||||
|
task: " "
|
||||||
|
proof: " "
|
||||||
|
general: " "
|
||||||
|
simplebox: " "
|
||||||
|
definition: " "
|
||||||
|
theorem: " "
|
||||||
|
lemma: " "
|
||||||
|
corollary: " "
|
||||||
|
axiom: " "
|
||||||
|
fact: " "
|
||||||
|
proposition: " "
|
||||||
|
example: " "
|
||||||
|
formula: " "
|
||||||
|
conjugation: " "
|
||||||
|
forms: " "
|
||||||
|
|
||||||
|
lookForAlignDelims:
|
||||||
|
tables:
|
||||||
|
delims: 1
|
||||||
|
alignDoubleBackSlash: 1
|
||||||
|
spacesBeforeDoubleBackSlash: 1
|
||||||
|
multiColumnGrouping: 0
|
||||||
|
alignRowsWithoutMaxDelims: 1
|
||||||
|
spacesBeforeAmpersand: 1
|
||||||
|
spacesAfterAmpersand: 1
|
||||||
|
justification: left
|
||||||
|
alignFinalDoubleBackSlash: 0
|
||||||
|
dontMeasure: 0
|
||||||
|
delimiterRegEx: (?<!\\)(&)
|
||||||
|
delimiterJustification: left
|
||||||
|
lookForChildCodeBlocks: 1
|
||||||
|
alignContentAfterDoubleBackSlash: 0
|
||||||
|
spacesAfterDoubleBackSlash: 1
|
||||||
|
|
||||||
|
specialBeginEnd:
|
||||||
|
If:
|
||||||
|
begin: '\\If'
|
||||||
|
middle:
|
||||||
|
- '\\ElsIf'
|
||||||
|
- '\\Else'
|
||||||
|
end: '\\EndIf'
|
||||||
|
lookForThis: 1
|
||||||
|
For:
|
||||||
|
begin: '\\For'
|
||||||
|
end: '\\EndFor'
|
||||||
|
lookForThis: 1
|
||||||
|
Procedure:
|
||||||
|
begin: '\\Procedure'
|
||||||
|
end: '\\EndProcedure'
|
||||||
|
lookForThis: 1
|
||||||
|
Function:
|
||||||
|
begin: '\\Function'
|
||||||
|
end: '\\EndFunction'
|
||||||
|
lookForThis: 1
|
||||||
|
While:
|
||||||
|
begin: '\\While'
|
||||||
|
end: '\\EndWhile'
|
||||||
|
lookForThis: 1
|
||||||
|
specialBeforeCommand: 1
|
8
config/lint/package.json
Normal file
8
config/lint/package.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"devDependencies": {
|
||||||
|
"@eslint/js": "^9.28.0",
|
||||||
|
"@stylistic/eslint-plugin": "^4.4.1",
|
||||||
|
"eslint-plugin-vue": "^10.2.0",
|
||||||
|
"typescript-eslint": "^8.33.1"
|
||||||
|
}
|
||||||
|
}
|
3
config/xdg-desktop-portal-termfilechooser/config
Normal file
3
config/xdg-desktop-portal-termfilechooser/config
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[filechooser]
|
||||||
|
cmd=yazi-wrapper.sh
|
||||||
|
default_dir=$HOME
|
@@ -8,19 +8,25 @@ prepend_keymap = [
|
|||||||
# Goto
|
# Goto
|
||||||
{ on = [ "g", "h" ], run = "cd ~", desc = "Go to ~" },
|
{ on = [ "g", "h" ], run = "cd ~", desc = "Go to ~" },
|
||||||
{ on = [ "g", "c", "c" ], run = "cd ~/.config", desc = "Go to ~/.config" },
|
{ on = [ "g", "c", "c" ], run = "cd ~/.config", desc = "Go to ~/.config" },
|
||||||
{ on = [ "g", "c", "h" ], run = "cd ~/.config/hypr", desc = "Go to Hyprland config" },
|
|
||||||
{ on = [ "g", "c", "f" ], run = "cd ~/.config/fish", desc = "Go to Fish config" },
|
|
||||||
{ on = [ "g", "c", "y" ], run = "cd ~/.config/yazi", desc = "Go to Yazi config" },
|
|
||||||
{ on = [ "g", "c", "w" ], run = "cd ~/.config/waybar", desc = "Go to waybar config" },
|
|
||||||
{ on = [ "g", "c", "n" ], run = "cd ~/.config/nvim", desc = "Go to NeoVim config" },
|
|
||||||
{ on = [ "g", "a" ], run = "cd ~/.cache", desc = "Go to ~/.cache" },
|
{ on = [ "g", "a" ], run = "cd ~/.cache", desc = "Go to ~/.cache" },
|
||||||
|
{ on = [ "g", "l", "b" ], run = "cd ~/.local/bin", desc = "Go to ~/.local/bin" },
|
||||||
|
{ on = [ "g", "l", "s" ], run = "cd ~/.local/share", desc = "Go to ~/.local/share" },
|
||||||
|
{ on = [ "g", "c", "h" ], run = "cd ~/projects/active/dotfiles/config/hypr", desc = "Go to Hyprland config" },
|
||||||
|
{ on = [ "g", "c", "f" ], run = "cd ~/projects/active/dotfiles/config/fish", desc = "Go to Fish config" },
|
||||||
|
{ on = [ "g", "c", "y" ], run = "cd ~/projects/active/dotfiles/config/yazi", desc = "Go to Yazi config" },
|
||||||
|
{ on = [ "g", "c", "a" ], run = "cd ~/projects/active/dotfiles/config/astal", desc = "Go to astal config" },
|
||||||
|
{ on = [ "g", "c", "l" ], run = "cd ~/projects/active/dotfiles/config/lint", desc = "Go to linter configs" },
|
||||||
|
{ on = [ "g", "c", "k" ], run = "cd ~/projects/active/dotfiles/config/kitty", desc = "Go to kitty config" },
|
||||||
|
{ on = [ "g", "c", "r" ], run = "cd ~/projects/active/dotfiles/config/rofi", desc = "Go to rofi config" },
|
||||||
|
{ on = [ "g", "c", "s" ], run = "cd ~/projects/active/dotfiles/scripts", desc = "Go to script" },
|
||||||
|
{ on = [ "g", "c", "d" ], run = "cd ~/projects/active/dotfiles", desc = "Go to NeoVim config" },
|
||||||
|
{ on = [ "g", "c", "n" ], run = "cd ~/projects/active/nvim", desc = "Go to NeoVim config" },
|
||||||
{ on = [ "g", "n" ], run = "cd ~/NextCloud/Documents/", desc = "Go to NextCloud Documents" },
|
{ on = [ "g", "n" ], run = "cd ~/NextCloud/Documents/", desc = "Go to NextCloud Documents" },
|
||||||
|
{ on = [ "g", "w" ], run = "cd ~/NextCloud/Wallpapers", desc = "Go to Wallpapers" },
|
||||||
{ on = [ "g", "e", "c" ], run = "cd ~/projects/active/eth-gitlab/eth-code-expert/Semester2/", desc = "Go to ETH-Code-Expert" },
|
{ on = [ "g", "e", "c" ], run = "cd ~/projects/active/eth-gitlab/eth-code-expert/Semester2/", desc = "Go to ETH-Code-Expert" },
|
||||||
{ on = [ "g", "e", "n" ], run = "cd ~/NextCloud/Documents/ETH/Semester2", desc = "Go to ETH Nextcloud" },
|
{ on = [ "g", "e", "n" ], run = "cd ~/NextCloud/Documents/ETH/Semester2", desc = "Go to ETH Nextcloud" },
|
||||||
{ on = [ "g", "e", "p" ], run = "cd ~/projects/active/eth/semester2/", desc = "Go to ETH notes folder" },
|
{ on = [ "g", "e", "p" ], run = "cd ~/projects/active/eth/semester2/", desc = "Go to ETH notes folder" },
|
||||||
{ on = [ "g", "e", "g" ], run = "cd ~/projects/active/eth-gitlab/pprog25-jahutz/", desc = "Go to ETH Gitlab folder" },
|
{ on = [ "g", "e", "g" ], run = "cd ~/projects/active/eth-gitlab/pprog25-jahutz/", desc = "Go to ETH Gitlab folder" },
|
||||||
{ on = [ "g", "l", "b" ], run = "cd ~/.local/bin", desc = "Go to ~/.local/bin" },
|
|
||||||
{ on = [ "g", "l", "s" ], run = "cd ~/.local/share", desc = "Go to ~/.local/share" },
|
|
||||||
{ on = [ "g", "s", "h" ], run = "cd ~/.steam/steam/steamapps/common", desc = "Go to ~/.steam/steam/steamapps/common" },
|
{ on = [ "g", "s", "h" ], run = "cd ~/.steam/steam/steamapps/common", desc = "Go to ~/.steam/steam/steamapps/common" },
|
||||||
{ on = [ "g", "s", "g" ], run = "cd /mnt/games/SteamLibrary", desc = "Go to SteamLibrary on NTFS partition" },
|
{ on = [ "g", "s", "g" ], run = "cd /mnt/games/SteamLibrary", desc = "Go to SteamLibrary on NTFS partition" },
|
||||||
{ on = [ "g", "s", "s" ], run = "cd /mnt/secondary/SteamLibrary", desc = "Go to SteamLibrary on main games drive" },
|
{ on = [ "g", "s", "s" ], run = "cd /mnt/secondary/SteamLibrary", desc = "Go to SteamLibrary on main games drive" },
|
||||||
@@ -34,4 +40,5 @@ prepend_keymap = [
|
|||||||
{ on = [ "g", "/" ], run = "cd /", desc = "Go to /" },
|
{ on = [ "g", "/" ], run = "cd /", desc = "Go to /" },
|
||||||
{ on = [ "g", "m" ], run = "cd /run/media/$USER", desc = "Go to /run/media" },
|
{ on = [ "g", "m" ], run = "cd /run/media/$USER", desc = "Go to /run/media" },
|
||||||
{ on = [ "g", "<Space>" ], run = "cd --interactive", desc = "Go to interactively" },
|
{ on = [ "g", "<Space>" ], run = "cd --interactive", desc = "Go to interactively" },
|
||||||
|
{ on = [ "g", "-" ], run = "plugin vcs-files", desc = "Show Git file changes" },
|
||||||
]
|
]
|
||||||
|
@@ -8,5 +8,10 @@ use = "boydaihungst/restore"
|
|||||||
rev = "5d22884"
|
rev = "5d22884"
|
||||||
hash = "8e6fc2d660f661c91e30b10dd1a251b8"
|
hash = "8e6fc2d660f661c91e30b10dd1a251b8"
|
||||||
|
|
||||||
|
[[plugin.deps]]
|
||||||
|
use = "yazi-rs/plugins:vcs-files"
|
||||||
|
rev = "e95c7b3"
|
||||||
|
hash = "cc8da55f1deda45ee3787cc97b58ffc9"
|
||||||
|
|
||||||
[flavor]
|
[flavor]
|
||||||
deps = []
|
deps = []
|
||||||
|
@@ -8,3 +8,10 @@ prepend_previewers = [
|
|||||||
{ mime = "application/x-rar", run = "ouch" },
|
{ mime = "application/x-rar", run = "ouch" },
|
||||||
{ mime = "application/x-xz", run = "ouch" },
|
{ mime = "application/x-xz", run = "ouch" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[opener]
|
||||||
|
open = [
|
||||||
|
{ run = 'xdg-open "$@"', desc = "Open" },
|
||||||
|
{ run = 'okular "$@"', desc = "Open in Okular" },
|
||||||
|
{ run = 'evince "$@"', desc = "Open in Evince" },
|
||||||
|
]
|
||||||
|
139
install
139
install
@@ -1,37 +1,140 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Read platform to install on (only if no platform file present in ~/.config/)
|
echo "
|
||||||
read -p "Choose the configs to install, Laptop or Desktop (l/D): " platform
|
==> Setting up arch4edu & yay
|
||||||
|
"
|
||||||
|
|
||||||
|
git clone https://aur.archlinux.org/yay
|
||||||
|
cd yay
|
||||||
|
makepkg -si
|
||||||
|
cd ..
|
||||||
|
rm -rf yay
|
||||||
|
|
||||||
|
reflector -c 'Switzerland, Germany' --sort 'rate' --protocol https --latest 10 --save /etc/pacman.d/mirrorlist
|
||||||
|
echo "Server = https://at.arch4edu.mirror.kescher.at/\$arch" >/etc/pacman.d/mirrorlist
|
||||||
|
|
||||||
|
sudo cp ./system/pacman.conf /etc/pacman.conf
|
||||||
|
|
||||||
|
sudo pacman-key --recv-keys 7931B6D628C8D3BA
|
||||||
|
sudo pacman-key --finger 7931B6D628C8D3BA
|
||||||
|
sudo pacman-key --lsign-key 7931B6D628C8D3BA
|
||||||
|
|
||||||
# Packages to be added to install: aylurs-gtk-shell-git, brightnessctl, zoxide, trash-cli, fzf, ouch
|
|
||||||
# Install yazi plugins using ya pack -a ndtoan96/ouch and ya pack -a boydaihungst/restore
|
|
||||||
#
|
|
||||||
# TODO: get configs from current setup
|
|
||||||
# Hyprland
|
# Hyprland
|
||||||
yay -S hyprland hypridle hyprfreeze hyprlock plymouth aylurs-gtk-shell-git brightnessctl pulsemixer xdg-desktop-portal-hyprland
|
echo "
|
||||||
|
==> Installing Hyprland
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
yay -S --noconfirm --noremovemake hyprland hypridle hyprfreeze hyprlock aylurs-gtk-shell brightnessctl pulsemixer xdg-desktop-portal-hyprland cliphist grimblast wl-clipboard polkit-gnome swaybg polkit-kde-agent grim rofi cpio
|
||||||
|
|
||||||
# Audio, drivers, tools
|
# Audio, drivers
|
||||||
yay -S pipewire pipewire-alsa pipewire-pulse pipewire-jack mesa fish thunar yazi wireplumber grimblast wl-clipboard wget vimiv zoxide trash-cli fzf ouch zathura sensors radeontop lm-sensors
|
echo "
|
||||||
|
==> Installing drivers...
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
yay -S --noconfirm --noremovemake pipewire pipewire-alsa pipewire-pulse pipewire-jack mesa wireplumber trash-cli sensors radeontop lm-sensors smartmontools
|
||||||
|
|
||||||
|
# Tools
|
||||||
|
echo "
|
||||||
|
==> Installing tools...
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
yay -S --noconfirm --noremovemake fish fzf ouch zathura wget vimiv zoxide thunar yazi gnome-tweaks lxappearance gnome-keyring ffmpeg network-manager-applet cpupower-gui python-tkinter acpi python-pillow seahorse
|
||||||
|
|
||||||
# Set up yazi
|
# Set up yazi
|
||||||
ya pack -a ndtoan96/ouch
|
echo "
|
||||||
ya pack -a boydaihungst/restore
|
==> Setting up yazi...
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
ya pkg add ndtoan96/ouch
|
||||||
|
ya pkg add boydaihungst/restore
|
||||||
|
ya pkg add yazi-rs/plugins:vcs-files
|
||||||
|
|
||||||
# Fonts
|
# Fonts
|
||||||
yay -S adobe-source-code-pro-fonts gnome-font-viewer gnome-characters gnome-tweaks lxappearance kvantum gnome-keyring smartmontools ffmpeg polkit-gnome swaybg network-manager-applet polkit-kde-agent cpupower-gui ttf-fantasque-nerd ttf-jetbrains-mono-nerd ttf-fluentui-system-icons ttf-comfortaa
|
echo "
|
||||||
|
==> Installing fonts...
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
yay -S --noconfirm --noremovemake adobe-source-code-pro-fonts gnome-font-viewer gnome-characters ttf-fantasque-nerd ttf-jetbrains-mono-nerd ttf-fluentui-system-icons ttf-comfortaa candy-icons
|
||||||
|
|
||||||
# Programming
|
# Programming
|
||||||
yay -S meld docker vscodium kitty fish docker terminator ghex nodejs npm python-pip git-credential-manager-core-bin wine kate rustup cargo filezilla typescript-language-server php jdk vscode-css-languageserver vscode-html-languageserver bash-language-server lazygit
|
echo "
|
||||||
sudo npm i -g @vue/typescript-plugin
|
==> Installing coding tools...
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
yay -S --noconfirm --noremovemake docker vscodium kitty fish docker terminator bvi nodejs npm python-pip git-credential-manager-core-bin wine kate rustup cargo filezilla php jdk
|
||||||
|
|
||||||
# nvim
|
# nvim
|
||||||
yay -S neovim lua lua-language-server tree-sitter texlab stylua luarocks jdtls perl julia autojump pyright
|
echo "
|
||||||
|
==> Installing nvim...
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
yay -S --noconfirm --noremovemake neovim lua lua-language-server tree-sitter tree-sitter-cli texlab stylua luarocks jdtls perl julia pyright vscode-css-languageserver vscode-html-languageserver bash-language-server python-black proselint asmfmt typescript-language-server shfmt sass
|
||||||
|
sudo npm i -g @vue/typescript-plugin
|
||||||
|
|
||||||
# Internet
|
# Internet
|
||||||
yay -S librewolf-bin webcord-bin thunderbird rustdesk brave-bin
|
echo "
|
||||||
|
==> Installing internet programs...
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
yay -S --noconfirm --noremovemake librewolf-bin vesktop-bin thunderbird rustdesk brave-bin
|
||||||
|
|
||||||
# Utilities
|
# Utilities
|
||||||
yay -S okular vlc nextcloud-client p7zip zip unzip gnome-keyring noto-fonts thunderbird pamixer pavucontrol light neofetch bashtop hugo sddm uxplay upower
|
echo "
|
||||||
|
==> Installing other utilities...
|
||||||
|
"
|
||||||
|
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
|
||||||
|
|
||||||
# LaTeX
|
# LaTeX
|
||||||
yay -S texlive biber
|
echo "
|
||||||
|
==> Installing LaTeX...
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
yay -S --noconfirm --noremovemake texlive biber texlive-latexextra
|
||||||
|
|
||||||
|
# WebDev utilities
|
||||||
|
echo "
|
||||||
|
==> Installing webdev utilities...
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
sudo npm i -g create-vue sitemap-generator-cli
|
||||||
|
|
||||||
|
echo "
|
||||||
|
==> Doing system config...
|
||||||
|
"
|
||||||
|
sleep 2
|
||||||
|
sudo cp ./system/greetd/config.toml /etc/greetd/config.toml
|
||||||
|
chsh -s /bin/fish
|
||||||
|
sudo systemctl enable greetd
|
||||||
|
|
||||||
|
cd ./build/
|
||||||
|
npm i
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
cd ./config/astal/
|
||||||
|
mkdir node_modules && cd node_modules && ln -sf /usr/share/astal/gjs/ ./astal
|
||||||
|
cd ../../config/ags/notifications/
|
||||||
|
mkdir node_modules && cd node_modules && ln -sf /usr/share/astal/gjs/ ./astal
|
||||||
|
cd ~/projects/active/dotfiles/
|
||||||
|
|
||||||
|
./setup
|
||||||
|
|
||||||
|
cd ~/projects/active/
|
||||||
|
git clone https://git.janishutz.com/janishutz/nvim
|
||||||
|
cd nvim
|
||||||
|
./nvim-install.sh
|
||||||
|
|
||||||
|
xdg-settings set default-web-browser librewolf.desktop
|
||||||
|
xdg-mime default org.pwmt.zathura.desktop application/pdf
|
||||||
|
sudo systemctl disable rustdesk
|
||||||
|
hyprpm update
|
||||||
|
|
||||||
|
echo "
|
||||||
|
|
||||||
|
==> DONE!
|
||||||
|
|
||||||
|
Run the postinstall script after a reboot and logging into NextCloud
|
||||||
|
to install the grub theme and cursor icons.
|
||||||
|
Use GNOME Tweaks to change the necessary appearance settings.
|
||||||
|
"
|
||||||
|
21
notes.md
21
notes.md
@@ -17,12 +17,14 @@
|
|||||||
- [ ] AppLauncher (possibly, if anyrun is no good, probably not)
|
- [ ] AppLauncher (possibly, if anyrun is no good, probably not)
|
||||||
- [ ] OSD (see [here](https://github.com/Aylur/astal/tree/main/examples/gtk3/js))
|
- [ ] OSD (see [here](https://github.com/Aylur/astal/tree/main/examples/gtk3/js))
|
||||||
- [x] Open Window List for bar when hovering over window title and per-workspace when hovering over workspace
|
- [x] Open Window List for bar when hovering over window title and per-workspace when hovering over workspace
|
||||||
|
- [ ] Keybind to open QuickActions
|
||||||
|
- [ ] Improve handling of tray items (crashes on update of submenus)
|
||||||
- [ ] Text recognition
|
- [ ] Text recognition
|
||||||
- [ ] Theming
|
- [ ] Theming
|
||||||
- [x] Vivado dark mode
|
- [x] Vivado dark mode
|
||||||
- [x] GTK
|
- [x] GTK
|
||||||
- [x] QT (via environment variable)
|
- [x] QT (via environment variable)
|
||||||
- [x] ~Librewolf~
|
- [x] Librewolf
|
||||||
- [x] Astal
|
- [x] Astal
|
||||||
- [x] Hyprland
|
- [x] Hyprland
|
||||||
- [x] Rofi
|
- [x] Rofi
|
||||||
@@ -41,23 +43,26 @@
|
|||||||
- [ ] Read docs
|
- [ ] Read docs
|
||||||
- [ ] battery management
|
- [ ] battery management
|
||||||
- [ ] Programs
|
- [ ] Programs
|
||||||
- [ ] New image viewer (eog, vimiv)
|
- [ ] Switch to vimiv (make default and configure)
|
||||||
- [x] Other pdf reader (maybe -> zathura)
|
- [x] Other pdf reader (maybe -> zathura)
|
||||||
- [x] Maybe TUI archive manager (~felix-rs~, ouch in yazi)
|
- [x] Maybe TUI archive manager (~felix-rs~, ouch in yazi)
|
||||||
|
- [ ] vimiv
|
||||||
|
- [ ] Configure
|
||||||
|
- [ ] Theme
|
||||||
- [ ] Lazygit: Configure
|
- [ ] Lazygit: Configure
|
||||||
- [ ] Nvim (other repo)
|
- [ ] Nvim (other repo)
|
||||||
- [x] Replace notification handler (noice)
|
- [x] Replace notification handler (noice)
|
||||||
- [ ] Configure formatters (of Java, Cpp, TS/JS/Vue, Python)
|
- [ ] Configure formatters (of Java, Cpp, TS/JS/Vue, Python)
|
||||||
- [ ] Maybe: Add extra configs to commentbox
|
- [ ] Maybe: Add extra configs to commentbox
|
||||||
- [ ] Remove trouble (useless for my purposes)
|
- [ ] Remove trouble (useless for my purposes)
|
||||||
- [ ] Yazi
|
- [x] Yazi
|
||||||
- [x] More keybinds
|
- [x] More keybinds
|
||||||
- [ ] Configure
|
- [x] Configure
|
||||||
- [ ] Drag and drop support?
|
- [ ] ~Drag and drop support?~
|
||||||
- [ ] Check out plugins
|
- [x] Check out plugins
|
||||||
- [x] Use as file picker
|
- [x] Use as file picker
|
||||||
- [ ] SDDM
|
- [x] SDDM
|
||||||
- [ ] Replace with LightDM or ensure theming works, but prefer replacing, consider greetd + tuigreet
|
- [x] Replace with LightDM or ensure theming works, but prefer replacing, consider greetd + tuigreet
|
||||||
- [ ] Scripts
|
- [ ] Scripts
|
||||||
- [ ] Installer (after the basic OS setup is done (= from chroot onwards))
|
- [ ] Installer (after the basic OS setup is done (= from chroot onwards))
|
||||||
- [x] Theming script
|
- [x] Theming script
|
||||||
|
9
postinstall
Executable file
9
postinstall
Executable file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cd ~/NextCloud/Documents/Private/PC/
|
||||||
|
unzip ./oreo_spark_blue_cursors.zip
|
||||||
|
sudo mv ./oreo_spark_blue_cursors /usr/share/icons
|
||||||
|
|
||||||
|
cd ~/NextCloud/Documents/Private/PC/monterey-grub-theme/
|
||||||
|
sudo chmod +x ./install.sh
|
||||||
|
sudo ./install.sh
|
60
prompts.md
60
prompts.md
@@ -1,60 +0,0 @@
|
|||||||
# Bar
|
|
||||||
## Attempt 1
|
|
||||||
Use Astal (https://aylur.github.io/astal) to write me a new status bar for hyprland. You may use JSX (be aware, it's not react, but gjs based and has therefore some limitations), but I prefer using the other syntax that is similar to what it was for AGS (the old version of astal), which more closely resembles GTK syntax. The bar should include the following, from left to right:
|
|
||||||
Left aligned
|
|
||||||
- Date & Time (with seconds, preferably)
|
|
||||||
- System stats (i.e. CPU, Memory util, Screen Brightness & Battery status, if available)
|
|
||||||
- Workspace number
|
|
||||||
Centered
|
|
||||||
- The window name
|
|
||||||
Right aligned (still left to right)
|
|
||||||
- System tray
|
|
||||||
- QuickAction menu in GNOME QuickAction menu style, but only the closed version showing icons for volume, mic, WiFi / Ethernet and a Power icon. For the icons (all throughout the bar) use the fluentui-icons (so the Windows 11 icons). If you can't provide them here, tell me what icon should go there and I will put it there manually
|
|
||||||
|
|
||||||
The actual QuickAction Menu (which you could also write in a separate file) will provide options where I can pick WiFi, Bluetooth (also turn it on and off), change volume of mic and output, pick the mic and output, have media controls and have a power menu).
|
|
||||||
|
|
||||||
For the QuickAction menu, provide a function that is exposed from the file to open and close it, as for all the features (like enabling BT, WiFi, etc).
|
|
||||||
|
|
||||||
|
|
||||||
### Followups
|
|
||||||
To the WiFi and Bluetooth menus, add the option to pick a WiFi Network / Bluetooth device. Please also fully extract the QuickActions menu to a separate file.
|
|
||||||
|
|
||||||
|
|
||||||
Now, can you also provide scss for the bar, such that:
|
|
||||||
- I have an easy way to customize colours (which I will be doing using one of my scripts, so having a separate colour config file will be a great option)
|
|
||||||
- it is very rounded (the corners)
|
|
||||||
- it has a very sleek, but modern design, with only a single accent colour
|
|
||||||
- Hovering over something clickable uses a hover colour
|
|
||||||
|
|
||||||
|
|
||||||
## Attempt 2
|
|
||||||
Using AstalNetwork, can you write a UI (that can be integrated into a popover) and a corresponding backend that allows me to:
|
|
||||||
- Turn on/off networking and WiFi
|
|
||||||
- Select a WiFi Network
|
|
||||||
- Some way of adding a new connection (can be a special UI or simply opens up another tool like nm-applet's network config)
|
|
||||||
- WiFi-Auto-Connect
|
|
||||||
- Exposes a function (or multiple) through which I can get (as a bindable porperty):
|
|
||||||
- Current up/down speed
|
|
||||||
- Connection type
|
|
||||||
- WiFi SSID (if applicable)
|
|
||||||
- WiFi Signal Strength (if applicable)
|
|
||||||
- Local IP
|
|
||||||
|
|
||||||
I would prefer if you could split up the logic from the UI, i.e. have the logic in a separate TS file and have the UI as its own TSX file and simply import the logic
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# GTK THEME
|
|
||||||
Provide GTK CSS for Gtk 4, as short as possible, but including everything that is necessary to make it look good, where you have the following options for colours to pick. They will be replaced by a script (no need to provide that) according to some variables
|
|
||||||
- #000 (normal background)
|
|
||||||
- #111 (accent background, to differentiate, will be slightly brighter / darker
|
|
||||||
- #222 (secondary accent background, slightly brighter / darker than #111)
|
|
||||||
- #333 (inactive background, but could also be used to be slightly brighter / dark than #222)
|
|
||||||
- #555 (shadow colour)
|
|
||||||
- #555A (shadow colour, but as RGBA value)
|
|
||||||
- #F00 (accent colour, primary accent colour)
|
|
||||||
- #0F0 (secondary accent colour, use if it makes sense to differentiate from the primary accent)
|
|
||||||
- #00F (tertiary accent colour, use sparingly)
|
|
||||||
- #AAA (inactive colour, darker / brighter than primary foreground colour)
|
|
||||||
- #FFF (primary foreground colour)
|
|
||||||
Propose additional colours in a similar format (three-digit hex) and explain what they are for if necessary. Make the theme rounded and include as many of the widgets as needed or possible
|
|
@@ -9,10 +9,6 @@
|
|||||||
#██████████████ █████ ███████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
#██████████████ █████ ███████████████████████████████████████████████████████████████████████████████████████████████████ ██
|
||||||
|
|
||||||
|
|
||||||
general {
|
|
||||||
grace = 15
|
|
||||||
}
|
|
||||||
|
|
||||||
# ┌ ┐
|
# ┌ ┐
|
||||||
# │ BACKGROUND │
|
# │ BACKGROUND │
|
||||||
# └ ┘
|
# └ ┘
|
||||||
|
5
scripts/auto-renamer
Executable file
5
scripts/auto-renamer
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
SCRIPT_DIR=$(dirname "$0")
|
||||||
|
|
||||||
|
node "$SCRIPT_DIR/util/auto-renamer/index.js" $@
|
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
connect() {
|
connect() {
|
||||||
read -sp $'Please type in your Encryption Password:\n' encpass
|
read -sp $'Please enter your Encryption Password:\n' encpass
|
||||||
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)
|
||||||
@@ -17,13 +17,13 @@ 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 type in your Username: ' USERNAME
|
read -p $'Please enter your ETHZ-Username: ' USERNAME
|
||||||
echo 'Ok!'
|
echo 'Ok!'
|
||||||
read -sp $'Please type in your Encryption Password: ' encpass
|
read -sp $'Please choose and enter your Encryption Password (will be required when launching): ' encpass
|
||||||
echo 'Ok!'
|
echo 'Ok!'
|
||||||
read -sp $'Please type in your ETHZ WLAN Password: ' PASSWORD
|
read -sp $'Please enter your ETHZ WLAN (= Radius) Password: ' PASSWORD
|
||||||
echo 'Ok!'
|
echo 'Ok!'
|
||||||
read -sp $'Please type in your ETHZ OTP Secret: ' TOKEN
|
read -sp $'Please enter your ETHZ OTP Secret: ' TOKEN
|
||||||
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
|
||||||
@@ -54,6 +54,6 @@ setup)
|
|||||||
setup
|
setup
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo -e 'Usage: ethz-vpn [Option] \n [Option]: \n connect, c: Connect VPN \n disconnect, d, dc: Disconnect VPN \n setup: set secrets and eth-Kürzel.\n'
|
echo -e 'Usage: ethz-vpn [Option] \n [Option]: \n connect, c: Connect VPN \n disconnect, d, dc: Disconnect VPN \n setup: set secrets and eth-Username.\n'
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
8
scripts/laptop-docked
Executable file
8
scripts/laptop-docked
Executable file
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cp -f ~/.config/hypr/hyprland_docked.conf ~/.config/hypr/hyprland.conf
|
||||||
|
cp -f ~/.config/rofi/config_desktop.rasi ~/.config/rofi/config.rasi
|
||||||
|
|
||||||
|
./restart-bar
|
||||||
|
|
||||||
|
echo " ==> Done! To revert to normal config, run change-wallpaper"
|
13
scripts/restart-bar
Executable file
13
scripts/restart-bar
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
|
||||||
|
echo "
|
||||||
|
=> Restarting ags
|
||||||
|
"
|
||||||
|
|
||||||
|
killall gjs
|
||||||
|
killall ags
|
||||||
|
sleep 4
|
||||||
|
ags run -d ~/projects/active/dotfiles/config/astal --gtk4 & disown
|
||||||
|
sleep 2
|
||||||
|
ags run -d ~/projects/active/dotfiles/config/ags/notifications & disown
|
@@ -4,6 +4,5 @@ SCRIPT_DIR=$(dirname "$0")
|
|||||||
|
|
||||||
cp "$SCRIPT_DIR/../config/lint/eslint.config.mjs" .
|
cp "$SCRIPT_DIR/../config/lint/eslint.config.mjs" .
|
||||||
|
|
||||||
# TODO: Improve eslint config to include JSX and Vue configs too, read on website
|
npm i --save-dev @eslint/js typescript-eslint @stylistic/eslint-plugin eslint-plugin-vue
|
||||||
npm i --save-dev @eslint/js typescript-eslint @stylistic/eslint-plugin
|
|
||||||
|
|
||||||
|
5
scripts/update-open-webui
Executable file
5
scripts/update-open-webui
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
docker container rm open-webui
|
||||||
|
docker image pull ghcr.io/open-webui/open-webui
|
||||||
|
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v /home/janis/projects/otherProjects/open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:latest
|
238
scripts/util/auto-renamer/index.js
Normal file
238
scripts/util/auto-renamer/index.js
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const { argv } = require('process');
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
// replace character of key with value, any character, apart from ['.', '_', '-', ' ']
|
||||||
|
'replace': {
|
||||||
|
'ä': 'ae',
|
||||||
|
'ö': 'oe',
|
||||||
|
'ü': 'ue',
|
||||||
|
',': '-',
|
||||||
|
'&': 'And',
|
||||||
|
},
|
||||||
|
'rules': {
|
||||||
|
'underscore-before-and-after-number': true, // Will not do trailing or leading for filename
|
||||||
|
'enforce-leading-zero': true, // adds a leading zero to any number below 10
|
||||||
|
'camel-case-rules': {
|
||||||
|
'enforce-snake-case-for-filetypes': ['py'], // using underscores
|
||||||
|
'enforce-kebab-case-for-filetypes': ['css', 'html', 'scss', 'tex'], // using hyphens
|
||||||
|
},
|
||||||
|
'file-start-letter': 'lower', // lower, upper, unchanged
|
||||||
|
'directory-start-letter': 'upper', // lower, upper, unchanged
|
||||||
|
'replace-dots-with': '', // will not replace as leading character to not break dotfiles
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively find all files with extension in a directory
|
||||||
|
* @param {string} dir The directory to search. Either absolute or relative path
|
||||||
|
* @param {string} extension The file extension to look for
|
||||||
|
* @param {boolean} cleanup If helper files (like .DS_STORE and Windows helpers should be auto-deleted)
|
||||||
|
* @param {string[]} ignoreList A list of filenames or directories to ignore
|
||||||
|
* @returns {{ files: string, directories: string }} returns a list of html files with their full path
|
||||||
|
*/
|
||||||
|
const treeWalker = (dir, extension, cleanup, ignoreList) => {
|
||||||
|
const ls = fs.readdirSync(dir);
|
||||||
|
const fileList = [];
|
||||||
|
const dirList = [];
|
||||||
|
for (let file in ls) {
|
||||||
|
if (fs.statSync(path.join(dir, ls[file])).isDirectory()) {
|
||||||
|
// Filter ignored directories
|
||||||
|
if (ignoreList === undefined || !ignoreList.includes(ls[file])) {
|
||||||
|
const newData = treeWalker(path.join(dir, ls[file]), extension, ignoreList);
|
||||||
|
const newFiles = newData.files;
|
||||||
|
dirList.push( path.join( dir, ls[ file ] ) );
|
||||||
|
for (let dir = 0; dir < newData.directories.length; dir++) {
|
||||||
|
dirList.push( newData.directories[dir] );
|
||||||
|
}
|
||||||
|
for (let file = 0; file < newFiles.length; file++) {
|
||||||
|
fileList.push(newFiles[file]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (extension == '*' || ls[file].includes(extension)) {
|
||||||
|
if (ignoreList === undefined || !ignoreList.includes(ls[file])) {
|
||||||
|
fileList.push(path.join(dir, ls[file]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { 'files': fileList, 'directories': dirList };
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} filename The filename to fix according to the rules
|
||||||
|
* @returns {string} the fixed filename
|
||||||
|
*/
|
||||||
|
const fixName = ( fn, ft ) => {
|
||||||
|
let out = '';
|
||||||
|
const enforceSnake = config.rules['camel-case-rules']['enforce-snake-case-for-filetypes'].includes( ft );
|
||||||
|
const enforceKebab = config.rules['camel-case-rules']['enforce-kebab-case-for-filetypes'].includes( ft );
|
||||||
|
const isDir = ft === 'directory';
|
||||||
|
const startLetter = isDir ? config.rules['directory-start-letter'] : config.rules['file-start-letter'];
|
||||||
|
let nextUpperCase = false;
|
||||||
|
|
||||||
|
for ( let i = 0; i < fn.length; i++ ) {
|
||||||
|
const c = fn[i];
|
||||||
|
|
||||||
|
if ( c == '.' ) {
|
||||||
|
// Rule: Removed after number, allowed elsewhere
|
||||||
|
if ( i > 0 && /[0-9]/.test( fn[ i - 1 ] ) ) {
|
||||||
|
out += config.rules[ 'replace-dots-with' ];
|
||||||
|
} else {
|
||||||
|
out += '.';
|
||||||
|
}
|
||||||
|
} else if ( /[A-Z]/.test( c ) ) {
|
||||||
|
// If we reach a capital letter and enforce either kebab-case or snake_case, we can assume that this is the start of a CamelCase word
|
||||||
|
if ( enforceKebab ) {
|
||||||
|
out += '-' + c.toLowerCase();
|
||||||
|
} else if ( enforceSnake ) {
|
||||||
|
out += '_' + c.toLowerCase();
|
||||||
|
} else {
|
||||||
|
nextUpperCase = false;
|
||||||
|
if ( i == 0 && startLetter === 'lower' ) {
|
||||||
|
out += c.toLowerCase();
|
||||||
|
} else {
|
||||||
|
out += c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if ( c == ' ' ) {
|
||||||
|
// We always replace spaces, the question is just to what
|
||||||
|
if ( enforceKebab ) {
|
||||||
|
out += '-';
|
||||||
|
} else if ( enforceSnake ) {
|
||||||
|
out += '_';
|
||||||
|
} else {
|
||||||
|
nextUpperCase = true;
|
||||||
|
}
|
||||||
|
} else if ( c == '_' ) {
|
||||||
|
// If we are not enforcing snake_case, then replace it
|
||||||
|
if ( !enforceSnake ) {
|
||||||
|
if ( needsUnderscore( i, fn ) ) {
|
||||||
|
out += '_';
|
||||||
|
} else if ( enforceKebab ) {
|
||||||
|
out += '-';
|
||||||
|
} else {
|
||||||
|
nextUpperCase = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out += '_'
|
||||||
|
}
|
||||||
|
} else if ( c == '-' ) {
|
||||||
|
// If we are not enforcing kebab-case
|
||||||
|
if ( !enforceKebab ) {
|
||||||
|
if ( enforceSnake ) {
|
||||||
|
out += '_';
|
||||||
|
} else {
|
||||||
|
nextUpperCase = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out += '-'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let curr = config.replace[ c ] === undefined ? c : config.replace[ c ];
|
||||||
|
if ( config.rules[ 'underscore-before-and-after-number' ] || config.rules['enforce-leading-zero'] ) {
|
||||||
|
if ( /[0-9]/.test( c ) ) {
|
||||||
|
if ( i < fn.length - 1 ) {
|
||||||
|
if ( config.rules['enforce-leading-zero'] ) {
|
||||||
|
const prevIsNumber = i > 0 && /[0-9]/.test( fn[i - 1] );
|
||||||
|
const nextIsNumber = /[0-9]/.test( fn[i + 1] );
|
||||||
|
if ( !nextIsNumber && ( i == 0|| !prevIsNumber ) ) {
|
||||||
|
curr = '0' + curr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( config.rules['underscore-before-and-after-number'] ) {
|
||||||
|
if ( !( /[0-9]/.test( fn[ i + 1 ] ) ) && fn[ i + 1 ] != '_' ) {
|
||||||
|
curr += '_';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ( config.rules['enforce-leading-zero'] && ( i > 0 && !( /[0-9]/.test( fn[i - 1] ) ) ) ) {
|
||||||
|
curr = '0' + curr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ( config.rules['underscore-before-and-after-number'] && /[0-9]/.test( fn[ i + 1 ] ) ) {
|
||||||
|
curr += '_';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( nextUpperCase || ( i == 0 && startLetter === 'upper' ) ) {
|
||||||
|
nextUpperCase = false;
|
||||||
|
out += curr.toUpperCase();
|
||||||
|
} else {
|
||||||
|
if ( i == 0 && startLetter === 'upper' ) {
|
||||||
|
out += curr.toUpperCase();
|
||||||
|
} else {
|
||||||
|
out += curr.toLowerCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
const needsUnderscore = ( i, fn ) => {
|
||||||
|
return ( i > 0 && /[0-9]/.test( fn[ i - 1 ] ) ) || ( i < fn - 1 && /[0-9]/.test( fn[ i + 1 ] ) )
|
||||||
|
}
|
||||||
|
|
||||||
|
const separateDirAndFileAndFiletype = ( filename ) => {
|
||||||
|
const loc = filename.lastIndexOf( '/' ) + 1;
|
||||||
|
let ftl = filename.lastIndexOf( '.' ) + 1;
|
||||||
|
let fn = filename.substring( loc, ftl - 1 );
|
||||||
|
let ft = filename.substring( ftl );
|
||||||
|
if ( fs.statSync( filename ).isDirectory() ) {
|
||||||
|
ftl = filename.length;
|
||||||
|
fn = filename.substring( loc );
|
||||||
|
ft = 'directory';
|
||||||
|
|
||||||
|
}
|
||||||
|
const dir = filename.slice( 0, loc - 1 );
|
||||||
|
return { 'filename': fn, 'dir': dir, 'filetype': ft };
|
||||||
|
}
|
||||||
|
|
||||||
|
const fixDirName = ( directory, top ) => {
|
||||||
|
if ( directory === top ) {
|
||||||
|
return top;
|
||||||
|
}
|
||||||
|
|
||||||
|
const f = separateDirAndFileAndFiletype( directory );
|
||||||
|
return fixDirName( f.dir, top ) + '/' + fixName( f.filename, f.filetype );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv[2] == '-h') {
|
||||||
|
console.log('auto-renamer [directory]\n\n=> Recursively rename files in directory');
|
||||||
|
} else if (argv[2] == '-v') {
|
||||||
|
console.log('auto-renamer version 1.0.0, developed by Janis Hutz (development@janishutz.com)');
|
||||||
|
} else {
|
||||||
|
// Recursively add all files in the directory
|
||||||
|
const fp = path.resolve( argv[2] );
|
||||||
|
const list = treeWalker(fp, '*', ['.git', '@girs']);
|
||||||
|
const files = list.files;
|
||||||
|
const directories = list.directories;
|
||||||
|
|
||||||
|
for (let i = 0; i < files.length; i++) {
|
||||||
|
const file = files[i];
|
||||||
|
const f = separateDirAndFileAndFiletype( file );
|
||||||
|
let fixedFile = fixName( f.filename, f.filetype );
|
||||||
|
|
||||||
|
// Rename
|
||||||
|
const fixedPath = f.dir + '/' + fixedFile + '.' + f.filetype;
|
||||||
|
console.log( file + ' -> ' + fixedPath );
|
||||||
|
fs.renameSync( file, fixedPath );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fix directory names after file names. Sort array by decending length
|
||||||
|
directories.sort( ( a, b ) => {
|
||||||
|
return b.length - a.length;
|
||||||
|
} );
|
||||||
|
|
||||||
|
// separate directories up until we reach the path of dir started in
|
||||||
|
for (let i = 0; i < directories.length; i++) {
|
||||||
|
const dir = directories[i];
|
||||||
|
const fixed = fixDirName( dir, fp );
|
||||||
|
console.log( dir + ' -> ' + fixed );
|
||||||
|
fs.renameSync( dir, fixDirName( dir, fp ) );
|
||||||
|
}
|
||||||
|
}
|
28
setup
28
setup
@@ -23,7 +23,7 @@ echo "
|
|||||||
|
|
||||||
"
|
"
|
||||||
|
|
||||||
trap 'echo -e "\nCaught Ctrl+C, exiting..."; exit 1' SIGINT
|
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=""
|
||||||
@@ -39,7 +39,7 @@ platform=$(echo "$platform" | tr '[:upper:]' '[:lower:]')
|
|||||||
# Get user preference for regenerating the styling
|
# Get user preference for regenerating the styling
|
||||||
regen=""
|
regen=""
|
||||||
read -p "Would you like to regenerate styling? (y/N) " regen
|
read -p "Would you like to regenerate styling? (y/N) " regen
|
||||||
if [ $regen == "y" ]; then
|
if [[ "$regen" == "y" ]]; then
|
||||||
cd build
|
cd build
|
||||||
node build.js
|
node build.js
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
@@ -55,20 +55,17 @@ cp -r ./config/fish ~/.config/
|
|||||||
cp -r ./config/hypr ~/.config/
|
cp -r ./config/hypr ~/.config/
|
||||||
rm -rf ~/.config/rofi/
|
rm -rf ~/.config/rofi/
|
||||||
cp -r ./config/rofi ~/.config/
|
cp -r ./config/rofi ~/.config/
|
||||||
|
cp -r ./config/xdg-desktop-portal-termfilechooser/ ~/.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"
|
||||||
mv ~/.config/hypr/hyprland_desktop.conf ~/.config/hypr/hyprland.conf
|
cp -f ~/.config/hypr/hyprland_desktop.conf ~/.config/hypr/hyprland.conf
|
||||||
rm ~/.config/hypr/hyprland_*
|
cp -f ~/.config/rofi/config_desktop.rasi ~/.config/rofi/config.rasi
|
||||||
mv ~/.config/rofi/config_desktop.rasi ~/.config/rofi/config.rasi
|
|
||||||
rm ~/.config/rofi/config_*
|
|
||||||
else
|
else
|
||||||
echo "Running on laptop"
|
echo "Running on laptop"
|
||||||
mv ~/.config/hypr/hyprland_laptop.conf ~/.config/hypr/hyprland.conf
|
cp -f ~/.config/hypr/hyprland_laptop.conf ~/.config/hypr/hyprland.conf
|
||||||
rm ~/.config/hypr/hyprland_*
|
cp -f ~/.config/rofi/config_laptop.rasi ~/.config/rofi/config.rasi
|
||||||
mv ~/.config/rofi/config_laptop.rasi ~/.config/rofi/config.rasi
|
|
||||||
rm ~/.config/rofi/config_*
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cp -r ./config/kitty ~/.config/
|
cp -r ./config/kitty ~/.config/
|
||||||
@@ -79,12 +76,13 @@ cp -r ./config/Thunar ~/.config/
|
|||||||
cp -r ./config/wlogout/ ~/.config/
|
cp -r ./config/wlogout/ ~/.config/
|
||||||
cp -r ./config/yazi ~/.config/
|
cp -r ./config/yazi ~/.config/
|
||||||
cp -r ./config/zathura ~/.config/
|
cp -r ./config/zathura ~/.config/
|
||||||
|
cp ./config/lint/.indentconfig.yaml ~
|
||||||
|
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
=> Installing yazi plugins
|
=> Installing yazi plugins
|
||||||
"
|
"
|
||||||
ya pack -i
|
ya pkg upgrade
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
=> Installing GTK Theme
|
=> Installing GTK Theme
|
||||||
@@ -100,13 +98,7 @@ sudo cp ./system/environment /etc/environment
|
|||||||
sudo cp -r ./system/greetd/* /etc/greetd/
|
sudo cp -r ./system/greetd/* /etc/greetd/
|
||||||
hyprctl reload
|
hyprctl reload
|
||||||
|
|
||||||
# echo "
|
./scripts/restart-bar
|
||||||
# => Restarting bars, etc
|
|
||||||
# "
|
|
||||||
# killall gjs
|
|
||||||
# sleep 1
|
|
||||||
# ags run -d ./config/astal --gtk4 & disown 2>&1 > /dev/null
|
|
||||||
# ags run -d ./config/ags/notifications/ & disown 2>&1 > /dev/null
|
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user