Add XDG config files

This commit is contained in:
Michael Bradley 2023-11-19 18:26:41 -05:00
parent 9fc8f8ae4f
commit ff6e834e44
No known key found for this signature in database
GPG key ID: 0689D39D85D03A5B
84 changed files with 68895 additions and 1 deletions

2
.gitignore vendored
View file

@ -1 +1,3 @@
.dots/
btop/btop.log

Binary file not shown.

View file

View file

@ -0,0 +1,12 @@
{
"version": "1.9.6",
"drawerStates": {
"settings": {
"addons": false,
"customcss": false,
"editor": false,
"window": false,
"developer": false
}
}
}

View file

@ -0,0 +1,23 @@
{
"PluginRepo": true,
"BDFDB": true,
"ZeresPluginLibrary": false,
"BetterAudioPlayer": false,
"CallTimeCounter": true,
"BetterRoleColors": false,
"SplitLargeMessages": false,
"BetterVolume": false,
"TypingUsersAvatars": true,
"ThemeRepo": false,
"AutoIdleOnAFK": true,
"BetterAnimations": false,
"BetterBotTags": false,
"BetterInvites": false,
"BetterMediaPlayer": false,
"BetterNsfwTag": false,
"CharCounter": false,
"ActivityIcons": false,
"HideDisabledEmojis": true,
"WhoReacted": false,
"TeX": true
}

View file

@ -0,0 +1,37 @@
{
"general": {
"voiceDisconnect": true,
"showToasts": true,
"mediaKeys": false
},
"addons": {
"addonErrors": true,
"editAction": "detached"
},
"customcss": {
"customcss": true,
"liveUpdate": false,
"openAction": "settings"
},
"editor": {
"lineNumbers": true,
"minimap": true,
"hover": true,
"quickSuggestions": true,
"fontSize": 14,
"renderWhitespace": "selection"
},
"window": {
"transparency": true,
"removeMinimumSize": false,
"frame": false
},
"developer": {
"debugLogs": false,
"devTools": false,
"debuggerHotkey": false,
"reactDevTools": false,
"inspectElement": false,
"devToolsWarning": false
}
}

View file

@ -0,0 +1,6 @@
{
"Frosted Glass": false,
"Dark Matter": false,
"Discord+": false,
"ClearVision": true
}

View file

@ -0,0 +1,25 @@
{
"all": {
"changeLogs": {
"BDFDB": "3.5.3",
"BetterNsfwTag": "1.3.2",
"CharCounter": "1.6.2",
"PluginRepo": "2.5.4",
"SplitLargeMessages": "1.8.0",
"ThemeRepo": "2.4.8"
},
"choices": {
"toastPosition": "right"
},
"general": {
"shareData": true,
"showToasts": true,
"showSupportBadges": false,
"useChromium": false
},
"hashes": {
"0BDFDB.data.json": "b6093b5b3b9b66f4ea01370fe723f0834b6739c4",
"0BDFDB.raw.css": "8c083e2a87a82aded5f3b2e27fb8b2f816b5f74a"
}
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,9 @@
{
"settings": {
"normalIconBehavior": 0
},
"currentVersionInfo": {
"version": "1.2.11",
"hasShownChangelog": true
}
}

View file

@ -0,0 +1,6 @@
{
"currentVersionInfo": {
"version": "0.4.0",
"hasShownChangelog": true
}
}

View file

@ -0,0 +1,442 @@
/**
* @name AutoIdleOnAFK
* @description Automatically updates your discord status to 'idle' when you haven't opened your discord client for more than 5 minutes.
Plugin only works when your status is 'online' and you are not in a voice channel.
For Bugs or Feature Requests open an issue on my Github
* @version 0.4.0
* @author RoguedBear
* @authorLink https://github.com/RoguedBear
* @website https://github.com/RoguedBear/BetterDiscordPlugin-AutoIdleOnAFK
* @source https://raw.githubusercontent.com/RoguedBear/BetterDiscordPlugin-AutoIdleOnAFK/main/release/AutoIdleOnAFK.plugin.js
*/
/*@cc_on
@if (@_jscript)
// Offer to self-install for clueless users that try to run this directly.
var shell = WScript.CreateObject("WScript.Shell");
var fs = new ActiveXObject("Scripting.FileSystemObject");
var pathPlugins = shell.ExpandEnvironmentStrings("%APPDATA%\\BetterDiscord\\plugins");
var pathSelf = WScript.ScriptFullName;
// Put the user at ease by addressing them in the first person
shell.Popup("It looks like you've mistakenly tried to run me directly. \n(Don't do that!)", 0, "I'm a plugin for BetterDiscord", 0x30);
if (fs.GetParentFolderName(pathSelf) === fs.GetAbsolutePathName(pathPlugins)) {
shell.Popup("I'm in the correct folder already.", 0, "I'm already installed", 0x40);
} else if (!fs.FolderExists(pathPlugins)) {
shell.Popup("I can't find the BetterDiscord plugins folder.\nAre you sure it's even installed?", 0, "Can't install myself", 0x10);
} else if (shell.Popup("Should I copy myself to BetterDiscord's plugins folder for you?", 0, "Do you need some help?", 0x34) === 6) {
fs.CopyFile(pathSelf, fs.BuildPath(pathPlugins, fs.GetFileName(pathSelf)), true);
// Show the user where to put plugins in the future
shell.Exec("explorer " + pathPlugins);
shell.Popup("I'm installed!", 0, "Successfully installed", 0x40);
}
WScript.Quit();
@else@*/
const config = {
info: {
name: "AutoIdleOnAFK",
authors: [
{
name: "RoguedBear",
github_username: "RoguedBear",
link: "https://github.com/RoguedBear"
}
],
version: "0.4.0",
description: "Automatically updates your discord status to 'idle' when you haven't opened your discord client for more than 5 minutes.\nPlugin only works when your status is 'online' and you are not in a voice channel. \n\nFor Bugs or Feature Requests open an issue on my Github",
github: "https://github.com/RoguedBear/BetterDiscordPlugin-AutoIdleOnAFK",
github_raw: "https://raw.githubusercontent.com/RoguedBear/BetterDiscordPlugin-AutoIdleOnAFK/main/release/AutoIdleOnAFK.plugin.js"
},
changelog: [
{
type: "added",
title: "Added a setting to optionally ignore VC state when going AFK",
items: [
"Earlier if you were in a VC you couldn't go in AFK mode. Now you can toggle a setting to ignore whether you are in VC or not before going AFK.",
"default value: off"
]
}
],
main: "index.js",
DEBUG: false,
DEBUG_ActuallyChangeStatus: false,
defaultConfig: [
{
type: "radio",
name: "Change Status To:",
note: "the status selected will be switched to when AFK. default: Idle",
id: "afkStatus",
value: "idle",
options: [
{
name: "Idle",
value: "idle"
},
{
name: "Invisible",
value: "invisible"
},
{
name: "Do Not Disturb",
value: "dnd"
}
]
},
{
type: "slider",
name: "AFK Timeout (minutes)",
note: "minutes to wait before changing your status to Idle/Invisible",
id: "afkTimeout",
value: 5,
defaultValue: 5,
min: 5,
max: 30,
units: "min",
markers: [
5,
10,
15,
20,
25,
30
]
},
{
type: "slider",
name: "Back To Online Delay (Grace/Cooldown Period)",
note: "seconds to wait before changing your status back to Online. if you close or unfocus discord window, status will not be changed",
id: "backToOnlineDelay",
defaultValue: 10,
value: 10,
min: 5,
max: 120,
units: "s",
markers: [
5,
10,
30,
60,
90,
120
]
},
{
type: "switch",
name: "Ignore VC state when going AFK",
note: "Allows going to Idle mode even when you are in a VC. default: off",
id: "ignoreVCState",
value: false,
defaultValue: false
},
{
type: "switch",
name: "Always Revert To Online",
note: "Come back online even if this plugin didn't change your status. Useful for multiple devices.",
id: "alwaysOnline",
value: false,
defaultValue: false
},
{
type: "switch",
name: "Show toast messages?",
note: "toggles the visibility of \"Changing status back to online\" toast message",
id: "showToasts",
defaultValue: true,
value: true
}
]
};
class Dummy {
constructor() {this._config = config;}
start() {}
stop() {}
}
if (!global.ZeresPluginLibrary) {
BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.name ?? config.info.name} is missing. Please click Download Now to install it.`, {
confirmText: "Download Now",
cancelText: "Cancel",
onConfirm: () => {
require("request").get("https://betterdiscord.app/gh-redirect?id=9", async (err, resp, body) => {
if (err) return require("electron").shell.openExternal("https://betterdiscord.app/Download?id=9");
if (resp.statusCode === 302) {
require("request").get(resp.headers.location, async (error, response, content) => {
if (error) return require("electron").shell.openExternal("https://betterdiscord.app/Download?id=9");
await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), content, r));
});
}
else {
await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), body, r));
}
});
}
});
}
module.exports = !global.ZeresPluginLibrary ? Dummy : (([Plugin, Api]) => {
const plugin = (Plugin, Library) => {
const { Logger, DiscordModules } = Library;
const {
SelectedChannelStore: { getVoiceChannelId },
} = DiscordModules;
// Logger.info("VC: " + getVoiceChannelId());
const {
Webpack,
Webpack: { Filters },
} = BdApi;
const UserSettingsProtoStore = BdApi.Webpack.getModule(
(m) =>
m &&
typeof m.getName == "function" &&
m.getName() == "UserSettingsProtoStore" &&
m,
{ first: true, searchExports: true }
);
const UserSettingsProtoUtils = BdApi.Webpack.getModule(
(m) =>
m.ProtoClass &&
m.ProtoClass.typeName.endsWith(".PreloadedUserSettings"),
{ first: true, searchExports: true }
);
var DEBUG = false;
function log_debug(module, ...message) {
if (DEBUG !== true) {
return;
} else {
Logger.debug(module, ...message);
}
}
return class AutoIdleOnAFK extends Plugin {
constructor() {
super();
this.getSettingsPanel = () => {
return this.buildSettingsPanel().getElement();
};
// Some instance variables
this.afkTimeoutID = undefined; // timeout set by onBlur
this.backFromAFKTimeoutID = undefined; // timeout set by onFocus
// key used as a flag to detect if afk was set by the plugin or manually by user
this.keyIdleSetByPlugin = "IdleSetByPlugin";
this.OnBlurBounded = this.onBlurFunction.bind(this);
this.boundOnFocusBounded = this.onFocusFunction.bind(this);
}
onStart() {
if (this._config.DEBUG === true) {
DEBUG = true;
log_debug(this);
log_debug("Current status: " + this.currentStatus());
log_debug("In Voice Channel: " + this.inVoiceChannel());
log_debug(
"onlineStatusAndNotInVC: " + this.onlineStatusAndNotInVC()
);
}
window.addEventListener("blur", this.OnBlurBounded);
window.addEventListener("focus", this.boundOnFocusBounded);
}
onStop() {
clearTimeout(this.afkTimeoutID);
clearTimeout(this.backFromAFKTimeoutID);
window.removeEventListener("blur", this.OnBlurBounded);
window.removeEventListener("focus", this.boundOnFocusBounded);
}
onBlurFunction() {
// TODO: remove this
log_debug("Focus lost from discord window");
// if user closes discord before the backToOnlineTimeout, clear the
// pending timeout (if it even exists)
this.backFromAFKTimeoutID = this.cancelTimeout(
this.backFromAFKTimeoutID
);
var __afkSetByPlugin = BdApi.loadData(
this._config.info.name,
this.keyIdleSetByPlugin
);
var inVoiceChannelAndIdleSetByPlugin =
this.inVoiceChannel() && __afkSetByPlugin;
var inVoiceChannelAndAlwaysOnlineEnabled =
this.inVoiceChannel() && this.settings.alwaysOnline;
if (this.onlineStatusAndNotInVC()) {
var _timeout_ms =
this.settings.afkTimeout * (DEBUG ? 2 : 60) * 1000;
log_debug("setting timeout of " + _timeout_ms + "ms");
this.afkTimeoutID = setTimeout(() => {
if (this.onlineStatusAndNotInVC()) {
this.updateStatus(this.settings.afkStatus);
BdApi.saveData(
this._config.info.name,
this.keyIdleSetByPlugin,
true
);
}
// If DEBUG is enabled then keep a shorter duration than 60s
}, _timeout_ms); // converting min to ms
} else if (
// if the user is in a VC, idle was set by plugin &
// their current status == afkStatus
(inVoiceChannelAndIdleSetByPlugin ||
// OR, is user in VC and always online is enabled
inVoiceChannelAndAlwaysOnlineEnabled) &&
this.currentStatus() == this.settings.afkStatus
) {
this.updateStatus("online");
this.showToast("Changing status back to online, You are in VC");
BdApi.saveData(
this._config.info.name,
this.keyIdleSetByPlugin,
false
);
}
}
onFocusFunction() {
// TODO: remove this
log_debug("Discord window in focus now");
// if user opens discord before the afkTimeout, clear the pending
// timeout (if it even exists)
this.afkTimeoutID = this.cancelTimeout(this.afkTimeoutID);
log_debug(
"Setting timeout of " +
this.settings.backToOnlineDelay * 1000 +
" ms"
);
this.backFromAFKTimeoutID = setTimeout(() => {
// TODO: Refactor/comment out/test more this part
var __afkSetByPlugin = BdApi.loadData(
this._config.info.name,
this.keyIdleSetByPlugin
);
var statusIsAFKAndWasSetByPlugin =
this.currentStatus() === this.settings.afkStatus &&
__afkSetByPlugin === true;
var statusIsAFKAndAlwaysOnlineIsTrue =
this.currentStatus() === this.settings.afkStatus &&
this.settings.alwaysOnline === true;
if (statusIsAFKAndWasSetByPlugin) {
this.showToast("Changing status back to online");
this.updateStatus("online");
BdApi.saveData(
this._config.info.name,
this.keyIdleSetByPlugin,
false
);
} else if (statusIsAFKAndAlwaysOnlineIsTrue) {
BdApi.showToast("Changing status back to online");
this.updateStatus("online");
BdApi.saveData(
this._config.info.name,
this.keyIdleSetByPlugin,
false
);
} else if (__afkSetByPlugin == undefined) {
return;
} else {
BdApi.deleteData(
this._config.info.name,
this.keyIdleSetByPlugin
);
Logger.info(
"User overrode the status. leaving status unchanged..."
);
}
}, this.settings.backToOnlineDelay * 1000);
}
/**
* Cancles the given timeout id
* @param {number} timeoutId
* @returns {undefined}
*/
cancelTimeout(timeoutId) {
if (timeoutId != undefined) {
log_debug("Cancelling timeout " + timeoutId); // TODO: remove this
clearTimeout(timeoutId);
return undefined;
}
}
/**
* @returns {string} the current user status
*/
currentStatus() {
return UserSettingsProtoStore.settings.status.status.value;
}
/**
* @returns {boolean} if user is in a VC
*/
inVoiceChannel() {
return (
this.settings.ignoreVCState === false &&
getVoiceChannelId() !== null
);
}
/**
* Returns if the current status is 'online' and the user is not in a
* voice channel
* @returns
*/
onlineStatusAndNotInVC() {
return (
this.currentStatus() === "online" &&
this.inVoiceChannel() === false
);
}
/**
* Updates the remote status to the param `toStatus`
* @param {('online'|'idle'|'invisible'|'dnd')} toStatus
*/
updateStatus(toStatus) {
if (
this._config.DEBUG === true &&
this._config.DEBUG_ActuallyChangeStatus === false
) {
log_debug("Changing (but not changing) status to: " + toStatus);
return;
}
log_debug("Actually changing status to: " + toStatus);
UserSettingsProtoUtils.updateAsync(
"status",
(statusSetting) => {
log_debug(statusSetting);
statusSetting.status.value = toStatus;
},
0
);
}
/**
* shows toast message based on showToast settings
* @param {string} msg
*/
showToast(msg) {
if (this.settings.showToasts) {
BdApi.showToast(msg);
}
}
};
};
return plugin(Plugin, Api);
})(global.ZeresPluginLibrary.buildPlugin(config));
/*@end@*/

View file

@ -0,0 +1,45 @@
{
"currentVersionInfo": {
"version": "1.1.12",
"hasShownChangelog": true
},
"settings": {
"guild": {
"enabled": true,
"type": "flipForwards",
"easing": "easeInOutCubic",
"duration": 700
},
"channel": {
"enabled": true,
"type": "slideUp",
"easing": "easeInOutCubic",
"duration": 500
},
"settings": {
"enabled": false,
"type": "slipUp",
"easing": "easeInOutCubic",
"duration": 500
},
"messages": {
"enabled": true,
"type": "slip",
"easing": "easeOutQuart",
"position": "bottom",
"duration": 200
},
"popouts": {
"enabled": true,
"type": "flip",
"easing": "easeInOutBack",
"duration": 300
},
"expressionPicker": {
"enabled": true,
"type": "scaleChange",
"easing": "easeInOutBack",
"duration": 500
}
}
}

View file

@ -0,0 +1,6 @@
{
"currentVersionInfo": {
"version": "1.0.2",
"hasShownChangelog": true
}
}

View file

@ -0,0 +1,6 @@
{
"currentVersionInfo": {
"version": "1.1.0",
"hasShownChangelog": true
}
}

View file

@ -0,0 +1,6 @@
{
"currentVersionInfo": {
"version": "1.6.3",
"hasShownChangelog": true
}
}

View file

@ -0,0 +1,37 @@
{
"currentVersionInfo": {
"version": "0.9.1",
"hasShownChangelog": true
},
"settings": {
"global": {
"important": false
},
"modules": {
"typing": true,
"voice": true,
"mentions": true,
"chat": false,
"botTags": true,
"memberList": true
},
"popouts": {
"username": false,
"discriminator": false,
"nickname": true,
"fallback": true
},
"modals": {
"username": true,
"discriminator": false
},
"auditLog": {
"username": true,
"discriminator": false
},
"account": {
"username": true,
"discriminator": false
}
}
}

View file

@ -0,0 +1,6 @@
{
"currentVersionInfo": {
"version": "0.0.6",
"hasShownChangelog": true
}
}

View file

@ -0,0 +1,157 @@
/**
* @name CallTimeCounter
* @source https://github.com/QWERTxD/BetterDiscordPlugins/blob/main/CallTimeCounter/CallTimeCounter.plugin.js
* @description Shows how much time you are in a voice chat.
* @updateUrl https://raw.githubusercontent.com/QWERTxD/BetterDiscordPlugins/main/CallTimeCounter/CallTimeCounter.plugin.js
* @website https://github.com/QWERTxD/BetterDiscordPlugins/tree/main/CallTimeCounter
* @version 0.0.6
*/
const request = require("request");
const fs = require("fs");
const path = require("path");
const config = {
info: {
name: "CallTimeCounter",
authors: [
{
name: "QWERT"
}
],
version: "0.0.6",
description: "Shows how much time you are in a voice chat.",
github_raw: "https://raw.githubusercontent.com/QWERTxD/BetterDiscordPlugins/main/CallTimeCounter/CallTimeCounter.plugin.js",
},
changelog: [
{
title: "Fixes",
type: "fixed",
items: [
"Fixed for BetterDiscord 1.8 update."
]
}
],
defaultConfig: []
};
module.exports = !global.ZeresPluginLibrary ? class {
constructor() {
this._config = config;
}
load() {
BdApi.showConfirmationModal("Library plugin is needed",
`The library plugin needed for AQWERT'sPluginBuilder is missing. Please click Download Now to install it.`, {
confirmText: "Download",
cancelText: "Cancel",
onConfirm: () => {
request.get("https://rauenzi.github.io/BDPluginLibrary/release/0PluginLibrary.plugin.js", (error, response, body) => {
if (error)
return electron.shell.openExternal("https://betterdiscord.net/ghdl?url=https://raw.githubusercontent.com/rauenzi/BDPluginLibrary/master/release/0PluginLibrary.plugin.js");
fs.writeFileSync(path.join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), body);
});
}
});
}
start() { }
stop() { }
} : (([Plugin, Library]) => {
const { DiscordModules, WebpackModules, Patcher, PluginUtilities } = Library;
const { React, SelectedChannelStore: {getVoiceChannelId} } = DiscordModules;
const PanelSubtext = WebpackModules.find(m => m?.$$typeof?.toString() === "Symbol(react.forward_ref)"
&& m.render?.toString().includes("createHref"), {searchExports: true});
let lastVoice, lastState;
const Dispatcher = WebpackModules.getByProps('dispatch', 'register');
class Timer extends React.Component {
constructor(props) {
super(props);
this.connected = this.connected.bind(this);
this.state = {
startTime: 0,
delta: 0
};
}
connected(e) {
if (e.state && e.state === 'RTC_DISCONNECTED' && !e.hasOwnProperty('streamKey')) {
this.setState((prev) => (
prev.startTime = Date.now()));
}
}
componentDidMount() {
if(lastVoice === getVoiceChannelId()) {
Dispatcher.subscribe('RTC_CONNECTION_STATE', this.connected);
this.setState(lastState);
this.interval = setInterval(() => {
this.setState((prev) => (prev.delta = Math.round((Date.now() - prev.startTime) / 1000) * 1000));
this.setState((prev) => prev.lastVoice = getVoiceChannelId());
}, 1000);
}else{
this.setState((prev) => (
prev.startTime = Date.now()));
Dispatcher.subscribe('RTC_CONNECTION_STATE', this.connected);
this.interval = setInterval(() => {
this.setState((prev) => (prev.delta = Math.round((Date.now() - prev.startTime) / 1000) * 1000));
this.setState((prev) => prev.lastVoice = getVoiceChannelId());
}, 1000);
}
}
componentWillUnmount() {
Dispatcher.unsubscribe('RTC_CONNECTION_STATE', this.connected);
lastVoice = this.state.lastVoice;
lastState = this.state;
setTimeout(() => {
lastVoice = null;
lastState = {};
}, 1000)
clearInterval(this.interval);
}
render() {
return React.createElement("div", { className: "voiceTimer" }, `Time elapsed: ${new Date(this.state.delta).toISOString().substr(11, 8)}`);
}
};
class plugin extends Plugin {
constructor() {
super();
}
onStart() {
this.patch();
PluginUtilities.addStyle("voicetimer", `
.voiceTimer {
text-decoration: none !important;
margin-top: 8px;
}
`)
}
onStop() {
Patcher.unpatchAll();
PluginUtilities.removeStyle("voicetimer");
}
patch() {
Patcher.before(PanelSubtext, "render", (_, [props], ret) => {
if (!props?.children?.props?.className?.includes("channel")) return;
props.children.props.children = [
props.children.props.children,
React.createElement(Timer, { className: "voiceTimer" })
]
});
}
}
return plugin;
})(global.ZeresPluginLibrary.buildPlugin(config));

