agsdotfilesdotshyprlandhyprland-configricerofirofi-configshell-scriptsswwwwallustwaybarwaybar-modulewaybar-themes
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
6.4 KiB
155 lines
6.4 KiB
const { Gio, GLib } = imports.gi; |
|
import App from 'resource:///com/github/Aylur/ags/app.js'; |
|
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js'; |
|
const { execAsync, exec } = Utils; |
|
// import Todo from "../../services/todo.js"; |
|
import { darkMode } from '../.miscutils/system.js'; |
|
|
|
export function hasUnterminatedBackslash(inputString) { |
|
// Use a regular expression to match a trailing odd number of backslashes |
|
const regex = /\\+$/; |
|
return regex.test(inputString); |
|
} |
|
|
|
export function launchCustomCommand(command) { |
|
const args = command.toLowerCase().split(' '); |
|
if (args[0] == '>raw') { // Mouse raw input |
|
Utils.execAsync('hyprctl -j getoption input:accel_profile') |
|
.then((output) => { |
|
const value = JSON.parse(output)["str"].trim(); |
|
if (value != "[[EMPTY]]" && value != "") { |
|
execAsync(['bash', '-c', `hyprctl keyword input:accel_profile '[[EMPTY]]'`]).catch(print); |
|
} |
|
else { |
|
execAsync(['bash', '-c', `hyprctl keyword input:accel_profile flat`]).catch(print); |
|
} |
|
}) |
|
} |
|
else if (args[0] == '>img') { // Change wallpaper |
|
execAsync([`bash`, `-c`, `${App.configDir}/scripts/color_generation/switchwall.sh`, `&`]).catch(print); |
|
} |
|
else if (args[0] == '>color') { // Generate colorscheme from color picker |
|
execAsync([`bash`, `-c`, `${App.configDir}/scripts/color_generation/switchcolor.sh --pick`, `&`]).catch(print); |
|
} |
|
else if (args[0] == '>light') { // Light mode |
|
darkMode.value = false; |
|
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && sed -i "1s/.*/light/" ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`]) |
|
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchcolor.sh`])) |
|
.catch(print); |
|
} |
|
else if (args[0] == '>dark') { // Dark mode |
|
darkMode.value = true; |
|
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && sed -i "1s/.*/dark/" ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`]) |
|
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchcolor.sh`])) |
|
.catch(print); |
|
} |
|
else if (args[0] == '>badapple') { // Black and white |
|
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && sed -i "3s/.*/monochrome/" ${GLib.get_user_cache_dir()}/ags/user/colormode.txt`]) |
|
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchcolor.sh`])) |
|
.catch(print); |
|
} |
|
else if (args[0] == '>material') { // Use material colors |
|
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && echo "material" > ${GLib.get_user_cache_dir()}/ags/user/colorbackend.txt`]).catch(print) |
|
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchwall.sh --noswitch`]).catch(print)) |
|
.catch(print); |
|
} |
|
else if (args[0] == '>pywal') { // Use Pywal (ik it looks shit but I'm not removing) |
|
execAsync([`bash`, `-c`, `mkdir -p ${GLib.get_user_cache_dir()}/ags/user && echo "pywal" > ${GLib.get_user_cache_dir()}/ags/user/colorbackend.txt`]).catch(print) |
|
.then(execAsync(['bash', '-c', `${App.configDir}/scripts/color_generation/switchwall.sh --noswitch`]).catch(print)) |
|
.catch(print); |
|
} |
|
else if (args[0] == '>todo') { // Todo |
|
Todo.add(args.slice(1).join(' ')); |
|
} |
|
else if (args[0] == '>shutdown') { // Shut down |
|
execAsync([`bash`, `-c`, `systemctl poweroff || loginctl poweroff`]).catch(print); |
|
} |
|
else if (args[0] == '>reboot') { // Reboot |
|
execAsync([`bash`, `-c`, `systemctl reboot || loginctl reboot`]).catch(print); |
|
} |
|
else if (args[0] == '>sleep') { // Sleep |
|
execAsync([`bash`, `-c`, `systemctl suspend || loginctl suspend`]).catch(print); |
|
} |
|
else if (args[0] == '>logout') { // Log out |
|
execAsync([`bash`, `-c`, `pkill Hyprland || pkill sway`]).catch(print); |
|
} |
|
} |
|
|
|
export function execAndClose(command, terminal) { |
|
App.closeWindow('overview'); |
|
if (terminal) { |
|
execAsync([`bash`, `-c`, `${userOptions.apps.terminal} fish -C "${command}"`, `&`]).catch(print); |
|
} |
|
else |
|
execAsync(command).catch(print); |
|
} |
|
|
|
export function couldBeMath(str) { |
|
const regex = /^[0-9.+*/-]/; |
|
return regex.test(str); |
|
} |
|
|
|
export function expandTilde(path) { |
|
if (path.startsWith('~')) { |
|
return GLib.get_home_dir() + path.slice(1); |
|
} else { |
|
return path; |
|
} |
|
} |
|
|
|
function getFileIcon(fileInfo) { |
|
let icon = fileInfo.get_icon(); |
|
if (icon) { |
|
// Get the icon's name |
|
return icon.get_names()[0]; |
|
} else { |
|
// Default icon for files |
|
return 'text-x-generic'; |
|
} |
|
} |
|
|
|
export function ls({ path = '~', silent = false }) { |
|
let contents = []; |
|
try { |
|
let expandedPath = expandTilde(path); |
|
if (expandedPath.endsWith('/')) |
|
expandedPath = expandedPath.slice(0, -1); |
|
let folder = Gio.File.new_for_path(expandedPath); |
|
|
|
let enumerator = folder.enumerate_children('standard::*', Gio.FileQueryInfoFlags.NONE, null); |
|
let fileInfo; |
|
while ((fileInfo = enumerator.next_file(null)) !== null) { |
|
let fileName = fileInfo.get_display_name(); |
|
let fileType = fileInfo.get_file_type(); |
|
|
|
let item = { |
|
parentPath: expandedPath, |
|
name: fileName, |
|
type: fileType === Gio.FileType.DIRECTORY ? 'folder' : 'file', |
|
icon: getFileIcon(fileInfo), |
|
}; |
|
|
|
// Add file extension for files |
|
if (fileType === Gio.FileType.REGULAR) { |
|
let fileExtension = fileName.split('.').pop(); |
|
item.type = `${fileExtension}`; |
|
} |
|
|
|
contents.push(item); |
|
contents.sort((a, b) => { |
|
const aIsFolder = a.type.startsWith('folder'); |
|
const bIsFolder = b.type.startsWith('folder'); |
|
if (aIsFolder && !bIsFolder) { |
|
return -1; |
|
} else if (!aIsFolder && bIsFolder) { |
|
return 1; |
|
} else { |
|
return a.name.localeCompare(b.name); // Sort alphabetically within folders and files |
|
} |
|
}); |
|
} |
|
} catch (e) { |
|
if (!silent) console.log(e); |
|
} |
|
return contents; |
|
}
|
|
|