View file

@ -0,0 +1,7 @@
{
"all": {
"sliders": {
"showPercentage": 0
}
}
}

View file

@ -0,0 +1,6 @@
{
"currentVersionInfo": {
"version": "0.0.9",
"hasShownChangelog": true
}
}

View file

@ -0,0 +1,187 @@
/**
* @name HideDisabledEmojis
* @description Hides disabled emojis from the emoji picker.
* @version 0.0.9
* @author Zerebos
* @authorId 249746236008169473
* @website https://github.com/rauenzi/BetterDiscordAddons/tree/master/Plugins/HideDisabledEmojis
* @source https://github.com/rauenzi/BetterDiscordAddons/blob/master/Plugins/HideDisabledEmojis/HideDisabledEmojis.plugin.js
*/
/*@cc_on
@if (@_jscript)
// Offer to self-install for clueless users that try to run this directly.
var shell = WScript.CreateObject("WScript.Shell");
var fs = new ActiveXObject("Scripting.FileSystemObject");
var pathPlugins = shell.ExpandEnvironmentStrings("%APPDATA%\\BetterDiscord\\plugins");
var pathSelf = WScript.ScriptFullName;
// Put the user at ease by addressing them in the first person
shell.Popup("It looks like you've mistakenly tried to run me directly. \n(Don't do that!)", 0, "I'm a plugin for BetterDiscord", 0x30);
if (fs.GetParentFolderName(pathSelf) === fs.GetAbsolutePathName(pathPlugins)) {
shell.Popup("I'm in the correct folder already.", 0, "I'm already installed", 0x40);
} else if (!fs.FolderExists(pathPlugins)) {
shell.Popup("I can't find the BetterDiscord plugins folder.\nAre you sure it's even installed?", 0, "Can't install myself", 0x10);
} else if (shell.Popup("Should I copy myself to BetterDiscord's plugins folder for you?", 0, "Do you need some help?", 0x34) === 6) {
fs.CopyFile(pathSelf, fs.BuildPath(pathPlugins, fs.GetFileName(pathSelf)), true);
// Show the user where to put plugins in the future
shell.Exec("explorer " + pathPlugins);
shell.Popup("I'm installed!", 0, "Successfully installed", 0x40);
}
WScript.Quit();
@else@*/
const config = {
info: {
name: "HideDisabledEmojis",
authors: [
{
name: "Zerebos",
discord_id: "249746236008169473",
github_username: "rauenzi",
twitter_username: "ZackRauen"
}
],
version: "0.0.9",
description: "Hides disabled emojis from the emoji picker.",
github: "https://github.com/rauenzi/BetterDiscordAddons/tree/master/Plugins/HideDisabledEmojis",
github_raw: "https://github.com/rauenzi/BetterDiscordAddons/blob/master/Plugins/HideDisabledEmojis/HideDisabledEmojis.plugin.js"
},
changelog: [
{
title: "Bugs Squashed",
type: "fixed",
items: [
"Hides emojis in normal picker once again!",
"Hides emojis in the status emoji picker.",
"Hides extra unrelated buttons in status emoji picker."
]
}
],
main: "index.js"
};
class Dummy {
constructor() {this._config = config;}
start() {}
stop() {}
}
if (!global.ZeresPluginLibrary) {
BdApi.showConfirmationModal("Library Missing", `The library plugin needed for ${config.name ?? config.info.name} is missing. Please click Download Now to install it.`, {
confirmText: "Download Now",
cancelText: "Cancel",
onConfirm: () => {
require("request").get("https://betterdiscord.app/gh-redirect?id=9", async (err, resp, body) => {
if (err) return require("electron").shell.openExternal("https://betterdiscord.app/Download?id=9");
if (resp.statusCode === 302) {
require("request").get(resp.headers.location, async (error, response, content) => {
if (error) return require("electron").shell.openExternal("https://betterdiscord.app/Download?id=9");
await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), content, r));
});
}
else {
await new Promise(r => require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0PluginLibrary.plugin.js"), body, r));
}
});
}
});
}
module.exports = !global.ZeresPluginLibrary ? Dummy : (([Plugin, Api]) => {
const plugin = (Plugin, Api) => {
const {Patcher, DiscordModules, WebpackModules, Utilities} = Api;
return class HideDisabledEmojis extends Plugin {
async onStart() {
Patcher.after(DiscordModules.EmojiInfo, "isEmojiFiltered", (thisObject, methodArguments, returnValue) => {
return returnValue || DiscordModules.EmojiInfo.isEmojiDisabled(methodArguments[0], methodArguments[1]);
});
// BdApi.Webpack.Filters.byStrings("topEmojis", "getDisambiguatedEmojiContext")
let key = "";
const categoryMemo = WebpackModules.getModule(m => {
if (typeof(m) !== "object") return false;
const keys = Object.keys(m);
if (!keys.length) return false;
for (let k = 0; k < keys.length; k++) {
const val = m[keys[k]];
if (typeof(val?.toString) !== "function") continue;
const first = val.toString().includes("topEmojis");
const second = val.toString().includes("getDisambiguatedEmojiContext");
if (first && second) {
key = keys[k];
return true;
}
}
return false;
});
if (key && categoryMemo) {
Patcher.before(categoryMemo, key, (_, args) => {
// arg 0 = picker intention
// arg 1 = channel object
// arg 2 = guild id
// Create a fake channel object with a null guild id
// This fake object forces the categories to check isEmojiFiltered
if (args[1] == null) {
args[1] = {
getGuildId: () => null
};
}
});
}
const doFiltering = props => {
props.rowCountBySection = props.rowCountBySection.filter((c, i) => c || props.collapsedSections.has(props.sectionDescriptors[i].sectionId));
props.sectionDescriptors = props.sectionDescriptors.filter(s => s.count || props.collapsedSections.has(s.sectionId));
const wasFiltered = props.emojiGrid.filtered;
props.emojiGrid = props.emojiGrid.filter(r => r.length);
if (wasFiltered) props.emojiGrid.filtered = true; // Reassign
};
const PickerWrapMemo = WebpackModules.getModule(m => m?.type?.render?.toString?.()?.includes("EMOJI_PICKER_POPOUT"));
Patcher.after(PickerWrapMemo.type, "render", (_, [inputProps], ret) => {
const pickerChild = Utilities.findInTree(ret, m => m?.props?.emojiGrid, {walkable: ["props", "children"]});
if (!pickerChild?.type?.type) return;
ret.props.children.props.page = "DM Channel";
if (pickerChild.type.type.__patched) return;
Patcher.before(pickerChild.type, "type", (_, [props]) => {
if (!props.rowCountBySection) return;
if (props.emojiGrid.filtered) return doFiltering(props);
props.emojiGrid.filtered = true;
let row = 0;
for (let s = 0; s < props.sectionDescriptors.length; s++) {
const section = props.sectionDescriptors[s];
const rowCount = props.rowCountBySection[s];
const rowEnd = row + rowCount - 1;
let countLeft = 0;
let rowsLeft = 0;
for (let r = row; r <= rowEnd; r++) {
// If it's not disabled or if it's the upload button in status picker
props.emojiGrid[r] = props.emojiGrid[r].filter(e => !e.isDisabled && (e.type !== 1 || inputProps?.pickerIntention !== 1));
const remaining = props.emojiGrid[r].length;
if (remaining) {
rowsLeft = rowsLeft + 1;
countLeft = countLeft + remaining;
}
}
section.count = countLeft;
props.rowCountBySection[s] = rowsLeft;
row = rowEnd + 1;
}
doFiltering(props);
});
pickerChild.type.type.__patched = true;
});
}
onStop() {
Patcher.unpatchAll();
}
};
};
return plugin(Plugin, Api);
})(global.ZeresPluginLibrary.buildPlugin(config));
/*@end@*/

View file

@ -0,0 +1,16 @@
{
"all": {
"cached": "2 7 8 9 11 14 15 17 28 29 30 59 60 61 62 63 64 65 66 67 70 71 73 74 75 76 77 80 81 82 83 85 86 87 88 89 91 92 93 94 95 96 97 98 99 100 101 102 104 105 106 108 109 110 111 120 126 127 131 132 134 137 138 139 146 157 158 159 160 162 171 173 176 179 181 182 183 184 185 186 188 189 190 193 195 196 197 200 201 228 237 238 240 245 262 274 278 287 291 292 293 295 306 312 314 317 318 323 331 344 350 351 352 353 354 356 366 368 377 379 381 382 383 390 395 401 404 420 421 429 438 442 476 479 489 509 518 520 523 525 535 539 547 554 577 579 589 592 593 598 599 606 608 611 614 620 621 627 638 644 645 670 671 679 686 692 693 694 699 708 760 762 772 798 802 805 806 807 819 827 843 845 850 856 859 867 878 881 882 883 930 936 938 953 954 970 971 979 989 990 996 1000 1005 1010 1016 1023",
"filters": {
"updated": true,
"outdated": true,
"downloadable": true
},
"general": {
"notifyNewEntries": true,
"notifyOutdated": true,
"startDownloaded": true,
"startUpdated": true
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,10 @@
{
"all": {
"amounts": {
"splitCounter": 0
},
"general": {
"byNewlines": false
}
}
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,16 @@
{
"all": {
"cached": "1 3 16 18 22 23 26 32 33 39 40 41 45 46 47 48 49 52 53 56 112 124 125 140 142 144 147 153 155 156 161 166 172 174 177 204 205 209 211 212 213 216 218 222 226 231 233 252 256 257 258 286 296 300 308 320 329 342 359 362 369 371 374 385 394 399 405 411 412 422 439 468 483 485 507 508 515 541 553 572 576 580 581 597 601 607 613 626 636 637 641 642 643 653 659 662 664 665 695 712 713 714 719 722 733 734 735 736 737 746 752 753 770 781 813 823 848 865",
"filters": {
"updated": true,
"outdated": true,
"downloadable": true
},
"general": {
"notifyOutdated": true,
"notifyNewEntries": true,
"startDownloaded": false,
"startUpdated": false
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,6 @@
{
"currentVersionInfo": {
"version": "1.0.5",
"hasShownChangelog": true
}
}

View file

@ -0,0 +1,194 @@
/**
* @name TypingUsersAvatars
* @source https://github.com/QWERTxD/BetterDiscordPlugins/blob/main/TypingUsersAvatars/TypingUsersAvatars.plugin.js
* @updateUrl https://raw.githubusercontent.com/QWERTxD/BetterDiscordPlugins/main/TypingUsersAvatars/TypingUsersAvatars.plugin.js
* @website https://github.com/QWERTxD/BetterDiscordPlugins/tree/main/TypingUsersAvatars
* @version 1.0.5
* @description Shows avatars of typing users.
*/
const request = require('request');
const fs = require('fs');
const path = require('path');
const config = {
info: {
name: 'TypingUsersAvatars',
authors: [
{
name: 'QWERT'
}
],
version: '1.0.5',
description: 'Shows avatars of typing users.',
github_raw: "https://raw.githubusercontent.com/QWERTxD/BetterDiscordPlugins/main/TypingUsersAvatars/TypingUsersAvatars.plugin.js",
},
changelog: [
{
title: 'What\'s new?',
type: 'added',
items: [
'Added option to show guild avatars of typing users',
]
}
],
defaultConfig: [
{
type: 'switch',
name: 'Show users status',
id: 'showStatus',
value: true
},
{
type: 'switch',
name: 'Show guild avatars',
id: 'showGuildAvatar',
value: true
}
]
};
module.exports = !global.ZeresPluginLibrary ? class {
constructor() {
this._config = config;
}
load() {
BdApi.showConfirmationModal('Library plugin is needed',
`The library plugin needed for AQWERT'sPluginBuilder is missing. Please click Download Now to install it.`, {
confirmText: 'Download',
cancelText: 'Cancel',
onConfirm: () => {
request.get('https://rauenzi.github.io/BDPluginLibrary/release/0PluginLibrary.plugin.js', (error, response, body) => {
if (error)
return electron.shell.openExternal('https://betterdiscord.net/ghdl?url=https://raw.githubusercontent.com/rauenzi/BDPluginLibrary/master/release/0PluginLibrary.plugin.js');
fs.writeFileSync(path.join(BdApi.Plugins.folder, '0PluginLibrary.plugin.js'), body);
});
}
});
}
start() { }
stop() { }
} : (([Plugin, Library]) => {
const { DiscordModules, WebpackModules, PluginUtilities, Patcher, ReactComponents, Popouts, Utilities, DiscordSelectors } = Library;
const { React, UserStore, RelationshipStore, UserStatusStore, Strings } = DiscordModules;
const AssetUtils = WebpackModules.getByProps("getUserBannerURL");
const Avatar = WebpackModules.getByProps('AnimatedAvatar');
const VoiceUserSummary = WebpackModules.findByDisplayName("VoiceUserSummaryItem")
class AvatarComponent extends React.Component {
render() {
const { user, status, guildId } = this.props;
const guildAvatar = AssetUtils.getGuildMemberAvatarURL({ guildId: guildId, userId: user.id, avatar: user.guildMemberAvatars[guildId] });
return React.createElement(Avatar.default, {
src: user?.guildMemberAvatars[guildId] ? guildAvatar : user.getAvatarURL(),
status: status,
size: Avatar.Sizes.SIZE_16,
onClick() {
Popouts.showUserPopout(document.getElementById(`typing-user-${user.id}`), user)
}
})
}
}
class plugin extends Plugin {
constructor() {
super();
this.getSettingsPanel = () => {
return this.buildSettingsPanel().getElement();
};
}
onStart() {
Utilities.suppressErrors(this.patch.bind(this))();
PluginUtilities.addStyle('TypingUsersAvatars', `
.typing-2J1mQU .text-3S7XCz {
margin: 0;
}
.typing-2J1mQU .wrapper-1VLyxH {
display: flex;
margin: 0 4px;
}
.typing-2J1mQU .text-3S7XCz,
.typing-2J1mQU .text-3S7XCz > strong {
display: contents;
}
.several-users {
margin-left: 5px;
margin-right: 5px;
}
.several-users .avatarSize-1KpZ5E {
margin: 0;
}
`)
}
onStop() {
Patcher.unpatchAll();
PluginUtilities.removeStyle('TypingUsersAvatars');
}
filter(users) {
return Object.keys(users).filter((user) => {
return user != UserStore.getCurrentUser().id && !RelationshipStore.isBlocked(user);
})
}
/* code highly inspired by https://github.com/rauenzi/BetterDiscordAddons/blob/master/Plugins/BetterRoleColors/BetterRoleColors.plugin.js */
async patch() {
const TypingUsers = await ReactComponents.getComponentByName('TypingUsers', DiscordSelectors.Typing.typing);
Patcher.after(TypingUsers.component.prototype, 'render', (thisObject, [props], ret) => {
const typingUsers = this.filter({ ...thisObject.props.typingUsers });
const guildId = thisObject.props?.guildId;
for (let u = 0; u < typingUsers.length; u++) {
const user = UserStore.getUser(typingUsers[u]);
const status = this.settings.showStatus ? UserStatusStore.getStatus(user.id) : null;
if (ret.props.children[0].props.children[1]?.props.children !== Strings.Messages.SEVERAL_USERS_TYPING) {
const usersComponent = ret.props.children[0].props.children[1].props.children.filter(user => user.props);
usersComponent[u].props.children.unshift(React.createElement("div", {
id: `typing-user-${user.id}`,
children: React.createElement(AvatarComponent, { user, status, guildId })
}));
} else {
ret.props.children[0].props.children = [
React.createElement(VoiceUserSummary, {
className: "several-users",
users: typingUsers.map(UserStore.getUser),
max: 3
}),
ret.props.children[0].props.children
]
}
}
if (!ret) return;
const tree = ret.props.children;
if (!tree) return;
tree.map((child) => {
const children = child?.props?.children;
if (!children || typeof children !== 'object') return;
child.props.style = {
display: 'flex',
alignItems: 'center'
};
})
})
}
}
return plugin;
})(global.ZeresPluginLibrary.buildPlugin(config));

View file

@ -0,0 +1,6 @@
{
"currentVersionInfo": {
"version": "2.0.19",
"hasShownChangelog": true
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,115 @@
/**
* @name ClearVision
* @author ClearVision Team
* @version 6.3.0
* @description Highly customizable theme for BetterDiscord.
* @source https://github.com/ClearVision/ClearVision-v6
* @website https://clearvision.github.io
* @invite dHaSxn3
*/
/* Credits to Zerthox for making the original theme. */
/* IMPORT CSS */
@import url(https://clearvision.github.io/ClearVision-v6/main.css);
/* SETTINGS */
:root {
/* ACCENT COLORS */
--main-color: #2780e6; /* main accent color (hex, rgb or hsl) [default: #2780e6] */
--hover-color: #1e63b3; /* hover accent color (hex, rgb or hsl) [default: #1e63b3] */
--success-color: #43b581; /* success accent color (hex, rgb or hsl) [default: #43b581] */
--danger-color: #982929; /* danger accent color (hex, rgb or hsl) [default: #982929] */
--url-color: var(--main-color); /*The color of url links [default: var(--main-color)]*/
/* STATUS COLORS */
--online-color: #43b581; /* online status color (hex, rgb or hsl) [default: #43b581] */
--idle-color: #faa61a; /* idle status color (hex, rgb or hsl) [default: #faa61a] */
--dnd-color: #982929; /* dnd status color (hex, rgb or hsl) [default: #982929] */
--streaming-color: #593695; /* streaming status color (hex, rgb or hsl) [default: #593695] */
--offline-color: #808080; /* offline/invisible status color (hex, rgb or hsl) [default: #808080] */
/* GENERAL */
--main-font: JetBrains Mono, Whitney, gg sans, Helvetica Neue, Helvetica, Arial, sans-serif; /* main font for app (font must be installed) [default: Whitney, Helvetica Neue, Helvetica, Arial, sans-serif] */
--code-font: JetBrains Mono, Consolas, Liberation Mono, Menlo, Courier, monospace; /* font for codeblocks (font must be installed) [default: Consolas, Liberation Mono, Menlo, Courier, monospace] */
--text-normal: rgb(220, 221, 222); /* color of default discord text */
--text-muted: rgb(114, 118, 125); /* color of default discord muted text (e.g.text found in input fields before typing).*/
--channels-width: 220px; /* channel list width (240px for Discord default) [default: 220px] */
--members-width: 240px; /* member list width [default: 240px] */
/* APP BACKGROUND */
--background-shading: 100%; /* app background shading (0 for complete smoothness) [default: 100%] */
--background-overlay: rgba(0, 0, 0, 0.0); /* app background overlay color/gradient [default: rgba(0, 0, 0, 0.6)] */
--background-image: rgba(40, 42, 46, 0.6); /* app background image (link must be HTTPS) [default: url(https://clearvision.github.io/images/sapphire.jpg)]*/
--background-position: center; /* app background position [default: center] */
--background-size: cover; /* app background size [default: cover] */
--background-repeat: no-repeat; /* app background repeat [default: no-repeat] */
--background-attachment: fixed; /* app background attachment [default: fixed] */
--background-brightness: 100%; /* app background brightness (< 100% for darken, > 100% for lighten) [default: 100%] */
--background-contrast: 100%; /* app background contrast [default: 100%] */
--background-saturation: 100%; /* app background saturation [default: 100%] */
--background-invert: 0%; /* app background invert (0 - 100%) [default: 0%] */
--background-grayscale: 0%; /* app background grayscale ( 0 - 100%) [default: 0%] */
--background-sepia: 0%; /* app background sepia (0 - 100%) [default: 0%] */
--background-blur: 0px; /* app background blur [default: 0px] */
/* HOME BUTTON ICON */
--home-icon: url(https://clearvision.github.io/icons/discord.svg); /* home button icon (link must be HTTPS) [default: url(https://clearvision.github.io/icons/discord.svg)]*/
--home-position: center; /* home button icon position [default: center] */
--home-size: 40px; /* home button icon size [default: 40px] */
/* CHANNEL COLORS */
--channel-unread: var(--main-color); /* Unread Server channel color. [default: var(--main-color)] THIS OVERRIDES YOUR MAIN COLOR*/
--channel-color: rgba(255, 255, 255, 0.3); /*Read Server channel color [default: rgba(255,255,255,0.3);]*/
--channel-text-selected: #fff; /* Selected channel text color, CV default is #fff */
--muted-color: rgba(255, 255, 255, 0.1); /*Muted channel color [default: rgba(255,255,255,0.1);]*/
/* MODAL BACKDROP */
--backdrop-overlay: rgba(0, 0, 0, 0.8); /* modal backdrop overlay color/gradient [default: rgba(0, 0, 0, 0.8)] */
--backdrop-image: var(--background-image); /* modal backdrop image (link must be HTTPS) [default: var(--background-image)] */
--backdrop-position: var(--background-position); /* modal backdrop position [default: var(--background-position)] */
--backdrop-size: var(--background-size); /* modal backdrop size [default: var(--background-size)] */
--backdrop-repeat: var(--background-repeat); /* modal backdrop repeat [default: var(--background-repeat)] */
--backdrop-attachment: var(--background-attachment); /* modal backdrop attachment [default: var(--background-attachment)] */
--backdrop-brightness: var(--background-brightness); /* modal backdrop brightness (< 100% for darken, > 100% for lighten) [default: var(--background-brightness)] */
--backdrop-contrast: var(--background-contrast); /* modal backdrop contrast [default: var(--background-contrast)] */
--backdrop-saturation: var(--background-saturation); /* modal backdrop saturation [default: var(--background-saturation)] */
--backdrop-invert: var(--background-invert); /* modal backdrop invert (0 - 100%) [default: var(--background-invert)] */
--backdrop-grayscale: var(--background-grayscale); /* modal backdrop grayscale ( 0 - 100%) [default: var(--background-grayscale)] */
--backdrop-sepia: var(--background-sepia); /* modal backdrop sepia (0 - 100%) [default: var(--background-sepia)] */
--backdrop-blur: var(--background-blur); /* modal backdrop blur [default: var(--background-blur)] */
/* USER POPOUT BACKGROUND */
--user-popout-image: var(--background-image); /* app background image (link must be HTTPS) [default: var(--background-image)] */
--user-popout-position: var(--background-position); /* user popout background position [default: var(--background-position)] */
--user-popout-size: var(--background-size); /* user popout background size [default: var(--background-size)] */
--user-popout-repeat: var(--background-repeat); /* user popout background repeat [default: var(--background-repeat)] */
--user-popout-attachment: var(--background-attachment); /* user popout background attachment [default: var(--background-attachment)] */
--user-popout-brightness: var(--background-brightness); /* user popout background brightness (< 100% for darken, > 100% for lighten) [default: var(--background-brightness)] */
--user-popout-contrast: var(--background-contrast); /* user popout background contrast [default: var(--background-contrast)] */
--user-popout-saturation: var(--background-saturation); /* user popout background saturation [default: var(--background-saturation)] */
--user-popout-invert: var(--background-invert); /* user popout background invert (0 - 100%) [default: var(--background-invert)] */
--user-popout-grayscale: var(--background-grayscale); /* user popout background grayscale (0 - 100%) [default: var(--background-grayscale)] */
--user-popout-sepia: var(--background-sepia); /* user popout background sepia (0 - 100%) [default: var(--background-sepia)] */
--user-popout-blur: calc(var(--background-blur) + 3px); /* user popout background blur [default: calc(var(--background-blur) + 3px)] */
--user-popout-overlay: rgba(0, 0, 0, 0.6); /* user popout overlay color [default: rgba(0, 0, 0, .6)] */
/* USER MODAL BACKGROUND */
--user-modal-image: var(--background-image); /* app background image (link must be HTTPS) [default: var(--background-image)] */
--user-modal-position: var(--background-position); /* user modal background position [default: var(--background-position)] */
--user-modal-size: var(--background-size); /* user modal background size [default: var(--background-size)] */
--user-modal-repeat: var(--background-repeat); /* user modal background repeat [default: var(--background-repeat)] */
--user-modal-attachment: var(--background-attachment); /* user modal background attachment [default: var(--background-attachment)] */
--user-modal-brightness: var(--background-brightness); /* user modal background brightness (< 100% for darken, > 100% for lighten) [default: var(--background-brightness)] */
--user-modal-contrast: var(--background-contrast); /* user modal background contrast [default: var(--background-contrast)] */
--user-modal-saturation: var(--background-saturation); /* user modal background saturation [default: var(--background-saturation)] */
--user-modal-invert: var(--background-invert); /* user modal background invert (0 - 100%) [default: var(--background-invert)] */
--user-modal-grayscale: var(--background-grayscale); /* user modal background grayscale (0 - 100%) [default: var(--background-grayscale)] */
--user-modal-sepia: var(--background-sepia); /* user modal background sepia (0 - 100%) [default: var(--background-sepia)] */
--user-modal-blur: calc(var(--background-blur) + 3px); /* user modal background blur [default: calc(var(--background-blur) + 3px)] */
/* THEME BD COLORS */
--bd-blue: var(--main-color); /* betterdiscord main color [default: var(--main-color)] */
--bd-blue-hover: var(--hover-color); /* betterdiscord hover color [default: var(--hover-color)] */
--bd-blue-active: var(--hover-color); /* betterdiscord active color [default: var(--hover-color)] */
}

View file

@ -0,0 +1,21 @@
/**
* @name Dark Matter
* @author Tropical#8908, Hammock#3110
* @version 3.0.0
* @description A cold, dark & frosty theme.
* @source https://github.com/DiscordStyles/DarkMatter/
*/
@import url('https://DiscordStyles.github.io/DarkMatter/src/base.css');
/* Variables */
:root {
--avatar-size: 32px;
--background-image: url('https://i.imgur.com/7SbtKvw.png');
--home-image: url('https://i.imgur.com/233d55Y.gif');
--background-solid: #161921;
--background-solid-dark: #101218;
--background-solid-darker: #0c0e12;
--accent: 37, 172, 232;
--accent-alt: 29, 101, 134;
}

View file

@ -0,0 +1,91 @@
/**
* @name Discord+
* @author PlusInsta
* @authorId 309931975102300160
* @authorLink https://plusinsta.xyz
* @version 3.2.1
* @description A sleek, customizable Discord theme.
* @donate https://ko-fi.com/plusinsta
* @website https://plusinsta.github.io/discord-plus
* @source https://github.com/PlusInsta/discord-plus
* @updateUrl https://plusinsta.github.io/discord-plus/DiscordPlus.theme.css
* @invite 2Jwh2nS
*/
@import url(https://plusinsta.github.io/discord-plus/src/DiscordPlus-source.theme.css);
/* I've commented most of these values so you can change them yourself. If you're having trouble, or you want to do more than what these values allow for, a volunteer might be able to help you in my server. */
.theme-dark {
/* Backdrop image which is shown behind the app. Can also be an HTML color. Falls back to accent color if invalid.
To use an image from your computer, upload it somewhere first, copy its link, then paste it below. */
--dplus-backdrop: url(https://i.imgur.com/3AiL3yN.png);
/* Accent color, used to decorate the UI with colors. */
--dplus-accent-color-hue: 320;
--dplus-accent-color-saturation: 60%;
--dplus-accent-color-lightness: 31%;
/* Foreground color: For things like text and icons. */
--dplus-foreground-color-hue-base: 210;
--dplus-foreground-color-hue-links: 197;
--dplus-foreground-color-saturation-amount: 1;
--dplus-foreground-color-lightness-amount: 1;
/* Background color: Covers the backdrop so the app is easier to read. */
--dplus-background-color-hue: 320;
--dplus-background-color-saturation-amount: 1;
--dplus-background-color-lightness-amount: 1;
--dplus-background-color-alpha: 0.8;
}
/* If you use light theme, you can give it unique settings that are separate from dark theme. */
.theme-light {
--dplus-backdrop: url(https://i.imgur.com/3AiL3yN.png);
--dplus-accent-color-hue: 320;
--dplus-accent-color-saturation: 60%;
--dplus-accent-color-lightness: 31%;
--dplus-foreground-color-hue-base: 210;
--dplus-foreground-color-hue-links: 197;
--dplus-foreground-color-saturation-amount: 1;
--dplus-foreground-color-lightness-amount: 1;
--dplus-background-color-hue: 320;
--dplus-background-color-saturation-amount: 1;
--dplus-background-color-lightness-amount: 1;
--dplus-background-color-alpha: 0.8;
}
:root {
/* Fonts */
/* You can use any installed font on your device. */
--dplus-font-ui: 'Poppins';
--dplus-font-body: 'Roboto';
--dplus-font-header: 'Righteous';
/* Round corner sizes, measured in pixel radius.
Set avatar/server radius to 50% to make them circular.
UI radius must be in pixels, otherwise things break. */
--dplus-radius-ui: 10px;
--dplus-radius-avatar: 20%;
--dplus-radius-server: 20%;
/* This decides how much breathing room there should be between things like buttons and content. */
--dplus-spacing-ui: 10px;
/* This sets how much space there should be between the app contents and the edges of the window. It also affects the distance between major UI elements, such as the server list to the channel list and channel list to the chat. */
--dplus-spacing-app: 10px;
/* Size of user and server icons */
--dplus-icon-avatar-chat: 64px;
--dplus-icon-avatar-list: 32px;
--dplus-icon-avatar-profile: 80px;
--dplus-icon-server-sidebar: 48px;
--dplus-icon-server-list: 32px;
/* The Home icon on the top left */
--dplus-icon-home-dark: url(https://plusinsta.github.io/discord-plus/assets/discord/home_dark.svg);
--dplus-icon-home-light: url(https://plusinsta.github.io/discord-plus/assets/discord/home_light.svg);
}

View file

@ -0,0 +1,69 @@
/**
* @name Frosted Glass
* @author Gibbu#1211
* @version 2.0.0
* @description Display your picture of choice with adjustable blur and brightness. Dark theme is required.
* @invite ZHthyCw
* @donate https://paypal.me/IanRGibson
* @authorId 174868361040232448
* @source https://github.com/DiscordStyles/FrostedGlass
* @website https://gibbu.me/
*/
@import url("https://discordstyles.github.io/FrostedGlass/dist/FrostedGlass.css");
/* BlackBox tags */
@import url('https://monstrousdev.github.io/themes/addons/user-tags.css');
/* Old Windows titlebar - remove this @import if you wish to use default titlebar */
@import url("https://gibbu.github.io/BetterDiscord-Themes/addons/windows-titlebar.css");
:root {
/* Background image variables */
--background-image: url('https://i.imgur.com/kYW2H5C.jpg'); /* Main background image | URL MUST BE A DIRECT LINK (ending in .jpg, .jpeg, .png, .gif) */
--background-image-blur: 5px; /* Blur intensity of --background-image | Must end in px | DEFAULT: 5px */
--background-image-size: cover; /* Size of the background image | DEFAUT: cover | OPTIONS: cover, contain */
--background-image-position: center; /* Position of background image | DEAFULT: center | OPTIONS: top, right, bottom, left, center */
/* Popout & Modal variables */
--popout-modal-image: var(--background-image); /* Background image for popouts and modals | URL MUST BE A DIRECT LINK (ending in .jpg, .jpeg, .png, .gif) */
--popout-modal-blur: 5px; /* Blur intensity of --popout-modal-image | Must end in px | DEFAULT: 5px */
--popout-modal-size: cover; /* Size of the popout/modal image | DEFAUT: cover | OPTIONS: cover, contain */
--popout-modal-position: center; /* Position of popout/modal image | DEAFULT: center | OPTIONS: top, right, bottom, left, center */
/* Home image variables */
--home-button-image: url('https://gibbu.github.io/BetterDiscord-Themes/FrostedGlass/assets/discord.svg'); /* Home button image | URL MUST BE A DIRECT LINK (ending in .jpg, .jpeg, .png, .gif) */
--home-button-size: cover; /* Size of the home button image | DEFAUT: cover */
--home-button-position: center; /* Position of home button image | DEAFULT: center */
/* Brightness variables */
--serverlist-brightness: 0.8; /* Brightness for serverlist | 0 - 1 (decimals allowed) | DEFAULT: 0.8 */
--left-brightness: 0.8; /* Channels and DM list brightness | 0 - 1 (decimals allowed) | DEFAULT: 0.8 */
--middle-brightness: 0.6; /* Chat brightness | 0 - 1 (decimals allowed) | DEFAULT: 0.6 */
--right-brightness: 0; /* Members and Now Playing brightness | 0 - 1 (decimals allowed) | DEFAULT: 0 */
--popout-modal-brightness: 0.75; /* Brightness for popouts and modals | 0 - 1 (decimals allowed) | DEFAULT: 0.75 */
/* Gradient variables */
--gradient-primary: 103,58,183; /* DEFAULT: 103,58,183 */
--gradient-secondary: 63,81,181; /* DEFAULT: 63,81,181 */
--gradient-direction: 320deg; /* DEFAULT: 320deg */
/* Tint variables */
--tint-colour: 255,51,159; /* Colour of tint | DEAFULT: 255,51,159 */
--tint-brightness: 0; /* Brightness of --tint-colour | 0 - 1 (decimals allowed) | DEFAULT: 0 */
/* Other variables */
--window-padding: 20px; /* Spacing around the Discord window | DEFAULT: 20px */
--window-roundness: 10px; /* Roundness of Discord | DEFAULT: 10px */
--scrollbar-colour: rgba(255,255,255,0.05); /* DEFAULT: rgba(255,255,255,0.05) */
--link-colour: #00b0f4; /* DEFAULT: #00b0f4 */
/*
Visit https://fonts.google.com and select one to your liking.
Now just follow this tutorial: https://imgur.com/a/CNbw7xC
*/
--font: 'Whitney';
/* Do not touch */
--update-notice-1: none;
}

1
X11/xresources Normal file
View file

@ -0,0 +1 @@
Xcursor.size: 16

3
bash/.bash_logout Normal file
View file

@ -0,0 +1,3 @@
#
# ~/.bash_logout
#

5
bash/.bash_profile Normal file
View file

@ -0,0 +1,5 @@
#
# ~/.bash_profile
#
[[ -f ~/.bashrc ]] && . ~/.bashrc

9
bash/.bashrc Normal file
View file

@ -0,0 +1,9 @@
#
# ~/.bashrc
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
alias ls='ls --color=auto'
PS1='[\u@\h \W]\$ '

View file

@ -1,11 +1,41 @@
dotfiles_dir = "dev/dotfiles"
[settings]
posthooks = [ "i3-msg restart" ]
posthooks = [
"i3-msg restart",
]
[settings.dots]
templates = { source = "Templates", target = "Templates" }
scripts = { source = "scripts", target = "scripts" }
editorconfig = { source = "home/editorconfig", target = ".editorconfig" }
xinitrc = { source = "home/xinitrc", target = ".xinitrc" }
picom = { source = "config/picom.conf", target = ".config/picom.conf" }
git = { source = "git/config", target = ".config/git/config" }
bash = { source = "bash", target = ".config/bash" }
betterdiscord = { source = "BetterDiscord", target = ".config/BetterDiscord" }
btop = { source = "btop", target = ".config/btop" }
dunst = { source = "dunst", target = ".config/dunst" }
fastfetch = { source = "fastfetch", target = ".config/fastfetch" }
gtk2 = { source = "gtk/gtk-2.0", target = ".config/gtk-2.0" }
gtk3 = { source = "gtk/gtk-3.0", target = ".config/gtk-3.0" }
gtk4 = { source = "gtk/gtk-4.0", target = ".config/gtk-4.0" }
gtk5 = { source = "gtk/gtk-5.0", target = ".config/gtk-5.0" }
gtk6 = { source = "gtk/gtk-6.0", target = ".config/gtk-6.0" }
i3 = { source = "i3", target = ".config/i3" }
kitty = { source = "kitty", target = ".config/kitty" }
lvim = { source = "lvim/config.lua", target = ".config/lvim/config.lua" }
nvim = { source = "nvim", target = ".config/nvim" }
pipewire = { source = "pipewire", target = ".config/pipewire" }
polybar = { source = "polybar", target = ".config/polybar" }
ranger = { source = "ranger", target = ".config/ranger" }
rofi = { source = "rofi", target = ".config/rofi" }
roficafmenu = { source = "rofi-cafmenu", target = ".config/rofi-cafmenu" }
screenlayout = { source = "screenlayout", target = ".config/screenlayout" }
vim = { source = "vim", target = ".config/vim" }
X11 = { source = "X11", target = ".config/X11" }
zsh = { source = "zsh", target = ".config/zsh" }

212
btop/btop.conf Executable file
View file

@ -0,0 +1,212 @@
#? Config file for btop v. 1.2.13
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
color_theme = "Default"
#* If the theme set background should be shown, set to False if you want terminal background transparency.
theme_background = True
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
truecolor = True
#* Set to true to force tty mode regardless if a real tty has been detected or not.
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
force_tty = False
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
#* Use whitespace " " as separator between different presets.
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
vim_keys = False
#* Rounded corners on boxes, is ignored if TTY mode is ON.
rounded_corners = True
#* Default symbols to use for graph creation, "braille", "block" or "tty".
#* "braille" offers the highest resolution but might not be included in all fonts.
#* "block" has half the resolution of braille but uses more common characters.
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
graph_symbol = "braille"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_cpu = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_mem = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_net = "default"
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
graph_symbol_proc = "default"
#* Manually set which boxes to show. Available values are "cpu mem net proc", separate values with whitespace.
shown_boxes = "cpu net proc mem"
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
update_ms = 2000
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
proc_sorting = "memory"
#* Reverse sorting order, True or False.
proc_reversed = False
#* Show processes as a tree.
proc_tree = True
#* Use the cpu graph colors in the process list.
proc_colors = True
#* Use a darkening gradient in the process list.
proc_gradient = True
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
proc_per_core = False
#* Show process memory as bytes instead of percent.
proc_mem_bytes = True
#* Show cpu graph for each process.
proc_cpu_graphs = True
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
proc_info_smaps = False
#* Show proc box on left side of screen instead of right.
proc_left = False
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
proc_filter_kernel = True
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_upper = "total"
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
#* Select from a list of detected attributes from the options menu.
cpu_graph_lower = "total"
#* Toggles if the lower CPU graph should be inverted.
cpu_invert_lower = True
#* Set to True to completely disable the lower CPU graph.
cpu_single_graph = False
#* Show cpu box at bottom of screen instead of top.
cpu_bottom = False
#* Shows the system uptime in the CPU box.
show_uptime = True
#* Show cpu temperature.
check_temp = True
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
cpu_sensor = "Auto"
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
show_coretemp = True
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
#* Example: "4:0 5:1 6:3"
cpu_core_map = ""
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
temp_scale = "celsius"
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
base_10_sizes = False
#* Show CPU frequency.
show_cpu_freq = True
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
clock_format = "%X"
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
background_update = True
#* Custom cpu model name, empty string to disable.
custom_cpu_name = ""
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
disks_filter = "exclude=/boot"
#* Show graphs instead of meters for memory values.
mem_graphs = True
#* Show mem box below net box instead of above.
mem_below_net = False
#* Count ZFS ARC in cached and available memory.
zfs_arc_cached = True
#* If swap memory should be shown in memory box.
show_swap = True
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
swap_disk = True
#* If mem box should be split to also show disks info.
show_disks = True
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
only_physical = True
#* Read disks list from /etc/fstab. This also disables only_physical.
use_fstab = True
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
zfs_hide_datasets = False
#* Set to true to show available disk space for privileged users.
disk_free_priv = False
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
show_io_stat = True
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
io_mode = False
#* Set to True to show combined read/write io graphs in io mode.
io_graph_combined = False
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
#* Example: "/mnt/media:100 /:20 /boot:1".
io_graph_speeds = ""
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
net_download = 100
net_upload = 100
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
net_auto = True
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
net_sync = False
#* Starts with the Network Interface specified here.
net_iface = ""
#* Show battery stats in top right if battery is present.
show_battery = True
#* Which battery to use if multiple are present. "Auto" for auto detection.
selected_battery = "Auto"
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
log_level = "WARNING"

462
dunst/dunstrc Normal file
View file

@ -0,0 +1,462 @@
# See dunst(5) for all configuration options
[global]
### Display ###
# Which monitor should the notifications be displayed on.
monitor = 1
# Display notification on focused monitor. Possible modes are:
# mouse: follow mouse pointer
# keyboard: follow window with keyboard focus
# none: don't follow anything
#
# "keyboard" needs a window manager that exports the
# _NET_ACTIVE_WINDOW property.
# This should be the case for almost all modern window managers.
#
# If this option is set to mouse or keyboard, the monitor option
# will be ignored.
follow = none
### Geometry ###
# dynamic width from 0 to 300
# width = (0, 300)
# constant width of 300
width = 300
# The maximum height of a single notification, excluding the frame.
height = 300
# Position the notification in the top right corner
#origin = top-right
origin = top-left
# Offset from the origin
offset = 3x3
# Scale factor. It is auto-detected if value is 0.
scale = 0
# Maximum number of notification (0 means no limit)
notification_limit = 0
### Progress bar ###
# Turn on the progess bar. It appears when a progress hint is passed with
# for example dunstify -h int:value:12
progress_bar = true
# Set the progress bar height. This includes the frame, so make sure
# it's at least twice as big as the frame width.
progress_bar_height = 10
# Set the frame width of the progress bar
progress_bar_frame_width = 1
# Set the minimum width for the progress bar
progress_bar_min_width = 150
# Set the maximum width for the progress bar
progress_bar_max_width = 300
# Show how many messages are currently hidden (because of
# notification_limit).
indicate_hidden = yes
# The transparency of the window. Range: [0; 100].
# This option will only work if a compositing window manager is
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
transparency = 0
# Draw a line of "separator_height" pixel height between two
# notifications.
# Set to 0 to disable.
# If gap_size is greater than 0, this setting will be ignored.
separator_height = 2
# Padding between text and separator.
padding = 8
# Horizontal padding.
horizontal_padding = 8
# Padding between text and icon.
text_icon_padding = 0
# Defines width in pixels of frame around the notification window.
# Set to 0 to disable.
frame_width = 2
# Defines color of the frame around the notification window.
#frame_color = "#c5c8c6"
#frame_color = "#f0c674"
background = "#282a2e"
# Size of gap to display between notifications - requires a compositor.
# If value is greater than 0, separator_height will be ignored and a border
# of size frame_width will be drawn around each notification instead.
# Click events on gaps do not currently propagate to applications below.
gap_size = 0
# Define a color for the separator.
# possible values are:
# * auto: dunst tries to find a color fitting to the background;
# * foreground: use the same color as the foreground;
# * frame: use the same color as the frame;
# * anything else will be interpreted as a X color.
separator_color = frame
# Sort messages by urgency.
sort = yes
# Don't remove messages, if the user is idle (no mouse or keyboard input)
# for longer than idle_threshold seconds.
# Set to 0 to disable.
# A client can set the 'transient' hint to bypass this. See the rules
# section for how to disable this if necessary
# idle_threshold = 120
### Text ###
font = JetBrains Mono 10
# The spacing between lines. If the height is smaller than the
# font height, it will get raised to the font height.
line_height = 0
# Possible values are:
# full: Allow a small subset of html markup in notifications:
# <b>bold</b>
# <i>italic</i>
# <s>strikethrough</s>
# <u>underline</u>
#
# For a complete reference see
# <https://docs.gtk.org/Pango/pango_markup.html>.
#
# strip: This setting is provided for compatibility with some broken
# clients that send markup even though it's not enabled on the
# server. Dunst will try to strip the markup but the parsing is
# simplistic so using this option outside of matching rules for
# specific applications *IS GREATLY DISCOURAGED*.
#
# no: Disable markup parsing, incoming notifications will be treated as
# plain text. Dunst will not advertise that it has the body-markup
# capability if this is set as a global setting.
#
# It's important to note that markup inside the format option will be parsed
# regardless of what this is set to.
markup = full
# The format of the message. Possible variables are:
# %a appname
# %s summary
# %b body
# %i iconname (including its path)
# %I iconname (without its path)
# %p progress value if set ([ 0%] to [100%]) or nothing
# %n progress value if set without any extra characters
# %% Literal %
# Markup is allowed
format = "<b>%s</b>\n%b"
# Alignment of message text.
# Possible values are "left", "center" and "right".
alignment = left
# Vertical alignment of message text and icon.
# Possible values are "top", "center" and "bottom".
vertical_alignment = center
# Show age of message if message is older than show_age_threshold
# seconds.
# Set to -1 to disable.
show_age_threshold = 60
# Specify where to make an ellipsis in long lines.
# Possible values are "start", "middle" and "end".
ellipsize = middle
# Ignore newlines '\n' in notifications.
ignore_newline = no
# Stack together notifications with the same content
stack_duplicates = true
# Hide the count of stacked notifications with the same content
hide_duplicate_count = false
# Display indicators for URLs (U) and actions (A).
show_indicators = yes
### Icons ###
# Recursive icon lookup. You can set a single theme, instead of having to
# define all lookup paths.
enable_recursive_icon_lookup = true
# Set icon theme (only used for recursive icon lookup)
icon_theme = "Papirus, Adwaita"
# You can also set multiple icon themes, with the leftmost one being used first.
# icon_theme = "Adwaita, breeze"
# Align icons left/right/top/off
icon_position = left
# Scale small icons up to this size, set to 0 to disable. Helpful
# for e.g. small files or high-dpi screens. In case of conflict,
# max_icon_size takes precedence over this.
min_icon_size = 32
# Scale larger icons down to this size, set to 0 to disable
#max_icon_size = 64
max_icon_size = 48
# Paths to default icons (only neccesary when not using recursive icon lookup)
#icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
### History ###
# Should a notification popped up from history be sticky or timeout
# as if it would normally do.
sticky_history = yes
# Maximum amount of notifications kept in history
history_length = 20
### Misc/Advanced ###
# dmenu path.
dmenu = /usr/bin/rofi -theme dmenu -p dunst:
# Browser for opening urls in context menu.
# browser = /usr/bin/xdg-open
browser = /usr/bin/firefox
# Always run rule-defined scripts, even if the notification is suppressed
always_run_script = true
# Define the title of the windows spawned by dunst
title = Dunst
# Define the class of the windows spawned by dunst
class = Dunst
# Define the corner radius of the notification window
# in pixel size. If the radius is 0, you have no rounded
# corners.
# The radius will be automatically lowered if it exceeds half of the
# notification height to avoid clipping text and/or icons.
corner_radius = 8
# Ignore the dbus closeNotification message.
# Useful to enforce the timeout set by dunst configuration. Without this
# parameter, an application may close the notification sent before the
# user defined timeout.
ignore_dbusclose = false
### Wayland ###
# These settings are Wayland-specific. They have no effect when using X11
# Uncomment this if you want to let notications appear under fullscreen
# applications (default: overlay)
# layer = top
# Set this to true to use X11 output on Wayland.
force_xwayland = false
### Legacy
# Use the Xinerama extension instead of RandR for multi-monitor support.
# This setting is provided for compatibility with older nVidia drivers that
# do not support RandR and using it on systems that support RandR is highly
# discouraged.
#
# By enabling this setting dunst will not be able to detect when a monitor
# is connected or disconnected which might break follow mode if the screen
# layout changes.
force_xinerama = false
### mouse
# Defines list of actions for each mouse event
# Possible values are:
# * none: Don't do anything.
# * do_action: Invoke the action determined by the action_name rule. If there is no
# such action, open the context menu.
# * open_url: If the notification has exactly one url, open it. If there are multiple
# ones, open the context menu.
# * close_current: Close current notification.
# * close_all: Close all notifications.
# * context: Open context menu for the notification.
# * context_all: Open context menu for all notifications.
# These values can be strung together for each mouse event, and
# will be executed in sequence.
mouse_left_click = do_action, close_current
mouse_middle_click = close_current
mouse_right_click = close_all
# Experimental features that may or may not work correctly. Do not expect them
# to have a consistent behaviour across releases.
[experimental]
# Calculate the dpi to use on a per-monitor basis.
# If this setting is enabled the Xft.dpi value will be ignored and instead
# dunst will attempt to calculate an appropriate dpi value for each monitor
# using the resolution and physical size. This might be useful in setups
# where there are multiple screens with very different dpi values.
per_monitor_dpi = false
[urgency_low]
# IMPORTANT: colors have to be defined in quotation marks.
# Otherwise the "#" and following would be interpreted as a comment.
#background = "#282a2e"
#foreground = "#707880"
foreground = "#c5c8c6"
frame_color = "#c5c8c6"
timeout = 10
# Icon for notifications with low urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_normal]
#background = "#282a2e"
foreground = "#c5c8c6"
frame_color = "#f0c674"
timeout = 10
# Icon for notifications with normal urgency, uncomment to enable
#default_icon = /path/to/icon
[urgency_critical]
#background = "#282a2e"
foreground = "#c5c8c6"
frame_color = "#ff0000"
timeout = 0
# Icon for notifications with critical urgency, uncomment to enable
#default_icon = /path/to/icon
# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
# appname (discouraged, see desktop_entry)
# body
# category
# desktop_entry
# icon
# match_transient
# msg_urgency
# stack_tag
# summary
#
# and you can override the
# background
# foreground
# format
# frame_color
# fullscreen
# new_icon
# set_stack_tag
# set_transient
# set_category
# timeout
# urgency
# icon_position
# skip_display
# history_ignore
# action_name
# word_wrap
# ellipsize
# alignment
# hide_text
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
# script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.
# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
# match_transient = yes
# set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
# match_transient = yes
# history_ignore = yes
# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
# If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
# withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
# fullscreen = delay
#[fullscreen_show_critical]
# msg_urgency = critical
# fullscreen = show
#[espeak]
# summary = "*"
# script = dunst_espeak.sh
#[script-test]
# summary = "*script*"
# script = dunst_test.sh
#[ignore]
# # This notification will not be displayed
# summary = "foobar"
# skip_display = true
#[history-ignore]
# # This notification will not be saved in history
# summary = "foobar"
# history_ignore = yes
#[skip-display]
# # This notification will not be displayed, but will be included in the history
# summary = "foobar"
# skip_display = yes
#[signed_on]
# appname = Pidgin
# summary = "*signed on*"
# urgency = low
#
#[signed_off]
# appname = Pidgin
# summary = *signed off*
# urgency = low
#
#[says]
# appname = Pidgin
# summary = *says*
# urgency = critical
#
#[twitter]
# appname = Pidgin
# summary = *twitter.com*
# urgency = normal
#
#[stack-volumes]
# appname = "some_volume_notifiers"
# set_stack_tag = "volume"
#
# vim: ft=cfg

300
fastfetch/config.conf Executable file
View file

@ -0,0 +1,300 @@
# Fastfetch configuration
# Write every argument in different lines.
# Direct arguments will overwrite the corresponding ones in this file.
# Argument keys are not case sensitive.
# Whitespaces are trimmed at the beginning and the end.
# Empty lines or lines starting with # are ignored.
# This file was shipped with 1.5.5.
# Use fastfetch --print-config > ~/.config/fastfetch/config.conf to overwrite this with the current defaults
# Below some often usefull options are listed. Uncomment and modify them so they take affect.
# Note that there are a lot more options than the ones listed here, take a look at "fastfetch --help".
# Of course all of them can be made persistent here too.
# Config option:
# Load additional config files.
# Some are shipped with fastfetch, list them with "fastfetch --list-presets".
# Must be a path to a config file or the name of a shipped preset.
# The config file is completly loaded before continuing in the current file, so the placement of this option matters, as later options overwrite already set ones.
# Can be used multiple times to load multiple config files / presets.
#--load-config /path/to/config.txt
# Structure option:
# Sets the modules to use and their order.
# Must be a list of module names, separated by colons.
# List available modules with "fastfetch --list-modules".
# Get the default structure with "fastfetch --print-structure".
--structure Title:Separator:OS:Kernel:Packages:Shell:Resolution:WM:Terminal:TerminalFont:CPU:GPU:Memory:Disk:Break:Colors
# Multithreading option:
# Sets if fastfetch should use multiple threads to detect the values.
# Must be true or false.
# Default is true.
#--multithreading true
# Slow operations option:
# Sets if fastfetch is allowed to use known slow operations to detect more / better values.
# Must be true or false.
# Default is false.
#--allow-slow-operations false
# Linewrap option:
# Sets if fastfetch should disable linewrap during the run.
# Must be true or false.
# Default is true.
--disable-linewrap false
# Cursor option:
# Sets if fastfetch should hide the console cursor during the run.
# Must be true or false.
# Default is true.
#--hide-cursor true
# Logo option:
# Sets the logo to use.
# List available logos with "fastfetch --list-logos".
# Print available logos with "fastfetch --print-logos".
# Must be the name of an available logo or a path to a text file containing a custom logo.
# Default is the current distribution.
#--logo arch
# Logo type option:
# Sets the logo type to use.
# Must be auto, builtin, file, raw, sixel, kitty or chafa.
# Default is auto.
#--logo-type auto
# Logo width option:
# Sets the width of the logo (in characters) if the logo is an image.
# Must be a positive integer.
# Default is 65.
#--logo-width 65
# Logo height option:
# Sets the height of the logo (in characters) if the logo is an image.
# Must be a positive integer.
# Default is 0 (keeps aspect ration).
#--logo-height 0
# Logo color options:
# Overwrite a color in the logo. Also works for user provided logos.
# In the user logo, they replace $[1-9]. Use $$ to print a single $ sign.
# Must be linux console color codes or the name of a color.
# Default is the one specified by the logo.
# Use "fastfetch --help color" to learn more and see examples.
# Valid index range is [1-9].
#--logo-color-1 red
#--logo-color-2 32
# [...]
#--logo-color-9 yellow
# Logo padding option:
# Adds a padding to the left and the right side of the logo.
# Must be a positive integer.
# Default is 0.
#--logo-padding 0
# Logo padding left option:
# Adds a padding to the left side of the logo.
# Must be a positive integer.
# Default is 0.
#--logo-padding-left 0
# Logo padding right option:
# Adds a padding to the right side of the logo.
# Must be a positive integer.
# Default is 0.
#--logo-padding-right 0
# Logo print remaining option:
# Sets if the remaining logo should be printed, it is has more lines than modules to show.
# Must be true or false.
# Default is true.
#--logo-print-remaining true
# Color option:
# Sets the color of the keys.
# Must be linux console color codes or the name of a color.
# Default is the primary color of the logo.
# Use "fastfetch --help color" to learn more and see examples.
#--color magenta
# Separator option:
# Sets the string placed between a key and its value.
# Can be any string.
# Default is ": ".
#--separator ": "
# Separator string option:
# Sets the string printed by the "separator" module (usually between title and rest of output)
# Must be any string. It is repated / cut to fit perfectly.
# Default is "-"
#--separator-string -
# Public IP timeout option:
# Sets the time to wait for the public ip server to respond.
# Must be a positive integer.
# Default is 0 (disabled).
#--public-ip-timeout 0
# OS file option
# Sets the path to the file containing the operating system information.
# Should be a valid path to an existing file.
# Note that you might need to run fastfetch with --recache once for it to take affect.
# Default is /etc/os-release.
#--os-file /etc/os-release
# Player name option
# Sets the name of the player. This is also used in song detection
# Must be the exact name of the player or a dbus address (e.g. org.mpris.MediaPlayer2.spotify)
# Default is the first match starting with org.mpris.MediaPlayer2.
#--player-name spotify
# Escape bedrock option
# Sets if fastfetch should escape the bedrock jail, if it detectes that it is running in one
# Must be true or false.
# Default is true.
#--escape-bedrock true
# GL option
# Sets with opengl context creation library to use
# Must be either auto, egl, glx or osmesa
# Default is auto.
#--gl auto
# Key options:
# Sets the displayed key of a module
# Can be any string. Some of theme take an argument like a format string. See "fastfetch --help format" for help.
#--os-key OS
#--host-key Host
#--kernel-key Kernel
#--uptime-key Uptime
#--processes-key Processes
#--packages-key Packages
#--shell-key Shell
#--resolution-key Resolution {1}
#--de-key DE
#--wm-key WM
#--wm-theme-key WM Theme
#--theme-key Theme
#--icons-key Icons
#--font-key Font
#--cursor-key Cursor
#--terminal-key Terminal
#--terminal-font-key Terminal Font
#--cpu-key CPU
#--cpu-usage-key CPU Usage
#--gpu-key GPU {1}
#--memory-key Memory
#--disk-key Disk ({1})
#--battery-key Battery {1}
#--locale-key Locale
#--local-ip-key Local IP ({1})
#--public-ip-key Public IP
#--player-key Media Player
#--song-key Song
#--datetime-key Date Time
#--vulkan-key Vulkan
#--opengl-key OpenGL
#--opencl-key OpenCL
# Format options:
# Sets the format string for module values.
# For information on format strings, see "fastfetch --help format".
# To see the parameter they take and their default value, see "fastfetch --help *-format", e.g. "fastfetch --help os-format".
# An empty format string (As they are currently below) will behave as if it was not set.
--os-format {3}
#--host-format
#--kernel-format
#--uptime-format
#--processes-format
#--packages-format
#--shell-format
#--resolution-format
#--de-format
#--wm-format
#--wm-theme-format
#--theme-format
#--icons-format
#--font-format
#--cursor-format
#--terminal-format
#--terminal-font-format
--cpu-format {1}
#--cpu-usage-format
#--gpu-format
#--memory-format
#--disk-format
#--battery-format
#--locale-format
#--local-ip-format
#--public-ip-format
#--player-format
#--song-format
#--datetime-format
#--vulkan-format
#--opengl-format
#--opencl-format
# Error options:
# Sets the format string to use if an error occured
# For information on format strings, see "fastfetch --help format".
# Each of them take the error as first and only argument.
# If one of them is set, the module will appear, even if --show-errors is not given.
#--os-error
#--host-error
#--kernel-error
#--uptime-error
#--processes-error
#--packages-error
#--shell-error
#--resolution-error
#--de-error
#--wm-error
#--wm-theme-error
#--theme-error
#--icons-error
#--font-error
#--cursor-error
#--terminal-error
#--terminal-font-error
#--cpu-error
#--cpu-usage-error
#--gpu-error
#--memory-error
#--disk-error
#--battery-error
#--locale-error
#--local-ip-error
#--public-ip-error
#--player-error
#--song-error
#--datetime-error
#--vulkan-error
#--opengl-error
#--opencl-error
# Library options:
# Sets an user specific path to a library to load.
# Must be a valid path to a library.
#--lib-PCI /usr/lib/libpci.so
#--lib-vulkan /usr/lib/libvulkan.so
#--lib-wayland /usr/lib/libwayland-client.so
#--lib-xcb-randr /usr/lib/libxcb-randr.so
#--lib-xcb /usr/lib/libxcb.so
#--lib-Xrandr /usr/lib/libXrandr.so
#--lib-X11 /usr/lib/libX11.so
#--lib-gio /usr/lib/libgio-2.0.so
#--lib-DConf /usr/lib/libdconf.so
#--lib-DBus /usr/lib/libdbus-1.so
#--lib-XFConf /usr/lib/libxfconf-0.so
#--lib-sqlite3 /usr/lib/libsqlite3.so
#--lib-rpm /usr/lib/librpm.so
#--lib-imagemagick /usr/lib/libMagickCore-7.Q16HDRI.so
#--lib-z /usr/lib/libz.so
#--lib-chafa /usr/lib/libchafa.so
#--lib-egl /usr/lib/libEGL.so
#--lib-glx /usr/lib/libGLX.so
#--lib-osmesa /usr/lib/libOSMesa.so
#--lib-opencl /usr/lib/libOpenCL.so

16
git/config Executable file
View file

@ -0,0 +1,16 @@
[user]
name = Michael Bradley
[includeIf "gitdir:~/dev/"]
path = ./config-personal
[includeIf "gitdir:~/school/"]
path = ./config-personal
[includeIf "gitdir:~/work/"]
path = ./config-work
[core]
editor = lvim
[credential "https://github.com"]
helper = !/usr/bin/gh auth git-credential
[credential "https://gist.github.com"]
helper = !/usr/bin/gh auth git-credential
[init]
defaultBranch = main

View file

@ -0,0 +1,11 @@
[Filechooser Settings]
LocationMode=path-bar
ShowHidden=false
ShowSizeColumn=true
GeometryX=2166
GeometryY=49
GeometryWidth=1428
GeometryHeight=1023
SortColumn=name
SortOrder=ascending
StartupMode=recent

1
gtk/gtk-3.0/bookmarks Normal file
View file

@ -0,0 +1 @@
file:///home/mbradley/school/3

2
gtk/gtk-3.0/settings.ini Executable file
View file

@ -0,0 +1,2 @@
[Settings]
gtk-application-prefer-dark-theme=1

2
gtk/gtk-4.0/settings.ini Executable file
View file

@ -0,0 +1,2 @@
[Settings]
gtk-application-prefer-dark-theme=1

2
gtk/gtk-5.0/settings.ini Executable file
View file

@ -0,0 +1,2 @@
[Settings]
gtk-application-prefer-dark-theme=1

2
gtk/gtk-6.0/settings.ini Executable file
View file

@ -0,0 +1,2 @@
[Settings]
gtk-application-prefer-dark-theme=1

204
i3/config Executable file
View file

@ -0,0 +1,204 @@
set $mod Mod4
# Font for window titles. Will also be used by the bar unless a different font is used in the bar {} block below.
font pango:JetBrains Mono 5
smart_borders on
gaps inner 3
#Setup displays
exec --no-startup-id ~/.config/screenlayout/monitor.sh
exec --no-startup-id dex --autostart --environment i3
# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
mouse_warping output
bindsym $mod+Return exec --no-startup-id "kitty"
bindsym $mod+Shift+q kill
bindsym Ctrl+Tab exec --no-startup-id "rofi -show drun file-browser-extended calc emoji cafmenu"
bindsym $mod+Shift+s exec --no-startup-id "escrotum -s -C"
bindsym $mod+Shift+p exec --no-startup-id peek
bindsym $mod+Shift+l exec --no-startup-id i3lock-fancy-multimonitor -b=0x3
bindsym $mod+Shift+z exec --no-startup-id firefox
bindsym $mod+Shift+x exec --no-startup-id discord
bindsym $mod+Shift+c exec --no-startup-id nautilus
bindsym $mod+Shift+v exec --no-startup-id vlc
bindsym $mod+Shift+g exec --no-startup-id /home/mbradley/scripts/steam.sh
# change focus
#bindsym $mod+j focus left
#bindsym $mod+k focus down
#bindsym $mod+l focus up
#bindsym $mod+semicolon focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move focused window
#bindsym $mod+Shift+j move left
#bindsym $mod+Shift+k move down
#bindsym $mod+Shift+l move up
#bindsym $mod+Shift+semicolon move right
# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# split in horizontal/vertical orientation
bindsym $mod+h split h
bindsym $mod+v split v
bindsym $mod+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# Define names for default workspaces for which we configure key bindings later on.
# We use variable names to avoid repeating the names in multiple places.
set $ws1 "1"
set $ws2 "2"
set $ws3 "3"
set $ws4 "4"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9"
set $ws10 "10"
# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10
#set $monitor_left "DisplayPort-1"
#set $monitor_right "DisplayPort-0"
#workspace $ws1 output $monitor_left
#workspace $ws2 output $monitor_right
#workspace $ws3 output $monitor_left
#workspace $ws4 output $monitor_right
#workspace $ws5 output $monitor_left
#workspace $ws6 output $monitor_right
#workspace $ws7 output $monitor_left
#workspace $ws8 output $monitor_right
#workspace $ws9 output $monitor_left
#workspace $ws10 output $monitor_right
set $monitor_left "DisplayPort-1"
set $monitor_right "DisplayPort-0"
set $monitor_up "HDMI-A-0"
workspace $ws1 output $monitor_left
workspace $ws2 output $monitor_right
workspace $ws3 output $monitor_up
workspace $ws4 output $monitor_left
workspace $ws5 output $monitor_right
workspace $ws6 output $monitor_up
workspace $ws7 output $monitor_left
workspace $ws8 output $monitor_right
workspace $ws9 output $monitor_up
workspace $ws10 output $monitor_left
# focus the parent container
#bindsym $mod+a focus parent
#bindsym $mod+Shift+1 move container to workspace number $ws1
#bindsym $mod+Shift+2 move container to workspace number $ws2
#bindsym $mod+Shift+3 move container to workspace number $ws3
#bindsym $mod+Shift+4 move container to workspace number $ws4
#bindsym $mod+Shift+5 move container to workspace number $ws5
#bindsym $mod+Shift+6 move container to workspace number $ws6
#bindsym $mod+Shift+7 move container to workspace number $ws7
#bindsym $mod+Shift+8 move container to workspace number $ws8
#bindsym $mod+Shift+9 move container to workspace number $ws9
#bindsym $mod+Shift+0 move container to workspace number $ws10
bindsym $mod+Shift+1 move container to workspace number $ws1, workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2, workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3, workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4, workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5, workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6, workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7, workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8, workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9, workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10, workspace number $ws10
bindsym $mod+Shift+r restart
# resize window (you can also use the mouse for that)
mode "resize" {
# These bindings trigger as soon as you enter the resize mode
# Pressing left will shrink the windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows height.
#bindsym j resize shrink width 10 px or 10 ppt
#bindsym k resize grow height 10 px or 10 ppt
#bindsym l resize shrink height 10 px or 10 ppt
#bindsym semicolon resize grow width 10 px or 10 ppt
# same bindings, but for the arrow keys
bindsym Left resize shrink width 1 px or 1 ppt
bindsym Down resize grow height 1 px or 1 ppt
bindsym Up resize shrink height 1 px or 1 ppt
bindsym Right resize grow width 1 px or 1 ppt
# back to normal: Enter or Escape or $mod+r
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+r mode "resize"
default_border none
default_floating_border none
new_window none
for_window [all] border none
hide_edge_borders both
# other commands
exec_always --no-startup-id picom -b
exec_always --no-startup-id /home/mbradley/.config/i3/feh.sh
exec --no-startup-id redshift-gtk -l 44.631:-77.955
exec_always --no-startup-id polybar-msg cmd quit
exec_always --no-startup-id polybar -r main
exec_always --no-startup-id polybar -r other
exec_always --no-startup-id polybar -r last
exec --no-startup-id /usr/bin/dunst
exec --no-startup-id /home/mbradley/.config/i3/startup.sh
exec --no-startup-id /usr/bin/birdtray

3
i3/feh.sh Executable file
View file

@ -0,0 +1,3 @@
#!/bin/sh
feh --no-fehbg --bg-fill --randomize /usr/share/backgrounds/Wallpapers/*

105
i3/startup.json Executable file
View file

@ -0,0 +1,105 @@
// vim:ts=4:sw=4:et
{
"border": "none",
"current_border_width": 0,
"floating": "auto_off",
"geometry": {
"height": 1022,
"width": 948,
"x": 0,
"y": 0
},
"marks": [],
"name": "i3-save-tree --workspace 2 > ~/.config/i3/startup.json",
"percent": 0.5,
"swallows": [
{
"class": "^kitty$"
// "instance": "^kitty$",
// "machine": "^hpomen$",
//"title": "clear"
}
],
"type": "con"
}
{
// splitv split container with 2 children
"border": "none",
"floating": "auto_off",
"layout": "splitv",
"marks": [],
"percent": 0.5,
"type": "con",
"nodes": [
{
// splith split container with 1 children
"border": "none",
"floating": "auto_off",
"layout": "splith",
"marks": [],
"percent": 0.5,
"type": "con",
"nodes": [
{
// splith split container with 1 children
"border": "none",
"floating": "auto_off",
"layout": "splith",
"marks": [],
"percent": 1,
"type": "con",
"nodes": [
{
"border": "none",
"current_border_width": 0,
"floating": "auto_off",
"geometry": {
"height": 1022,
"width": 948,
"x": 0,
"y": 0
},
"marks": [],
"name": "mbradley@hpomen:~",
"percent": 1,
"swallows": [
{
"class": "^kitty$"
// "instance": "^kitty$",
// "machine": "^hpomen$",
//"title": "c"
}
],
"type": "con"
}
]
}
]
},
{
"border": "none",
"current_border_width": 0,
"floating": "auto_off",
"geometry": {
"height": 1022,
"width": 948,
"x": 0,
"y": 0
},
"marks": [],
"name": "btop",
"percent": 0.5,
"swallows": [
{
"class": "^kitty$"
// "instance": "^kitty$",
// "machine": "^hpomen$",
//"title": "^btop$"
}
],
"type": "con"
}
]
}

21
i3/startup.sh Executable file
View file

@ -0,0 +1,21 @@
#!/bin/zsh
function cmd() {
control_file="unix:/tmp/kittycommand-$(date +%s%N)-$*"
kitty -o allow_remote_control="yes" --listen-on "$control_file" &
sleep 1
kitty @ --to "$control_file" send-text "$*\n"
}
# /home/mbradley/scripts/mouse_sens.sh
i3-msg 'workspace 3; append_layout /home/mbradley/.config/i3/startup.json'
sleep 0.1
cmd clear
cmd c
sleep 0.5
cmd btop
i3-msg 'workspace 1'

4
kitty/README.md Normal file
View file

@ -0,0 +1,4 @@
# Kitty theme
Sourced from: https://github.com/dexpota/kitty-themes/blob/master/themes/3024_Night.conf

2169
kitty/kitty.conf Executable file

File diff suppressed because it is too large Load diff

2169
kitty/kitty/kitty.conf Executable file

File diff suppressed because it is too large Load diff

21
kitty/kitty/theme.conf Normal file
View file

@ -0,0 +1,21 @@
background #090200
foreground #a4a1a1
cursor #a4a1a1
selection_background #494542
color0 #090200
color8 #5b5754
color1 #da2c20
color9 #e8bacf
color2 #00a152
color10 #3a3332
color3 #fcec02
color11 #494542
color4 #00a0e4
color12 #7f7c7b
color5 #a06994
color13 #d6d4d3
color6 #b5e4f4
color14 #ccab53
color7 #a4a1a1
color15 #f7f7f7
selection_foreground #090200

1
kitty/theme.conf Symbolic link
View file

@ -0,0 +1 @@
gh/kitty-themes/themes/3024_Night.conf

171
lvim/config.lua Normal file
View file

@ -0,0 +1,171 @@
--[[
THESE ARE EXAMPLE CONFIGS FEEL FREE TO CHANGE TO WHATEVER YOU WANT
`lvim` is the global options object
]]
lvim.transparent_window = true
lvim.plugins = {
{ "catppuccin/nvim" },
{ "gpanders/editorconfig.nvim" },
{
'wfxr/minimap.vim',
build = "cargo install --locked code-minimap",
cmd = { "Minimap", "MinimapClose", "MinimapToggle", "MinimapRefresh", "MinimapUpdateHighlight" },
config = function()
vim.cmd("let g:minimap_width = 10")
vim.cmd("let g:minimap_auto_start = 1")
vim.cmd("let g:minimap_auto_start_win_enter = 1")
end,
},
{
"windwp/nvim-ts-autotag",
config = function()
require("nvim-ts-autotag").setup()
end,
},
{ "mrjones2014/nvim-ts-rainbow" },
{
"romgrk/nvim-treesitter-context",
config = function()
require("treesitter-context").setup {
enable = true, -- Enable this plugin (Can be enabled/disabled later via commands)
throttle = true, -- Throttles plugin updates (may improve performance)
max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit.
patterns = { -- Match patterns for TS nodes. These get wrapped to match at word boundaries.
-- For all filetypes
-- Note that setting an entry here replaces all other patterns for this entry.
-- By setting the 'default' entry below, you can control which nodes you want to
-- appear in the context window.
default = {
'class',
'function',
'method',
},
},
}
end
},
{
"ray-x/lsp_signature.nvim",
event = "BufRead",
config = function() require "lsp_signature".on_attach() end,
},
{
"folke/todo-comments.nvim",
event = "BufRead",
config = function()
require("todo-comments").setup()
end,
},
{ "ms-jpq/chadtree" },
}
-- vim options
--vim.opt.shiftwidth = 2
--vim.opt.tabstop = 2
vim.opt.relativenumber = true
vim.opt.clipboard = "unnamedplus"
vim.opt.wrap = true
vim.opt.spell = true
vim.opt.spelllang = "en"
-- general
lvim.log.level = "info"
lvim.format_on_save = {
enabled = true,
pattern = "*.lua",
timeout = 1000,
}
-- to disable icons and use a minimalist setup, uncomment the following
-- lvim.use_icons = false
-- keymappings <https://www.lunarvim.org/docs/configuration/keybindings>
lvim.leader = "space"
-- add your own keymapping
lvim.keys.normal_mode["<C-s>"] = ":w<cr>"
-- lvim.keys.normal_mode["<S-l>"] = ":BufferLineCycleNext<CR>"
-- lvim.keys.normal_mode["<S-h>"] = ":BufferLineCyclePrev<CR>"
-- -- Use which-key to add extra bindings with the leader-key prefix
-- lvim.builtin.which_key.mappings["W"] = { "<cmd>noautocmd w<cr>", "Save without formatting" }
-- lvim.builtin.which_key.mappings["P"] = { "<cmd>Telescope projects<CR>", "Projects" }
-- -- Change theme settings
-- lvim.colorscheme = "lunar"
-- After changing plugin config exit and reopen LunarVim, Run :PackerSync
lvim.builtin.alpha.active = true
lvim.builtin.alpha.mode = "dashboard"
lvim.builtin.terminal.active = true
lvim.builtin.nvimtree.setup.view.side = "left"
lvim.builtin.nvimtree.setup.renderer.icons.show.git = true
-- Automatically install missing parsers when entering buffer
lvim.builtin.treesitter.auto_install = true
lvim.builtin.treesitter.rainbow.enable = true
-- lvim.builtin.treesitter.ignore_install = { "haskell" }
-- -- generic LSP settings <https://www.lunarvim.org/docs/languages#lsp-support>
-- --- disable automatic installation of servers
-- lvim.lsp.installer.setup.automatic_installation = false
-- ---configure a server manually. IMPORTANT: Requires `:LvimCacheReset` to take effect
-- ---see the full default list `:lua =lvim.lsp.automatic_configuration.skipped_servers`
-- vim.list_extend(lvim.lsp.automatic_configuration.skipped_servers, { "pyright" })
-- local opts = {} -- check the lspconfig documentation for a list of all possible options
-- require("lvim.lsp.manager").setup("pyright", opts)
-- ---remove a server from the skipped list, e.g. eslint, or emmet_ls. IMPORTANT: Requires `:LvimCacheReset` to take effect
-- ---`:LvimInfo` lists which server(s) are skipped for the current filetype
-- lvim.lsp.automatic_configuration.skipped_servers = vim.tbl_filter(function(server)
-- return server ~= "emmet_ls"
-- end, lvim.lsp.automatic_configuration.skipped_servers)
-- -- you can set a custom on_attach function that will be used for all the language servers
-- -- See <https://github.com/neovim/nvim-lspconfig#keybindings-and-completion>
-- lvim.lsp.on_attach_callback = function(client, bufnr)
-- local function buf_set_option(...)
-- vim.api.nvim_buf_set_option(bufnr, ...)
-- end
-- --Enable completion triggered by <c-x><c-o>
-- buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc")
-- end
-- -- linters and formatters <https://www.lunarvim.org/docs/languages#lintingformatting>
-- local formatters = require "lvim.lsp.null-ls.formatters"
-- formatters.setup {
-- { command = "stylua" },
-- {
-- command = "prettier",
-- extra_args = { "--print-width", "100" },
-- filetypes = { "typescript", "typescriptreact" },
-- },
-- }
-- local linters = require "lvim.lsp.null-ls.linters"
-- linters.setup {
-- { command = "flake8", filetypes = { "python" } },
-- {
-- command = "shellcheck",
-- args = { "--severity", "warning" },
-- },
-- }
-- -- Additional Plugins <https://www.lunarvim.org/docs/plugins#user-plugins>
-- lvim.plugins = {
-- {
-- "folke/trouble.nvim",
-- cmd = "TroubleToggle",
-- },
-- }
-- -- Autocommands (`:help autocmd`) <https://neovim.io/doc/user/autocmd.html>
-- vim.api.nvim_create_autocmd("FileType", {
-- pattern = "zsh",
-- callback = function()
-- -- let treesitter use bash highlight for zsh files as well
-- require("nvim-treesitter.highlight").attach(0, "bash")
-- end,
-- })

15
nvim/init.vim Executable file
View file

@ -0,0 +1,15 @@
set number
tnoremap <Esc> <C-\><C-n>
call plug#begin()
Plug 'ms-jpq/chadtree', {'branch': 'chad', 'do': 'python3 -m chadtree deps'}
"Plug 'ms-jpq/coq_nvim', {'branch': 'coq'}
"Plug 'ms-jpq/coq.artifacts', {'branch': 'artifacts'}
Plug 'navarasu/onedark.nvim'
Plug 'gpanders/editorconfig.nvim'
call plug#end()
nnoremap <C-v> <cmd>CHADopen<cr>
"let g:coq_settings = { 'auto_start': 'shut-up' }
let g:onedark_config = { 'style': 'warmer', 'transparent': v:true }
colorscheme onedark

View file

@ -0,0 +1,12 @@
pulse.rules = [
{
# Discord notification sounds fix
matches = [ { application.process.binary = "Discord" } ]
actions = {
update-props = {
pulse.min.quantum = 1024/48000
}
}
}
]

422
polybar/config.ini Executable file
View file

@ -0,0 +1,422 @@
;==========================================================
;
;
; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
;
;
; To learn more about how to configure Polybar
; go to https://github.com/polybar/polybar
;
; The README contains a lot of information
;
;==========================================================
[colors]
transparent = #0000
background = #AA282A2E
background-alt = #AA373B41
foreground = #C5C8C6
primary = #F0C674
secondary = #8ABEB7
alert = #A54242
disabled = #707880
[global/wm]
margin-bottom = 0
[bar/base]
width = 100%
height = 24pt
radius = 6
; dpi = 96
background = ${colors.background}
foreground = ${colors.foreground}
line-size = 3pt
border-top-size = 2.5pt
border-bottom-size = 0pt
border-right-size = 2.5pt
border-left-size = 2.5pt
border-color = #00000000
padding-left = 0
padding-right = 1
module-margin = 1
separator = |
separator-foreground = ${colors.disabled}
font-0 = "JetBrains Mono:10;2"
font-1 = "MesloLGS NF:10;2"
font-2 = "FontAwesome:10;2"
cursor-click = pointer
cursor-scroll = ns-resize
enable-ipc = true
; wm-restack = i3
; override-redirect = true
[bar/main]
inherit = bar/base
monitor = DisplayPort-1
modules-left = xworkspaces xwindow
; modules-right = pulseaudio date menu-power
modules-right = pulseaudio dunst
[bar/other]
inherit = bar/base
monitor = DisplayPort-0
monitor-fallback = DisplayPort-1
; modules-left = xworkspaces dunst xwindow
modules-left = xworkspaces system-usb-udev
; modules-right = xbacklight filesystem hdd-filesystem memory cpu eth date menu-power
modules-right = memory cpu eth date menu-power
[bar/last]
inherit = bar/base
monitor = HDMI-A-0
monitor-fallback = DisplayPort-1
modules-left = xworkspaces tray
modules-right = xbacklight change-background wlan filesystem hdd-filesystem pulseaudio date
[module/menu-apps]
type = custom/menu
expand-right = false
menu-0-0 = %{F#88CC22}
menu-0-0-exec = rofi -show drun
menu-0-1 = %{F#FFF}ﬓ
menu-0-1-exec = #menu-apps.open.1
menu-0-2 = %{F-}
menu-0-2-exec = #menu-apps.open.2
menu-0-3 = %{F#FFFF00}
menu-0-3-exec = #menu-apps.open.3
menu-1-0 = %{F-}
menu-1-0-exec = escrotum -s -C
menu-1-1 = %{F#F0C674}
menu-1-1-exec = #menu-apps.open.0
menu-2-0 = %{F-}
menu-2-0-exec = kitty
menu-2-1 = %{F#0098FF}﬏
menu-2-1-exec = vscodium
menu-2-2 = %{F#FE2857}
menu-2-2-exec = jetbrains-toolbox
menu-2-3 = %{F#F0C674}
menu-2-3-exec = #menu-apps.open.0
menu-3-0 = %{F#0A84FF}
menu-3-0-exec = thunderbird
menu-3-1 = %{F#0572EC}
menu-3-1-exec = 1password
menu-3-2 = %{F#5865F2}ﭮ
menu-3-2-exec = discord
menu-3-3 = %{F#FF9400}
menu-3-3-exec = firefox
menu-3-4 = %{F#F0C674}
menu-3-4-exec = #menu-apps.open.0
label-open = %{F#F0C674}
label-close = %{F#F0C674}×
label-separator = %{F#707880} %{F-}
[module/menu-power]
type = custom/menu
expand-right = false
menu-0-0 = %{F#007FFF}
menu-0-0-exec = i3lock-fancy-multimonitor -b=0x3
#menu-0-1 = %{F#00FF7F}鈴
#menu-0-1-exec = systemctl suspend
#menu-0-2 = %{F#7FFF00}
#menu-0-2-exec = systemctl hibernate
menu-0-1 = %{F#FF7F00}ﰇ
menu-0-1-exec = reboot
menu-0-2 = %{F#F00}
menu-0-2-exec = shutdown now
label-open = %{F#F0C674}
label-close = %{F#F0C674}×
label-separator = "%{F-} "
[module/xworkspaces]
type = internal/xworkspaces
pin-workspaces = true
#enable-scroll = false
label-active = %name%
label-active-background = ${colors.background-alt}
label-active-underline= ${colors.primary}
label-active-padding = 1
label-occupied = %name%
label-occupied-padding = 1
label-urgent = %name%
label-urgent-background = ${colors.alert}
label-urgent-padding = 1
label-empty = %name%
label-empty-foreground = ${colors.disabled}
label-empty-padding = 1
[module/xwindow]
type = internal/xwindow
#label = %title:0:60:...%
label = %title:0:164:...%
[module/xbacklight]
type = internal/xbacklight
#output = HDMI-A-0
#output = DisplayPort-1
#output = DisplayPort-0
label = %{colors.primary}BKL%{F-} %percentage%%
[module/change-background]
type = custom/script
exec = ls
format = <label>
format-foreground = ${colors.primary}
label =
click-left = /home/mbradley/.config/i3/feh.sh
[module/filesystem]
type = internal/fs
interval = 25
mount-0 = /
label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%%
label-unmounted = %mountpoint% not mounted
label-unmounted-foreground = ${colors.disabled}
[module/hdd-filesystem]
type = internal/fs
interval = 25
mount-0 = /home/mbradley/hdd
label-mounted = %{F#F0C674}hdd%{F-} %percentage_used%%
label-unmounted = %mountpoint% not mounted
label-unmounted-foreground = ${colors.disabled}
[module/pulseaudio]
type = internal/pulseaudio
format-volume-prefix = "VOL "
format-volume-prefix-foreground = ${colors.primary}
format-volume = <label-volume>
label-volume = %percentage%%
label-muted = muted
label-muted-foreground = ${colors.disabled}
[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock
label-layout = %layout%
label-layout-foreground = ${colors.primary}
label-indicator-padding = 2
label-indicator-margin = 1
label-indicator-foreground = ${colors.background}
label-indicator-background = ${colors.secondary}
[module/memory]
type = internal/memory
interval = 2
format-prefix = "RAM "
format-prefix-foreground = ${colors.primary}
label = %percentage_used:2%%
[module/cpu]
type = internal/cpu
interval = 2
format-prefix = "CPU "
format-prefix-foreground = ${colors.primary}
label = %percentage-sum:2%%
[network-base]
type = internal/network
interval = 5
format-connected = <label-connected>
format-disconnected = <label-disconnected>
label-disconnected = %{F#F0C674}%ifname%%{F#707880} dc
[module/wlan]
inherit = network-base
interface-type = wireless
label-connected = %{F#F0C674}%ifname%%{F-} %netspeed%
[module/eth]
inherit = network-base
interface-type = wired
label-connected = %{F#F0C674}%ifname%%{F-} %netspeed%
[module/date]
type = internal/date
interval = 1
date-alt = %H:%M
date = %Y-%m-%d/%{F#F0C674}%H:%M:%S
label = %date%
[module/temperature]
type = internal/temperature
interval = 5
thermal-zone = 3
hwmon-path = /sys/devices/platform/coretemp.0/hwmon/hwmon6/temp1_input
base-temperature = 40
warn-temperature = 80
units = true
format = <label>
format-warn = <label-warn>
label = %temperature-c%
label-warn = CPU: %temperature-c%!
label-warn-foreground = #f00
[module/battery]
type = internal/battery
full-at = 99
low-at = 25
battery = BAT0
adapter = ADP1
poll-interval = 60
time-format = %H:%M:%S
format-charging = %{F#F0C674}<animation-charging>%{F-} <label-charging>
format-discharging = %{F#F0C674}<animation-discharging>%{F-} <label-discharging>
format-low = %{F#F0C674}<animation-low>%{F-} <label-low>
format-full = %{F#F0C674}
label-charging = %percentage%%
label-discharging = %percentage%%
label-full = %percentage%%
label-low = %percentage%%
ramp-capacity-0 =
ramp-capacity-1 =
ramp-capacity-2 =
ramp-capacity-3 =
ramp-capacity-4 =
bar-capacity-width = 10
animation-charging-0 =
animation-charging-1 =
animation-charging-2 =
animation-charging-3 =
animation-charging-4 =
animation-charging-framerate = 750
animation-discharging-0 =
animation-discharging-1 =
animation-discharging-2 =
animation-discharging-3 =
animation-discharging-4 =
animation-discharging-framerate = 500
animation-low-0 =
animation-low-1 =
animation-low-framerate = 200
[module/tray]
type = internal/tray
tray-spacing = 5px
tray-size = 50%
# https://github.com/JeanEdouardKevin/dunst-polybar
[module/dunst]
type = custom/ipc
initial = 1
format-foreground = ${colors.primary}
hook-0 = echo "%{A1:dunstctl set-paused true && polybar-msg hook dunst 2:}%{A}" &
hook-1 = echo "%{A1:dunstctl set-paused false && polybar-msg hook dunst 1:}%{A}" &
[settings]
screenchange-reload = true
pseudo-transparency = true
#[module/backlight]
#type = internal/backlight
#card = nv_backlight
#use-actual-brightness = true
#enable-scroll = true
[module/mpd]
type = internal/mpd
host = /run/mpd
[module/player-mpris-tail]
type = custom/script
exec = /usr/share/polybar/scripts/player-mpris-tail.py -f '{icon} {artist} - {title}'
tail = true
click-left = /usr/share/polybar/scripts/player-mpris-tail.py previous &
click-right = /usr/share/polybar/scripts/player-mpris-tail.py next &
click-middle = /usr/share/polybar/scripts/player-mpris-tail.py play-pause &
[module/system-usb-udev]
type = custom/script
exec = /usr/share/polybar/scripts/system-usb-udev.sh
tail = true
click-left = /usr/share/polybar/scripts/system-usb-udev.sh --mount &
click-right = /usr/share/polybar/scripts/system-usb-udev.sh --unmount &
; vim:ft=dosini

9
polybar/launch.sh Executable file
View file

@ -0,0 +1,9 @@
#!/bin/bash
# Terminate already running bar instances
killall -q polybar
# If all your bars have ipc enabled, you can also use
# polybar-msg cmd quit
# Launch Polybar, using default config location ~/.config/polybar/config.ini
polybar mybar 2>&1 | tee -a /tmp/polybar.log & disown

759
ranger/rc.conf Executable file
View file

@ -0,0 +1,759 @@
# ===================================================================
# This file contains the default startup commands for ranger.
# To change them, it is recommended to create either /etc/ranger/rc.conf
# (system-wide) or ~/.config/ranger/rc.conf (per user) and add your custom
# commands there.
#
# If you copy this whole file there, you may want to set the environment
# variable RANGER_LOAD_DEFAULT_RC to FALSE to avoid loading it twice.
#
# The purpose of this file is mainly to define keybindings and settings.
# For running more complex python code, please create a plugin in "plugins/" or
# a command in "commands.py".
#
# Each line is a command that will be run before the user interface
# is initialized. As a result, you can not use commands which rely
# on the UI such as :delete or :mark.
# ===================================================================
# ===================================================================
# == Options
# ===================================================================
# Which viewmode should be used? Possible values are:
# miller: Use miller columns which show multiple levels of the hierarchy
# multipane: Midnight-commander like multipane view showing all tabs next
# to each other
set viewmode miller
#set viewmode multipane
# How many columns are there, and what are their relative widths?
set column_ratios 1,3,4
# Which files should be hidden? (regular expression)
set hidden_filter ^\.|\.(?:pyc|pyo|bak|swp)$|^lost\+found$|^__(py)?cache__$
# Show hidden files? You can toggle this by typing 'zh'
set show_hidden true
# Ask for a confirmation when running the "delete" command?
# Valid values are "always", "never", "multiple" (default)
# With "multiple", ranger will ask only if you delete multiple files at once.
set confirm_on_delete multiple
# Use non-default path for file preview script?
# ranger ships with scope.sh, a script that calls external programs (see
# README.md for dependencies) to preview images, archives, etc.
set preview_script ~/.config/ranger/scope.sh
# Use the external preview script or display simple plain text or image previews?
set use_preview_script true
# Automatically count files in the directory, even before entering them?
set automatically_count_files true
# Open all images in this directory when running certain image viewers
# like feh or sxiv? You can still open selected files by marking them.
set open_all_images true
# Be aware of version control systems and display information.
set vcs_aware true
# State of the four backends git, hg, bzr, svn. The possible states are
# disabled, local (only show local info), enabled (show local and remote
# information).
set vcs_backend_git enabled
set vcs_backend_hg disabled
set vcs_backend_bzr disabled
set vcs_backend_svn disabled
# Truncate the long commit messages to this length when shown in the statusbar.
set vcs_msg_length 50
# Use one of the supported image preview protocols
set preview_images true
# Set the preview image method. Supported methods:
#
# * w3m (default):
# Preview images in full color with the external command "w3mimgpreview"?
# This requires the console web browser "w3m" and a supported terminal.
# It has been successfully tested with "xterm" and "urxvt" without tmux.
#
# * iterm2:
# Preview images in full color using iTerm2 image previews
# (http://iterm2.com/images.html). This requires using iTerm2 compiled
# with image preview support.
#
# This feature relies on the dimensions of the terminal's font. By default, a
# width of 8 and height of 11 are used. To use other values, set the options
# iterm2_font_width and iterm2_font_height to the desired values.
#
# * terminology:
# Previews images in full color in the terminology terminal emulator.
# Supports a wide variety of formats, even vector graphics like svg.
#
# * urxvt:
# Preview images in full color using urxvt image backgrounds. This
# requires using urxvt compiled with pixbuf support.
#
# * urxvt-full:
# The same as urxvt but utilizing not only the preview pane but the
# whole terminal window.
#
# * kitty:
# Preview images in full color using kitty image protocol.
# Requires python PIL or pillow library.
# If ranger does not share the local filesystem with kitty
# the transfer method is changed to encode the whole image;
# while slower, this allows remote previews,
# for example during an ssh session.
# Tmux is unsupported.
#
# * ueberzug:
# Preview images in full color with the external command "ueberzug".
# Images are shown by using a child window.
# Only for users who run X11 in GNU/Linux.
set preview_images_method ueberzug
# Delay in seconds before displaying an image with the w3m method.
# Increase it in case of experiencing display corruption.
set w3m_delay 0.02
# Manually adjust the w3mimg offset when using a terminal which needs this
set w3m_offset 0
# Default iTerm2 font size (see: preview_images_method: iterm2)
set iterm2_font_width 8
set iterm2_font_height 11
# Use a unicode "..." character to mark cut-off filenames?
set unicode_ellipsis true
# BIDI support - try to properly display file names in RTL languages (Hebrew, Arabic).
# Requires the python-bidi pip package
set bidi_support false
# Show dotfiles in the bookmark preview box?
set show_hidden_bookmarks true
# Which colorscheme to use? These colorschemes are available by default:
# default, jungle, snow, solarized
set colorscheme default
# Preview files on the rightmost column?
# And collapse (shrink) the last column if there is nothing to preview?
set preview_files true
set preview_directories true
set collapse_preview true
# Wrap long lines in plain text previews?
set wrap_plaintext_previews false
# Save the console history on exit?
set save_console_history true
# Draw the status bar on top of the browser window (default: bottom)
set status_bar_on_top false
# Draw a progress bar in the status bar which displays the average state of all
# currently running tasks which support progress bars?
set draw_progress_bar_in_status_bar true
# Draw borders around columns? (separators, outline, both, or none)
# Separators are vertical lines between columns.
# Outline draws a box around all the columns.
# Both combines the two.
set draw_borders both
# Display the directory name in tabs?
set dirname_in_tabs false
# Enable the mouse support?
set mouse_enabled true
# Display the file size in the main column or status bar?
set display_size_in_main_column true
set display_size_in_status_bar true
# Display the free disk space in the status bar?
set display_free_space_in_status_bar true
# Display files tags in all columns or only in main column?
set display_tags_in_all_columns true
# Set a title for the window? Updates both `WM_NAME` and `WM_ICON_NAME`
set update_title false
# Set the tmux/screen window-name to "ranger"?
set update_tmux_title true
# Shorten the title if it gets long? The number defines how many
# directories are displayed at once, 0 turns off this feature.
set shorten_title 3
# Show hostname in titlebar?
set hostname_in_titlebar true
# Abbreviate $HOME with ~ in the titlebar (first line) of ranger?
set tilde_in_titlebar false
# How many directory-changes or console-commands should be kept in history?
set max_history_size 20
set max_console_history_size 50
# Try to keep so much space between the top/bottom border when scrolling:
set scroll_offset 8
# Flush the input after each key hit? (Noticeable when ranger lags)
set flushinput true
# Padding on the right when there's no preview?
# This allows you to click into the space to run the file.
set padding_right true
# Save bookmarks (used with mX and `X) instantly?
# This helps to synchronize bookmarks between multiple ranger
# instances but leads to *slight* performance loss.
# When false, bookmarks are saved when ranger is exited.
set autosave_bookmarks true
# Save the "`" bookmark to disk. This can be used to switch to the last
# directory by typing "``".
set save_backtick_bookmark true
# You can display the "real" cumulative size of directories by using the
# command :get_cumulative_size or typing "dc". The size is expensive to
# calculate and will not be updated automatically. You can choose
# to update it automatically though by turning on this option:
set autoupdate_cumulative_size false
# Turning this on makes sense for screen readers:
set show_cursor false
# One of: size, natural, basename, atime, ctime, mtime, type, random
set sort natural
# Additional sorting options
set sort_reverse false
set sort_case_insensitive true
set sort_directories_first true
set sort_unicode false
# Enable this if key combinations with the Alt Key don't work for you.
# (Especially on xterm)
set xterm_alt_key false
# Whether to include bookmarks in cd command
set cd_bookmarks true
# Changes case sensitivity for the cd command tab completion
set cd_tab_case sensitive
# Use fuzzy tab completion with the "cd" command. For example,
# ":cd /u/lo/b<tab>" expands to ":cd /usr/local/bin".
set cd_tab_fuzzy false
# Avoid previewing files larger than this size, in bytes. Use a value of 0 to
# disable this feature.
set preview_max_size 0
# The key hint lists up to this size have their sublists expanded.
# Otherwise the submaps are replaced with "...".
set hint_collapse_threshold 10
# Add the highlighted file to the path in the titlebar
set show_selection_in_titlebar true
# The delay that ranger idly waits for user input, in milliseconds, with a
# resolution of 100ms. Lower delay reduces lag between directory updates but
# increases CPU load.
set idle_delay 2000
# When the metadata manager module looks for metadata, should it only look for
# a ".metadata.json" file in the current directory, or do a deep search and
# check all directories above the current one as well?
set metadata_deep_search false
# Clear all existing filters when leaving a directory
set clear_filters_on_dir_change false
# Disable displaying line numbers in main column.
# Possible values: false, absolute, relative.
set line_numbers false
# When line_numbers=relative show the absolute line number in the
# current line.
set relative_current_zero false
# Start line numbers from 1 instead of 0
set one_indexed false
# Save tabs on exit
set save_tabs_on_exit false
# Enable scroll wrapping - moving down while on the last item will wrap around to
# the top and vice versa.
set wrap_scroll false
# Set the global_inode_type_filter to nothing. Possible options: d, f and l for
# directories, files and symlinks respectively.
set global_inode_type_filter
# This setting allows to freeze the list of files to save I/O bandwidth. It
# should be 'false' during start-up, but you can toggle it by pressing F.
set freeze_files false
# Print file sizes in bytes instead of the default human-readable format.
set size_in_bytes false
# Warn at startup if RANGER_LEVEL env var is greater than 0, in other words
# give a warning when you nest ranger in a subshell started by ranger.
# Special value "error" makes the warning more visible.
set nested_ranger_warning true
# ===================================================================
# == Local Options
# ===================================================================
# You can set local options that only affect a single directory.
# Examples:
# setlocal path=~/downloads sort mtime
# ===================================================================
# == Command Aliases in the Console
# ===================================================================
alias e edit
alias q quit
alias q! quit!
alias qa quitall
alias qa! quitall!
alias qall quitall
alias qall! quitall!
alias setl setlocal
alias filter scout -prts
alias find scout -aets
alias mark scout -mr
alias unmark scout -Mr
alias search scout -rs
alias search_inc scout -rts
alias travel scout -aefklst
# ===================================================================
# == Define keys for the browser
# ===================================================================
# Basic
map Q quitall
map q quit
copymap q ZZ ZQ
map R reload_cwd
map F set freeze_files!
map <C-r> reset
map <C-l> redraw_window
map <C-c> abort
map <esc> change_mode normal
map ~ set viewmode!
map i display_file
map <A-j> scroll_preview 1
map <A-k> scroll_preview -1
map ? help
map W display_log
map w taskview_open
map S shell $SHELL
map : console
map ; console
map ! console shell%space
map @ console -p6 shell %%s
map # console shell -p%space
map s console shell%space
map r chain draw_possible_programs; console open_with%space
map f console find%space
map cd console cd%space
map <C-p> chain console; eval fm.ui.console.history_move(-1)
# Change the line mode
map Mf linemode filename
map Mi linemode fileinfo
map Mm linemode mtime
map Mh linemode humanreadablemtime
map Mp linemode permissions
map Ms linemode sizemtime
map MH linemode sizehumanreadablemtime
map Mt linemode metatitle
# Tagging / Marking
map t tag_toggle
map ut tag_remove
map "<any> tag_toggle tag=%any
map <Space> mark_files toggle=True
map v mark_files all=True toggle=True
map uv mark_files all=True val=False
map V toggle_visual_mode
map uV toggle_visual_mode reverse=True
# For the nostalgics: Midnight Commander bindings
map <F1> help
map <F2> rename_append
map <F3> display_file
map <F4> edit
map <F5> copy
map <F6> cut
map <F7> console mkdir%space
map <F8> console delete
#map <F8> console trash
map <F10> exit
# In case you work on a keyboard with dvorak layout
map <UP> move up=1
map <DOWN> move down=1
map <LEFT> move left=1
map <RIGHT> move right=1
map <HOME> move to=0
map <END> move to=-1
map <PAGEDOWN> move down=1 pages=True
map <PAGEUP> move up=1 pages=True
map <CR> move right=1
#map <DELETE> console delete
map <INSERT> console touch%space
# VIM-like
copymap <UP> k
copymap <DOWN> j
copymap <LEFT> h
copymap <RIGHT> l
copymap <HOME> gg
copymap <END> G
copymap <PAGEDOWN> <C-F>
copymap <PAGEUP> <C-B>
map J move down=0.5 pages=True
map K move up=0.5 pages=True
copymap J <C-D>
copymap K <C-U>
# Jumping around
map H history_go -1
map L history_go 1
map ] move_parent 1
map [ move_parent -1
map } traverse
map { traverse_backwards
map ) jump_non
map gh cd ~
map ge cd /etc
map gu cd /usr
map gd cd /dev
map gl cd -r .
map gL cd -r %f
map go cd /opt
map gv cd /var
map gm cd /media
map gi eval fm.cd('/run/media/' + os.getenv('USER'))
map gM cd /mnt
map gs cd /srv
map gp cd /tmp
map gr cd /
map gR eval fm.cd(ranger.RANGERDIR)
map g/ cd /
map g? cd /usr/share/doc/ranger
# External Programs
map E edit
map du shell -p du --max-depth=1 -h --apparent-size
map dU shell -p du --max-depth=1 -h --apparent-size | sort -rh
map yp yank path
map yd yank dir
map yn yank name
map y. yank name_without_extension
# Filesystem Operations
map = chmod
map cw console rename%space
map a rename_append
map A eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"))
map I eval fm.open_console('rename ' + fm.thisfile.relative_path.replace("%", "%%"), position=7)
map pp paste
map po paste overwrite=True
map pP paste append=True
map pO paste overwrite=True append=True
map pl paste_symlink relative=False
map pL paste_symlink relative=True
map phl paste_hardlink
map pht paste_hardlinked_subtree
map pd console paste dest=
map p`<any> paste dest=%any_path
map p'<any> paste dest=%any_path
map dD console delete
map dT console trash
map dd cut
map ud uncut
map da cut mode=add
map dr cut mode=remove
map dt cut mode=toggle
map yy copy
map uy uncut
map ya copy mode=add
map yr copy mode=remove
map yt copy mode=toggle
# Temporary workarounds
map dgg eval fm.cut(dirarg=dict(to=0), narg=quantifier)
map dG eval fm.cut(dirarg=dict(to=-1), narg=quantifier)
map dj eval fm.cut(dirarg=dict(down=1), narg=quantifier)
map dk eval fm.cut(dirarg=dict(up=1), narg=quantifier)
map ygg eval fm.copy(dirarg=dict(to=0), narg=quantifier)
map yG eval fm.copy(dirarg=dict(to=-1), narg=quantifier)
map yj eval fm.copy(dirarg=dict(down=1), narg=quantifier)
map yk eval fm.copy(dirarg=dict(up=1), narg=quantifier)
# Searching
map / console search%space
map n search_next
map N search_next forward=False
map ct search_next order=tag
map cs search_next order=size
map ci search_next order=mimetype
map cc search_next order=ctime
map cm search_next order=mtime
map ca search_next order=atime
# Tabs
map <C-n> tab_new
map <C-w> tab_close
map <TAB> tab_move 1
map <S-TAB> tab_move -1
map <A-Right> tab_move 1
map <A-Left> tab_move -1
map gt tab_move 1
map gT tab_move -1
map gn tab_new
map gc tab_close
map uq tab_restore
map <a-1> tab_open 1
map <a-2> tab_open 2
map <a-3> tab_open 3
map <a-4> tab_open 4
map <a-5> tab_open 5
map <a-6> tab_open 6
map <a-7> tab_open 7
map <a-8> tab_open 8
map <a-9> tab_open 9
map <a-r> tab_shift 1
map <a-l> tab_shift -1
# Sorting
map or set sort_reverse!
map oz set sort=random
map os chain set sort=size; set sort_reverse=False
map ob chain set sort=basename; set sort_reverse=False
map on chain set sort=natural; set sort_reverse=False
map om chain set sort=mtime; set sort_reverse=False
map oc chain set sort=ctime; set sort_reverse=False
map oa chain set sort=atime; set sort_reverse=False
map ot chain set sort=type; set sort_reverse=False
map oe chain set sort=extension; set sort_reverse=False
map oS chain set sort=size; set sort_reverse=True
map oB chain set sort=basename; set sort_reverse=True
map oN chain set sort=natural; set sort_reverse=True
map oM chain set sort=mtime; set sort_reverse=True
map oC chain set sort=ctime; set sort_reverse=True
map oA chain set sort=atime; set sort_reverse=True
map oT chain set sort=type; set sort_reverse=True
map oE chain set sort=extension; set sort_reverse=True
map dc get_cumulative_size
# Settings
map zc set collapse_preview!
map zd set sort_directories_first!
map zh set show_hidden!
map <C-h> set show_hidden!
copymap <C-h> <backspace>
copymap <backspace> <backspace2>
map zI set flushinput!
map zi set preview_images!
map zm set mouse_enabled!
map zp set preview_files!
map zP set preview_directories!
map zs set sort_case_insensitive!
map zu set autoupdate_cumulative_size!
map zv set use_preview_script!
map zf console filter%space
copymap zf zz
# Filter stack
map .d filter_stack add type d
map .f filter_stack add type f
map .l filter_stack add type l
map .m console filter_stack add mime%space
map .n console filter_stack add name%space
map .# console filter_stack add hash%space
map ." filter_stack add duplicate
map .' filter_stack add unique
map .| filter_stack add or
map .& filter_stack add and
map .! filter_stack add not
map .r filter_stack rotate
map .c filter_stack clear
map .* filter_stack decompose
map .p filter_stack pop
map .. filter_stack show
# Bookmarks
map `<any> enter_bookmark %any
map '<any> enter_bookmark %any
map m<any> set_bookmark %any
map um<any> unset_bookmark %any
map m<bg> draw_bookmarks
copymap m<bg> um<bg> `<bg> '<bg>
# Generate all the chmod bindings with some python help:
eval for arg in "rwxXst": cmd("map +u{0} shell -f chmod u+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +g{0} shell -f chmod g+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +o{0} shell -f chmod o+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +a{0} shell -f chmod a+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map +{0} shell -f chmod u+{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -u{0} shell -f chmod u-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -g{0} shell -f chmod g-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -o{0} shell -f chmod o-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -a{0} shell -f chmod a-{0} %s".format(arg))
eval for arg in "rwxXst": cmd("map -{0} shell -f chmod u-{0} %s".format(arg))
# ===================================================================
# == Define keys for the console
# ===================================================================
# Note: Unmapped keys are passed directly to the console.
# Basic
cmap <tab> eval fm.ui.console.tab()
cmap <s-tab> eval fm.ui.console.tab(-1)
cmap <ESC> eval fm.ui.console.close()
cmap <CR> eval fm.ui.console.execute()
cmap <C-l> redraw_window
copycmap <ESC> <C-c>
copycmap <CR> <C-j>
# Move around
cmap <up> eval fm.ui.console.history_move(-1)
cmap <down> eval fm.ui.console.history_move(1)
cmap <left> eval fm.ui.console.move(left=1)
cmap <right> eval fm.ui.console.move(right=1)
cmap <home> eval fm.ui.console.move(right=0, absolute=True)
cmap <end> eval fm.ui.console.move(right=-1, absolute=True)
cmap <a-b> eval fm.ui.console.move_word(left=1)
cmap <a-f> eval fm.ui.console.move_word(right=1)
copycmap <a-b> <a-left>
copycmap <a-f> <a-right>
# Line Editing
cmap <backspace> eval fm.ui.console.delete(-1)
cmap <delete> eval fm.ui.console.delete(0)
cmap <C-w> eval fm.ui.console.delete_word()
cmap <A-d> eval fm.ui.console.delete_word(backward=False)
cmap <C-k> eval fm.ui.console.delete_rest(1)
cmap <C-u> eval fm.ui.console.delete_rest(-1)
cmap <C-y> eval fm.ui.console.paste()
# And of course the emacs way
copycmap <ESC> <C-g>
copycmap <up> <C-p>
copycmap <down> <C-n>
copycmap <left> <C-b>
copycmap <right> <C-f>
copycmap <home> <C-a>
copycmap <end> <C-e>
copycmap <delete> <C-d>
copycmap <backspace> <C-h>
# Note: There are multiple ways to express backspaces. <backspace> (code 263)
# and <backspace2> (code 127). To be sure, use both.
copycmap <backspace> <backspace2>
# This special expression allows typing in numerals:
cmap <allow_quantifiers> false
# ===================================================================
# == Pager Keybindings
# ===================================================================
# Movement
pmap <down> pager_move down=1
pmap <up> pager_move up=1
pmap <left> pager_move left=4
pmap <right> pager_move right=4
pmap <home> pager_move to=0
pmap <end> pager_move to=-1
pmap <pagedown> pager_move down=1.0 pages=True
pmap <pageup> pager_move up=1.0 pages=True
pmap <C-d> pager_move down=0.5 pages=True
pmap <C-u> pager_move up=0.5 pages=True
copypmap <UP> k <C-p>
copypmap <DOWN> j <C-n> <CR>
copypmap <LEFT> h
copypmap <RIGHT> l
copypmap <HOME> g
copypmap <END> G
copypmap <C-d> d
copypmap <C-u> u
copypmap <PAGEDOWN> n f <C-F> <Space>
copypmap <PAGEUP> p b <C-B>
# Basic
pmap <C-l> redraw_window
pmap <ESC> pager_close
copypmap <ESC> q Q i <F3>
pmap E edit_file
# ===================================================================
# == Taskview Keybindings
# ===================================================================
# Movement
tmap <up> taskview_move up=1
tmap <down> taskview_move down=1
tmap <home> taskview_move to=0
tmap <end> taskview_move to=-1
tmap <pagedown> taskview_move down=1.0 pages=True
tmap <pageup> taskview_move up=1.0 pages=True
tmap <C-d> taskview_move down=0.5 pages=True
tmap <C-u> taskview_move up=0.5 pages=True
copytmap <UP> k <C-p>
copytmap <DOWN> j <C-n> <CR>
copytmap <HOME> g
copytmap <END> G
copytmap <C-u> u
copytmap <PAGEDOWN> n f <C-F> <Space>
copytmap <PAGEUP> p b <C-B>
# Changing priority and deleting tasks
tmap J eval -q fm.ui.taskview.task_move(-1)
tmap K eval -q fm.ui.taskview.task_move(0)
tmap dd eval -q fm.ui.taskview.task_remove()
tmap <pagedown> eval -q fm.ui.taskview.task_move(-1)
tmap <pageup> eval -q fm.ui.taskview.task_move(0)
tmap <delete> eval -q fm.ui.taskview.task_remove()
# Basic
tmap <C-l> redraw_window
tmap <ESC> taskview_close
copytmap <ESC> q Q w <C-c>

350
ranger/scope.sh Executable file
View file

@ -0,0 +1,350 @@
#!/usr/bin/env bash
set -o noclobber -o noglob -o nounset -o pipefail
IFS=$'\n'
## If the option `use_preview_script` is set to `true`,
## then this script will be called and its output will be displayed in ranger.
## ANSI color codes are supported.
## STDIN is disabled, so interactive scripts won't work properly
## This script is considered a configuration file and must be updated manually.
## It will be left untouched if you upgrade ranger.
## Because of some automated testing we do on the script #'s for comments need
## to be doubled up. Code that is commented out, because it's an alternative for
## example, gets only one #.
## Meanings of exit codes:
## code | meaning | action of ranger
## -----+------------+-------------------------------------------
## 0 | success | Display stdout as preview
## 1 | no preview | Display no preview at all
## 2 | plain text | Display the plain content of the file
## 3 | fix width | Don't reload when width changes
## 4 | fix height | Don't reload when height changes
## 5 | fix both | Don't ever reload
## 6 | image | Display the image `$IMAGE_CACHE_PATH` points to as an image preview
## 7 | image | Display the file directly as an image
## Script arguments
FILE_PATH="${1}" # Full path of the highlighted file
PV_WIDTH="${2}" # Width of the preview pane (number of fitting characters)
## shellcheck disable=SC2034 # PV_HEIGHT is provided for convenience and unused
PV_HEIGHT="${3}" # Height of the preview pane (number of fitting characters)
IMAGE_CACHE_PATH="${4}" # Full path that should be used to cache image preview
PV_IMAGE_ENABLED="${5}" # 'True' if image previews are enabled, 'False' otherwise.
FILE_EXTENSION="${FILE_PATH##*.}"
FILE_EXTENSION_LOWER="$(printf "%s" "${FILE_EXTENSION}" | tr '[:upper:]' '[:lower:]')"
## Settings
HIGHLIGHT_SIZE_MAX=262143 # 256KiB
HIGHLIGHT_TABWIDTH=${HIGHLIGHT_TABWIDTH:-8}
HIGHLIGHT_STYLE=${HIGHLIGHT_STYLE:-pablo}
HIGHLIGHT_OPTIONS="--replace-tabs=${HIGHLIGHT_TABWIDTH} --style=${HIGHLIGHT_STYLE} ${HIGHLIGHT_OPTIONS:-}"
PYGMENTIZE_STYLE=${PYGMENTIZE_STYLE:-autumn}
OPENSCAD_IMGSIZE=${RNGR_OPENSCAD_IMGSIZE:-1000,1000}
OPENSCAD_COLORSCHEME=${RNGR_OPENSCAD_COLORSCHEME:-Tomorrow Night}
handle_extension() {
case "${FILE_EXTENSION_LOWER}" in
## Archive
a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
atool --list -- "${FILE_PATH}" && exit 5
bsdtar --list --file "${FILE_PATH}" && exit 5
exit 1;;
rar)
## Avoid password prompt by providing empty password
unrar lt -p- -- "${FILE_PATH}" && exit 5
exit 1;;
7z)
## Avoid password prompt by providing empty password
7z l -p -- "${FILE_PATH}" && exit 5
exit 1;;
## PDF
pdf)
## Preview as text conversion
pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \
fmt -w "${PV_WIDTH}" && exit 5
mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \
fmt -w "${PV_WIDTH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
exit 1;;
## BitTorrent
torrent)
transmission-show -- "${FILE_PATH}" && exit 5
exit 1;;
## OpenDocument
odt|ods|odp|sxw)
## Preview as text conversion
odt2txt "${FILE_PATH}" && exit 5
## Preview as markdown conversion
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
exit 1;;
## XLSX
xlsx)
## Preview as csv conversion
## Uses: https://github.com/dilshod/xlsx2csv
xlsx2csv -- "${FILE_PATH}" && exit 5
exit 1;;
## HTML
htm|html|xhtml)
## Preview as text conversion
w3m -dump "${FILE_PATH}" && exit 5
lynx -dump -- "${FILE_PATH}" && exit 5
elinks -dump "${FILE_PATH}" && exit 5
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
;;
## JSON
json)
jq --color-output . "${FILE_PATH}" && exit 5
python -m json.tool -- "${FILE_PATH}" && exit 5
;;
## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected
## by file(1).
dff|dsf|wv|wvc)
mediainfo "${FILE_PATH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
;; # Continue with next handler on failure
esac
}
handle_image() {
## Size of the preview if there are multiple options or it has to be
## rendered from vector graphics. If the conversion program allows
## specifying only one dimension while keeping the aspect ratio, the width
## will be used.
local DEFAULT_SIZE="1920x1080"
local mimetype="${1}"
case "${mimetype}" in
# SVG
image/svg+xml|image/svg)
convert -- "${FILE_PATH}" "${IMAGE_CACHE_PATH}" && exit 6
exit 1;;
## DjVu
# image/vnd.djvu)
# ddjvu -format=tiff -quality=90 -page=1 -size="${DEFAULT_SIZE}" \
# - "${IMAGE_CACHE_PATH}" < "${FILE_PATH}" \
# && exit 6 || exit 1;;
## Image
image/*)
local orientation
orientation="$( identify -format '%[EXIF:Orientation]\n' -- "${FILE_PATH}" )"
## If orientation data is present and the image actually
## needs rotating ("1" means no rotation)...
if [[ -n "$orientation" && "$orientation" != 1 ]]; then
## ...auto-rotate the image according to the EXIF data.
convert -- "${FILE_PATH}" -auto-orient "${IMAGE_CACHE_PATH}" && exit 6
fi
## `w3mimgdisplay` will be called for all images (unless overriden
## as above), but might fail for unsupported types.
exit 7;;
# Video
video/*)
# Thumbnail
ffmpegthumbnailer -i "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}" -s 0 && exit 6
exit 1;;
# PDF
application/pdf)
pdftoppm -f 1 -l 1 \
-scale-to-x "${DEFAULT_SIZE%x*}" \
-scale-to-y -1 \
-singlefile \
-jpeg -tiffcompression jpeg \
-- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \
&& exit 6 || exit 1;;
# ePub, MOBI, FB2 (using Calibre)
application/epub+zip|application/x-mobipocket-ebook|\
application/x-fictionbook+xml)
# ePub (using https://github.com/marianosimone/epub-thumbnailer)
epub-thumbnailer "${FILE_PATH}" "${IMAGE_CACHE_PATH}" \
"${DEFAULT_SIZE%x*}" && exit 6
ebook-meta --get-cover="${IMAGE_CACHE_PATH}" -- "${FILE_PATH}" \
>/dev/null && exit 6
exit 1;;
## Font
application/font*|application/*opentype)
preview_png="/tmp/$(basename "${IMAGE_CACHE_PATH%.*}").png"
if fontimage -o "${preview_png}" \
--pixelsize "120" \
--fontname \
--pixelsize "80" \
--text " ABCDEFGHIJKLMNOPQRSTUVWXYZ " \
--text " abcdefghijklmnopqrstuvwxyz " \
--text " 0123456789.:,;(*!?') ff fl fi ffi ffl " \
--text " The quick brown fox jumps over the lazy dog. " \
"${FILE_PATH}";
then
convert -- "${preview_png}" "${IMAGE_CACHE_PATH}" \
&& rm "${preview_png}" \
&& exit 6
else
exit 1
fi
;;
## Preview archives using the first image inside.
## (Very useful for comic book collections for example.)
# application/zip|application/x-rar|application/x-7z-compressed|\
# application/x-xz|application/x-bzip2|application/x-gzip|application/x-tar)
# local fn=""; local fe=""
# local zip=""; local rar=""; local tar=""; local bsd=""
# case "${mimetype}" in
# application/zip) zip=1 ;;
# application/x-rar) rar=1 ;;
# application/x-7z-compressed) ;;
# *) tar=1 ;;
# esac
# { [ "$tar" ] && fn=$(tar --list --file "${FILE_PATH}"); } || \
# { fn=$(bsdtar --list --file "${FILE_PATH}") && bsd=1 && tar=""; } || \
# { [ "$rar" ] && fn=$(unrar lb -p- -- "${FILE_PATH}"); } || \
# { [ "$zip" ] && fn=$(zipinfo -1 -- "${FILE_PATH}"); } || return
#
# fn=$(echo "$fn" | python -c "import sys; import mimetypes as m; \
# [ print(l, end='') for l in sys.stdin if \
# (m.guess_type(l[:-1])[0] or '').startswith('image/') ]" |\
# sort -V | head -n 1)
# [ "$fn" = "" ] && return
# [ "$bsd" ] && fn=$(printf '%b' "$fn")
#
# [ "$tar" ] && tar --extract --to-stdout \
# --file "${FILE_PATH}" -- "$fn" > "${IMAGE_CACHE_PATH}" && exit 6
# fe=$(echo -n "$fn" | sed 's/[][*?\]/\\\0/g')
# [ "$bsd" ] && bsdtar --extract --to-stdout \
# --file "${FILE_PATH}" -- "$fe" > "${IMAGE_CACHE_PATH}" && exit 6
# [ "$bsd" ] || [ "$tar" ] && rm -- "${IMAGE_CACHE_PATH}"
# [ "$rar" ] && unrar p -p- -inul -- "${FILE_PATH}" "$fn" > \
# "${IMAGE_CACHE_PATH}" && exit 6
# [ "$zip" ] && unzip -pP "" -- "${FILE_PATH}" "$fe" > \
# "${IMAGE_CACHE_PATH}" && exit 6
# [ "$rar" ] || [ "$zip" ] && rm -- "${IMAGE_CACHE_PATH}"
# ;;
esac
# openscad_image() {
# TMPPNG="$(mktemp -t XXXXXX.png)"
# openscad --colorscheme="${OPENSCAD_COLORSCHEME}" \
# --imgsize="${OPENSCAD_IMGSIZE/x/,}" \
# -o "${TMPPNG}" "${1}"
# mv "${TMPPNG}" "${IMAGE_CACHE_PATH}"
# }
case "${FILE_EXTENSION_LOWER}" in
## 3D models
## OpenSCAD only supports png image output, and ${IMAGE_CACHE_PATH}
## is hardcoded as jpeg. So we make a tempfile.png and just
## move/rename it to jpg. This works because image libraries are
## smart enough to handle it.
csg|scad)
openscad_image "${FILE_PATH}" && exit 6
;;
3mf|amf|dxf|off|stl)
openscad_image <(echo "import(\"${FILE_PATH}\");") && exit 6
;;
esac
}
handle_mime() {
local mimetype="${1}"
case "${mimetype}" in
## RTF and DOC
text/rtf|*msword)
## Preview as text conversion
## note: catdoc does not always work for .doc files
## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/
catdoc -- "${FILE_PATH}" && exit 5
exit 1;;
## DOCX, ePub, FB2 (using markdown)
## You might want to remove "|epub" and/or "|fb2" below if you have
## uncommented other methods to preview those formats
*wordprocessingml.document|*/epub+zip|*/x-fictionbook+xml)
## Preview as markdown conversion
pandoc -s -t markdown -- "${FILE_PATH}" && exit 5
exit 1;;
## XLS
*ms-excel)
## Preview as csv conversion
## xls2csv comes with catdoc:
## http://www.wagner.pp.ru/~vitus/software/catdoc/
xls2csv -- "${FILE_PATH}" && exit 5
exit 1;;
## Text
text/* | */xml)
## Syntax highlight
if [[ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]]; then
exit 2
fi
if [[ "$( tput colors )" -ge 256 ]]; then
local pygmentize_format='terminal256'
local highlight_format='xterm256'
else
local pygmentize_format='terminal'
local highlight_format='ansi'
fi
env HIGHLIGHT_OPTIONS="${HIGHLIGHT_OPTIONS}" highlight \
--out-format="${highlight_format}" \
--force -- "${FILE_PATH}" && exit 5
env COLORTERM=8bit bat --color=always --style="plain" \
-- "${FILE_PATH}" && exit 5
pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}"\
-- "${FILE_PATH}" && exit 5
exit 2;;
## DjVu
image/vnd.djvu)
## Preview as text conversion (requires djvulibre)
djvutxt "${FILE_PATH}" | fmt -w "${PV_WIDTH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
exit 1;;
## Image
image/*)
## Preview as text conversion
# img2txt --gamma=0.6 --width="${PV_WIDTH}" -- "${FILE_PATH}" && exit 4
exiftool "${FILE_PATH}" && exit 5
exit 1;;
## Video and audio
video/* | audio/*)
mediainfo "${FILE_PATH}" && exit 5
exiftool "${FILE_PATH}" && exit 5
exit 1;;
esac
}
handle_fallback() {
echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5
exit 1
}
MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )"
if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then
handle_image "${MIMETYPE}"
fi
handle_extension
handle_mime "${MIMETYPE}"
handle_fallback
exit 1

14
rofi-cafmenu/config.json Normal file
View file

@ -0,0 +1,14 @@
{
"ignored-meals": [
"BREAKFAST"
],
"ignored-stations": [
"Deli",
"Mto Pasta",
"Omeletes",
"Pizza",
"Salad",
"Soup",
"Kids Camps"
]
}

182
rofi/arthuredit.rasi Normal file
View file

@ -0,0 +1,182 @@
/**
* ROFI Color theme
* User: Qball
* Copyright: Dave Davenport
* Edited by Michael Bradley
*/
* {
foreground: #ffeedd;
backlight: #ccffeedd;
background-color: transparent;
dark: #1c1c1c;
// Black
black: #3d352a;
lightblack: #554444;
tlightblack: #554444cc;
//
// Red
red: #cd5c5c;
lightred: #cc5533;
//
// Green
green: #86af80;
lightgreen: #88cc22;
//
// Yellow
yellow: #e8ae5b;
lightyellow: #ffa75d;
//
// Blue
blue: #6495ed;
lightblue: #87ceeb;
//
// Magenta
magenta: #deb887;
lightmagenta: #996600;
//
// Cyan
cyan: #b0c4de;
tcyan: #ccb0c4de;
lightcyan: #b0c4de;
//
// White
white: #bbaa99;
lightwhite: #ddccbb;
//
// Bold, Italic, Underline
highlight: underline bold #ffffff;
transparent: rgba(0,0,0,0);
font: "JetBrains Mono 10";
}
window {
location: center;
anchor: center;
transparency: "screenshot";
padding: 10px;
border: 0px;
border-radius: 10px;
color: @magenta;
background-color: @transparent;
spacing: 0;
children: [mainbox];
orientation: horizontal;
}
mainbox {
spacing: 0;
children: [ inputbar, message, listview ];
}
message {
border-color: @foreground;
border: 0px 2px 2px 2px;
// border-radius: 10px;
padding: 5;
background-color: @tcyan;
}
message {
font: "JetBrains Mono 8";
color: @black;
}
inputbar {
color: @lightgreen;
padding: 11px;
background-color: @tlightblack;
border: 2px 2px 2px 2px;
border-radius: 15px 15px 0px 0px;
border-color: @foreground;
font: "JetBrains Mono 18";
}
entry,prompt,case-indicator {
text-font: inherit;
text-color:inherit;
}
prompt {
margin: 0px 0.3em 0em 0em ;
}
listview {
padding: 8px;
border-radius: 0px 0px 15px 15px;
border-color: @foreground;
border: 0px 2px 2px 2px;
background-color: #1c1c1ccc;
dynamic: false;
lines: 10;
}
element {
padding: 3px;
vertical-align: 0.5;
// border: 2px;
border-radius: 4px;
background-color: transparent;
color: @foreground;
font:inherit;
}
element-text {
background-color: inherit;
text-color: inherit;
}
element selected.normal {
background-color: @blue;
}
element normal active {
foreground: @lightblue;
}
element normal urgent {
foreground: @lightred;
}
element alternate normal {
}
element alternate active {
foreground: @lightblue;
}
element alternate urgent {
foreground: @lightred;
}
element selected active {
background-color: @lightblue;
foreground: @dark;
}
element selected urgent {
background-color: @lightred;
foreground: @dark;
}
element normal normal {
}
vertb {
expand: false;
children: [ dummy0, mode-switcher, dummy1 ];
}
dummy0, dummy1 {
expand: true;
}
mode-switcher {
expand: false;
orientation: vertical;
spacing: 0px;
border: 0px 0px 0px 0px;
}
button {
font: "FontAwesome 22";
padding: 6px;
border: 2px 0px 2px 2px;
border-radius: 4px 0px 0px 4px;
background-color: @tlightblack;
border-color: @foreground;
color: @foreground;
horizontal-align: 0.5;
}
button selected normal {
color: @dark;
border: 2px 0px 2px 2px;
background-color: @backlight;
border-color: @foreground;
}
error-message {
expand: true;
background-color: red;
border-color: darkred;
border: 2px;
padding: 1em;
}

7
rofi/config.rasi Executable file
View file

@ -0,0 +1,7 @@
@theme "arthuredit"
configuration {
modi: "drun,calc,emoji:/usr/bin/rofimoji -a copy -f emojis math,audio:/home/mbradley/dev/rofi-audio/rofi-audio.py";
combi-modi: "drun,filebrowser,emoji";
icon-theme: "Papirus";
show-icons: true;
}

2
screenlayout/monitor.sh Executable file
View file

@ -0,0 +1,2 @@
#!/bin/sh
xrandr --output DisplayPort-0 --mode 1920x1080 --pos 1920x1404 --rotate normal --rate 165 --output DisplayPort-1 --mode 1920x1080 --pos 0x1404 --rotate normal --rate 165 --primary --output HDMI-A-0 --pos 0x0 --rotate normal --rate 60 --scale 1.3x1.3 --panning 2496x1404

2
screenlayout/monitor.sh.normal Executable file
View file

@ -0,0 +1,2 @@
#!/bin/sh
xrandr --output DisplayPort-0 --mode 1920x1080 --pos 1920x0 --rotate normal --rate 165 --output DisplayPort-1 --mode 1920x1080 --pos 0x0 --rotate normal --rate 165 --primary

37
vim/viminfo Normal file
View file

@ -0,0 +1,37 @@
# This viminfo file was generated by Vim 9.0.
# You may edit it if you're careful!
# Viminfo version
|1,4
# Value of 'encoding' when this file was written
*encoding=utf-8
# hlsearch on (H) or off (h):
~h
# Command Line History (newest to oldest):
# Search String History (newest to oldest):
# Expression History (newest to oldest):
# Input Line History (newest to oldest):
# Debug Line History (newest to oldest):
# Registers:
# File marks:
'0 1 0 ~/school/3/COMP3000/t1/csimpleshell.c
|4,48,1,0,1674084872,"~/school/3/COMP3000/t1/csimpleshell.c"
# Jumplist (newest first):
-' 1 0 ~/school/3/COMP3000/t1/csimpleshell.c
|4,39,1,0,1674084872,"~/school/3/COMP3000/t1/csimpleshell.c"
# History of marks within files (newest to oldest):
> ~/school/3/COMP3000/t1/csimpleshell.c
* 1674084863 0
" 1 0

17
vim/vimrc Normal file
View file

@ -0,0 +1,17 @@
set runtimepath^=$XDG_CONFIG_HOME/vim
set runtimepath+=$XDG_DATA_HOME/vim
set runtimepath+=$XDG_CONFIG_HOME/vim/after
set packpath^=$XDG_DATA_HOME/vim,$XDG_CONFIG_HOME/vim
set packpath+=$XDG_CONFIG_HOME/vim/after,$XDG_DATA_HOME/vim/after
let g:netrw_home = $XDG_DATA_HOME."/vim"
call mkdir($XDG_DATA_HOME."/vim/spell", 'p')
set backupdir=$XDG_STATE_HOME/vim/backup | call mkdir(&backupdir, 'p')
set directory=$XDG_STATE_HOME/vim/swap | call mkdir(&directory, 'p')
set undodir=$XDG_STATE_HOME/vim/undo | call mkdir(&undodir, 'p')
set viewdir=$XDG_STATE_HOME/vim/view | call mkdir(&viewdir, 'p')
if !has('nvim') | set viminfofile=$XDG_STATE_HOME/vim/viminfo | endif

1651
zsh/.p10k-tty.zsh Executable file

File diff suppressed because it is too large Load diff

1652
zsh/.p10k.zsh Executable file

File diff suppressed because it is too large Load diff

1876
zsh/.zcompdump Normal file

File diff suppressed because it is too large Load diff

1863
zsh/.zcompdump-chonk-5.9 Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

136
zsh/.zshrc Executable file
View file

@ -0,0 +1,136 @@
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_STATE_HOME="$HOME/.local/state"
export XDG_CACHE_HOME="$HOME/.cache"
#export HISTFILE="$XDG_STATE_HOME/bash/history"
export CARGO_HOME="$XDG_DATA_HOME/cargo"
export ELINKS_CONFDIR="$XDG_CONFIG_HOME/elinks"
export GHCUP_USE_XDG_DIRS=true
export LESSHISTFILE="$XDG_STATE_HOME/less/history"
export RECOLL_CONFDIR="$XDG_CONFIG_HOME/recoll"
export RUSTUP_HOME="$XDG_DATA_HOME/rustup"
export HISTFILE="$XDG_STATE_HOME/zsh/history"
export ZSH="$XDG_DATA_HOME/oh-my-zsh"
#export XAUTHORITY="$XDG_RUNTIME_DIR/Xauthority"
export RANDFILE="$XDG_CACHE_HOME/.rnd"
export VIMINIT='let $MYVIMRC = !has("nvim") ? "$XDG_CONFIG_HOME/vim/vimrc" : "$XDG_CONFIG_HOME/nvim/init.vim" | so $MYVIMRC'
alias wget=wget --hsts-file="$XDG_DATA_HOME/wget-hsts"
export W3M_DIR="$XDG_DATA_HOME/w3m"
export NUGET_PACKAGES="$XDG_CACHE_HOME/NuGetPackages"
export PATH="$PATH:/home/mbradley/.local/share/JetBrains/Toolbox/scripts:/home/mbradley/scripts"
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
ZSH_THEME="robbyrussell"
HYPHEN_INSENSITIVE="true"
ENABLE_CORRECTION="false"
COMPLETION_WAITING_DOTS="true"
plugins=(git python)
source $ZSH/oh-my-zsh.sh
source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
if [[ "$TERM" == "linux" ]] ; then
p10k="$ZDOTDIR/.p10k-tty.zsh"
else
p10k="$ZDOTDIR/.p10k.zsh"
fi
[[ ! -f "$p10k" ]] || source "$p10k"
MATRIX="neo-matrix -a -D -f 60 -s -m $(date +%y/%m/%d)"
FANCYCLEAR="clear && echo && fastfetch && echo"
alias clera="clear"
alias cealr="clear"
alias cearl="clear"
alias clare="clear"
alias celar="clear"
alias clrae="clear"
alias cclear="clear"
alias caerl="clear"
alias caelr="clear"
alias cleear="clear"
alias dlear="clear"
alias cleat="clear"
alias clewar="clear"
alias c=$FANCYCLEAR
alias m=$MATRIX
alias f="fastfetch"
alias q="exit"
alias e="exit"
alias cm="$FANCYCLEAR && $MATRIX"
alias ls="lsd"
alias grep="rg"
alias fdisk="sudo fdisk"
alias gdisk="sudo gdisk"
alias mount="sudo mount"
alias umount="sudo umount"
alias wifi="nmtui"
alias pacman="sudo pacman"
alias quit="exit"
alias please="sudo"
alias pyhton="python"
alias nordpvn="nordvpn"
alias 1p='eval $(op signin)'
alias reset="source .zshrc"
alias audio="ncpamixer"
alias showpic="kitty +kitten icat"
#alias python="ipython"
alias cleanbranches='git branch -l | rg -v "(^\*|master)" | xargs git branch -d'
LAST_REPO=""
cd() {
builtin cd "$@"
git rev-parse 2>/dev/null
if [ $? -eq 0 ]; then
if [ "$LAST_REPO" != $(basename $(git rev-parse --show-toplevel)) ]; then
onefetch
LAST_REPO=$(basename $(git rev-parse --show-toplevel))
fi
fi
}
alias cat='bat --paging=never'
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
export MANROFFOPT="-c"
help() {
"$@" --help 2>&1 | bat --plain --language=help
}
alias n="nvim"
#alias vi="lvim"
#alias vim="lvim"
if [[ "$TERM" == "linux" ]] ; then
export EDITOR="vim"
else
export EDITOR="lvim"
fi
alias v="$EDITOR"
alias sv="sudo vim"
#alias sv="sudoedit"
export VISUAL=$EDITOR
export PATH="$PATH:/home/mbradley/.local/bin"
#export QT_QPA_PLATFORMTHEME="qt5ct"
[ "$TERM" = "xterm-kitty" ] && alias ssh="kitty +kitten ssh"
#c
#autoload -Uz compinit
#compinit
ZSH_AUTOSUGGEST_STRATEGY=(history completion)
source /usr/share/zsh/plugins/fzf-tab-git/fzf-tab.zsh
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh

BIN
zsh/.zshrc.zwc Normal file

Binary file not shown.