Compare commits

...

3 Commits

Author SHA1 Message Date
Gib
5f73b76800 Add more stuff 2025-11-13 16:59:59 -06:00
Gib
55f1b32e4d replace install line in script 2025-11-12 09:48:15 -06:00
Gib
e10c95152e add neovim 2025-11-12 09:46:59 -06:00
39 changed files with 117787 additions and 50 deletions

4
.gitignore vendored
View File

@@ -1,2 +1,6 @@
# Ignore Wireguard config of course!
/config/wg/**
# Ignore bash environment variables.
/config/bash/env
# Ignore backups of old config files
/config/old/**

74
bin/get-port Executable file
View File

@@ -0,0 +1,74 @@
#!/usr/bin/env python3
import subprocess
import questionary
import re
import sys
def get_interfaces():
try:
# Run tcpdump -D command
result = subprocess.run(['sudo', 'tcpdump', '-D'],
capture_output=True,
text=True)
# Split output into lines and create a list of interfaces
interfaces = []
for line in result.stdout.split('\n'):
if line.strip():
# Extract interface name and description
match = re.match(r'\d+\.(.+)', line)
if match:
interfaces.append(line)
return interfaces
except Exception as e:
print(f"Error getting interfaces: {e}")
sys.exit(1)
def get_port_info(interface_number):
try:
# Extract just the number from the interface selection
number = interface_number.split('.')[0]
# Run tcpdump command for port info
cmd = [
'sudo', 'tcpdump', '-nnv',
'-i', number,
'-s', '1500',
'-c', '1',
'ether[12:2]==0x88cc'
]
print("\nListening for LLDP packets (this might take a few seconds)...")
result = subprocess.run(cmd, capture_output=True, text=True)
return result.stdout or result.stderr
except Exception as e:
print(f"Error getting port info: {e}")
sys.exit(1)
def main():
# Get list of interfaces
interfaces = get_interfaces()
if not interfaces:
print("No interfaces found!")
sys.exit(1)
# Let user select an interface
selected = questionary.select(
"Select an interface to check port information:",
choices=interfaces
).ask()
if selected:
# Get and display port information
port_info = get_port_info(selected)
print("\nPort Information:")
print(port_info)
else:
print("No interface selected.")
if __name__ == "__main__":
main()

191
bin/gnf Executable file
View File

@@ -0,0 +1,191 @@
#!/usr/bin/env bash
#
# gnf Friendly wrapper around 'sudo dnf'
# Version 1.2
# Author: You
#
# Features:
# • Implicit '-y' on install/remove/reinstall/downgrade (toggle with -n/--no-confirm)
# • 'gnf update' pipeline:
# - dnf update [-y] [--refresh]
# - flatpak update (user + system)
# - optional fwupd refresh+update
# with its own flags: -r/--refresh, -f/--firmware, -n/--no-confirm, -y/--yes
# • Passes any other 'dnf' subcommand straight to sudo dnf
# • 'copr' sub-commands get auto '-y' for addrepo/removerepo/enable/disable/list
set -euo pipefail
PROGRAM=$(basename "$0")
VERSION="1.2"
usage() {
cat <<EOF
$PROGRAM wrapper for sudo dnf with smart defaults
Usage:
$PROGRAM [GLOBAL OPTIONS] COMMAND [COMMAND OPTIONS] [ARGS...]
GLOBAL OPTIONS (must precede COMMAND):
-h, --help Show this help and exit
--version Show version and exit
-n, --no-confirm Disable the automatic '-y' on supported commands
-y, --yes (Re-)enable the automatic '-y' (default)
COMMANDS:
install, remove, reinstall, downgrade
→ Implicit '-y' unless disabled by global '-n'
update (alias: upgrade)
→ dnf update + flatpak update + optional fwupd
→ COMMAND OPTIONS:
-r, --refresh Pass --refresh to dnf update
-f, --firmware After dnf+flatpak, run fwupdmgr refresh && update
-n, --no-confirm Do NOT add '-y' to dnf update
-y, --yes Force '-y' on dnf update (default)
→ You may group short flags: e.g. -rf or -fr
copr (subcommands: addrepo, removerepo, enable, disable, list, …)
→ For addrepo/removerepo/enable/disable/list, we auto '-y'
→ Other copr actions are passed straight through
any other dnf COMMAND is forwarded to 'sudo dnf'
EXAMPLES:
gnf install vim git
gnf -n install firefox # interactive remove/install
gnf update # dnf update -y ; flatpak
gnf update -r # + --refresh
gnf update -rf # + firmware
gnf -n update --refresh # no -y, + refresh
gnf copr addrepo user/project
EOF
}
# If no args, show help
if [[ $# -eq 0 ]]; then
usage
exit 0
fi
#
# 1) Parse GLOBAL OPTIONS
#
auto_yes=true
while [[ $# -gt 0 && "$1" == -* ]]; do
case "$1" in
-h|--help) usage; exit 0 ;;
--version) echo "$PROGRAM $VERSION"; exit 0 ;;
-n|--no-confirm) auto_yes=false; shift ;;
-y|--yes) auto_yes=true; shift ;;
--) shift; break ;; # end of globals
*) break ;; # first non-global dash-opt
esac
done
# Must have at least one positional argument now: the COMMAND
if [[ $# -lt 1 ]]; then
echo "Error: no COMMAND specified." >&2
usage
exit 1
fi
cmd=$1; shift
# Treat 'upgrade' as alias for 'update'
[[ "$cmd" == "upgrade" ]] && cmd=update
#
# 2) Dispatch on COMMAND
#
case "$cmd" in
# ---------------------------------------------------------------
# install/remove/reinstall/downgrade (auto '-y' unless -n)
# ---------------------------------------------------------------
install|remove|reinstall|downgrade)
dnf_args=()
$auto_yes && dnf_args+=(-y)
sudo dnf "$cmd" "${dnf_args[@]}" "$@"
exit $?
;;
# ---------------------------------------------------------------
# update pipeline
# ---------------------------------------------------------------
update)
# 2.1) Map any long opts to short ones for getopts
mapped=()
for arg in "$@"; do
case "$arg" in
--refresh) mapped+=(-r) ;;
--firmware) mapped+=(-f) ;;
--no-confirm) mapped+=(-n) ;;
--yes) mapped+=(-y) ;;
--) mapped+=(--);;
*) mapped+=("$arg");;
esac
done
# 2.2) Parse update-specific flags with getopts (supports grouping: -rf)
refresh=false
firmware=false
confirm=$auto_yes
OPTIND=1
# note: the leading colon suppresses getopts own error msg
while getopts ":rfny" opt "${mapped[@]}"; do
case "$opt" in
r) refresh=true ;;
f) firmware=true ;;
n) confirm=false ;;
y) confirm=true ;;
\?) echo "Unknown option '-$OPTARG' for update" >&2; exit 1 ;;
esac
done
shift $((OPTIND - 1))
# 2.3) Run the dnf update
dnf_args=()
$confirm && dnf_args+=(-y)
$refresh && dnf_args+=(--refresh)
sudo dnf update "${dnf_args[@]}" "$@"
# 2.4) Run flatpak updates (user then system)
flatpak update -y
sudo flatpak update
# 2.5) Optional firmware via fwupd
if $firmware; then
sudo fwupdmgr refresh
sudo fwupdmgr update
fi
exit $?
;;
# ---------------------------------------------------------------
# copr sub-commands
# ---------------------------------------------------------------
copr)
if [[ $# -lt 1 ]]; then
echo "Error: 'gnf copr' requires a subcommand." >&2
exit 1
fi
sub=$1; shift
case "$sub" in
addrepo|removerepo|enable|disable|list)
sudo dnf copr "$sub" -y "$@" ;;
*)
sudo dnf copr "$sub" "$@" ;;
esac
exit $?
;;
# ---------------------------------------------------------------
# anything else → pass straight to sudo dnf
# ---------------------------------------------------------------
*)
sudo dnf "$cmd" "$@"
exit $?
;;
esac

View File

@@ -1,25 +0,0 @@
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific environment
if ! [[ "$PATH" =~ "$HOME/.local/bin:$HOME/bin:" ]]; then
PATH="$HOME/.local/bin:$HOME/bin:$PATH"
fi
export PATH
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi
unset rc

View File

@@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -euo pipefail
source ~/.local/share/sunhat/defaults/bash/api_keys
printf '%s\t%s' \
"$(bw --session "$BW_SESSION" get username "$1")" \
"$(bw --session "$BW_SESSION" get password "$1")"

View File

@@ -0,0 +1,40 @@
# espanso configuration file
# For a complete introduction, visit the official docs at: https://espanso.org/docs/
# You can use this file to define the global configuration options for espanso.
# These are the parameters that will be used by default on every application,
# but you can also override them on a per-application basis.
# To make customization easier, this file contains some of the commonly used
# parameters. Feel free to uncomment and tune them to fit your needs!
# --- Toggle key
# Customize the key used to disable and enable espanso (when double tapped)
# Available options: CTRL, SHIFT, ALT, CMD, OFF
# You can also specify the key variant, such as LEFT_CTRL, RIGHT_SHIFT, etc...
# toggle_key: ALT
# You can also disable the toggle key completely with
# toggle_key: OFF
# --- Injection Backend
# Espanso supports multiple ways of injecting text into applications. Each of
# them has its quirks, therefore you may want to change it if you are having problems.
# By default, espanso uses the "Auto" backend which should work well in most cases,
# but you may want to try the "Clipboard" or "Inject" backend in case of issues.
# backend: Clipboard
# --- Auto-restart
# Enable/disable the config auto-reload after a file change is detected.
# auto_restart: false
# --- Clipboard threshold
# Because injecting long texts char-by-char is a slow operation, espanso automatically
# uses the clipboard if the text is longer than 'clipboard_threshold' characters.
clipboard_threshold: 500
# For a list of all the available options, visit the official docs at: https://espanso.org/docs/
show_icon: false

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,56 @@
# html-utils-package
Make HTML5 easier and less time-consuming with this [Espanso](https://espanso.org/) package!
# Installation
Make sure you have already installed [Espanso](https://espanso.org/install/) first.
```
espanso install html-utils-package
```
That's all. You can start using the package. Open your favorite editor and type `::docskel` to test!
# Preview
You can choose between all of them from the Search-bar:
![Search-bar](images/search-bar.png)
# Triggers
Here you can see some of them:
| Trigger | Result |
| ------------- | ------------- |
| `::docskel` | Generates an empty document with `utf-8` and `viewport` headers (unindented) |
| `::doctype` | `<!DOCTYPE html>` |
| `::meta-charset` | `<meta charset="">` |
| `::meta-utf-8` | `<meta charset="UTF-8">` |
| `::meta-viewport` | `<meta name="viewport" content="width=device-width, initial-scale=1">` |
| `::meta-author` | `<meta name="author" content="">` |
| `::meta-desc` | `<meta name="description" content="">` |
| `::meta-keywords` | `<meta name="keywords" content="">` |
| `::title` | `<title></title>` |
| `::div` | `<div></div>` |
| `::html` | `<html></html>` |
| `::head` | `<head></head>` |
| `::body` | `<body></body>` |
| `::a` | `<a href=""></a>` |
| `::br` | `<br>` |
| `::button` | `<button type="button"></button> ` |
| `::style` | `<style></style>` |
| `::css` | `<link rel="stylesheet" type="text/css" href="">` |
| `::script` | `<script></script>` |
| `::js` | `<script type="text/javascript" src=""></script>` |
| `::form` | `<form action="" method=""></form>` |
| `::label` | `<label for=""></label>` |
| `::input-submit` | `<input type="submit" value="">` |
| `::input-text` | `<input type="text" name="" id="">` |
| `::input-password` | `<input type="password" name="" id="">` |
| `::input-radio` | `<input type="radio" name="" id="" value="">` |
| `::input-checkbox` | `<input type="checkbox" name="" id="" value="">` |
| `::input-file` | `<input type="file" name="" id="">` |
# Contributions
If you feel like there's any important tag/snippet missing, feel free to create a Pull Request or open an [Issue](https://github.com/woodenbell/html-utils-package/issues/new).

View File

@@ -0,0 +1,7 @@
author: Gabriel Barbosa
description: A simple package to make coding in HTML5 easier.
name: html-utils-package
title: HTML utilities package
version: 2.0.1
homepage: "https://github.com/woodenbell/html-utils-package"
tags: ["frontend", "html", "development"]

View File

@@ -0,0 +1,2 @@
---
hub

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@@ -0,0 +1,239 @@
matches:
- trigger: "::doctype"
label: "HTML - doctype"
replace: >-
<!DOCTYPE html>
- trigger: "::meta-charset"
label: "HTML - meta-charset"
replace: >-
<meta charset="$|$">
- trigger: "::meta-utf-8"
label: "HTML - meta-utf-8"
replace: >-
<meta charset="UTF-8">
- trigger: "::meta-viewport"
label: "HTML - meta-viewport"
replace: >-
<meta name="viewport" content="width=device-width, initial-scale=1">
- trigger: "::meta-author"
label: "HTML - meta-autor"
replace: >-
<meta name="author" content="$|$">
- trigger: "::meta-desc"
label: "HTML - meta-desc"
replace: >-
<meta name="description" content="$|$">
- trigger: "::meta-keywords"
label: "HTML - meta-keywords"
replace: >-
<meta name="keywords" content="$|$">
- trigger: "::title"
label: "HTML - title"
replace: >-
<title>$|$</title>
- trigger: "::div"
label: "HTML - div"
replace: >-
<div>$|$</div>
- trigger: "::html"
label: "HTML - html"
replace: >-
<html>$|$</html>
- trigger: "::head"
label: "HTML - head"
replace: >-
<head>$|$</head>
- trigger: "::body"
label: "HTML - body"
replace: >-
<body>$|$</body>
- trigger: "::inline-css"
label: "HTML - inline-css"
replace: style="{{element}}:$|$;"
vars:
- name: element
type: choice
params:
values:
- "color"
- "background-color"
- "padding"
- "font-family"
- "font-size"
- "font-weight"
- "border"
- "padding"
- "margin"
- trigger: "::a"
label: "HTML - a"
replace: >-
<a href="$|$"></a>
- trigger: "::2a"
label: "HTML - 2a"
replace: <a href="{{clipboard}}" target="_blank" rel="noopener noreferrer">$|$</a>
vars:
- name: "clipboard"
type: "clipboard"
- trigger: "::br"
label: "HTML - br"
replace: >-
<br>
- trigger: "::p"
label: "HTML - p"
replace: >-
<p>$|$</p>
- trigger: "::block"
label: "HTML - block"
replace: >-
<blockquote>$|$</blockquote>
- trigger: "::button"
label: "HTML - button"
replace: >-
<button type="button">$|$</button>
- trigger: "::style"
label: "HTML - style"
replace: >-
<style>$|$</style>
- trigger: "::css"
label: "HTML - css"
replace: >-
<link rel="stylesheet" type="text/css" href="$|$">
- trigger: "::ul"
label: "HTML - ul"
replace: |
<ul>
<li>$|$</li>
</ul>
- trigger: "::li"
label: "HTML - li"
replace: >-
<li>$|$</li>
- trigger: "::table"
label: "HTML - table"
replace: |
<table width="$|$" border="" align="">
<tr>
<td width=""></td>
</tr>
</table>
- trigger: "::td"
label: "HTML - td"
replace: >-
<td>$|$</td>
- trigger: "::select"
label: "HTML - select"
replace: |
<select name="$|$" id="">
<option value=""></option>
</select>
- trigger: "::optgroup"
label: "HTML - optgroup"
replace: |
<select name="$|$" id="">
<optgroup label="">
<option value=""></option>
</optgroup>
</select>
- trigger: "::option"
label: "HTML - option"
replace: >-
<option value="$|$"></option>
- trigger: "::script"
label: "HTML - script"
replace: >-
<script>$|$</script>
- trigger: "::js"
label: "HTML - js"
replace: >-
<script type="text/javascript" src="$|$"></script>
- trigger: "::form"
label: "HTML - form"
replace: >-
<form action="$|$" method=""></form>
- trigger: "::label"
label: "HTML - label"
replace: >-
<label for="$|$"></label>
- trigger: "::img"
label: "HTML - img"
replace: >-
<img src="$|$" alt="">
- trigger: "::input-submit"
label: "HTML - input-submit"
replace: >-
<input type="submit" value="$|$">
- trigger: "::input-text"
label: "HTML - input-text"
replace: >-
<input type="text" name="$|$" id="">
- trigger: "::input-password"
label: "HTML - input-password"
replace: >-
<input type="password" name="$|$" id="">
- trigger: "::input-radio"
label: "HTML - input-radio"
replace: >-
<input type="radio" name="$|$" id="" value="">
- trigger: "::input-checkbox"
label: "HTML - input-checkbox"
replace: >-
<input type="checkbox" name="$|$" id="" value="">
- trigger: "::input-file"
label: "HTML - input-file"
replace: >-
<input type="file" name="$|$" id="">
- trigger: "::docskel"
label: "HTML - docskel"
replace: |
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>$|$</title>
</head>
<body>
</body>
</html>

View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 José Ferreira
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,22 @@
# Available matches
| Trigger | Replace |
|--------------|--------------------------------------------------------|
| :block: | \```🖰\n``` |
| :code: | \`🖰` |
| :h1: | # |
| :h2: | ## |
| :h3: | ### |
| :h4: | #### |
| :h5: | ##### |
| :h6: | ###### |
| :bold: | \*\*🖰** |
| :italic: | \*🖰\* |
| :strike: | \~\~🖰~~ |
| :url: | \[🖰]() |
| :image: | !\[](🖰) |
| :horizontal: | ___\n |
| :task: | - [ ] |
| :donetask: | - [x] |
| :collapse: | \<details>\<summary>🖰\</summary>\n\<p>\n\n\</p>\n\</details> |
**Note: The 🖰 symbol is where your mouse cursor will be after the trigger and \n represents a new line.**

View File

@@ -0,0 +1,7 @@
author: "Jos\xE9 Ferreira"
description: A simple package to make writing Markdown easier
name: markdown-shortcuts
title: Markdown shortcuts
version: 0.1.0
homepage: "https://github.com/jpmvferreira/espanso-mega-pack"
tags: ["markdown", "development", "writing"]

View File

@@ -0,0 +1,2 @@
---
hub

View File

@@ -0,0 +1,65 @@
name: markdown-shortcuts
parent: default
matches:
- triggers: [":block:", ":mb:"]
replace: |-
```$|$
```
force_clipboard: true
- triggers: [":code:", ":mc:"]
replace: |-
`$|$`
force_clipboard: true
- trigger: ":h1:"
replace: "#"
- trigger: ":h2:"
replace: "##"
- trigger: ":h3:"
replace: "###"
- trigger: ":h4:"
replace: "####"
- trigger: ":h5:"
replace: "#####"
- trigger: ":h6:"
replace: "######"
- trigger: ":bold:"
replace: "**$|$**"
- trigger: ":italic:"
replace: "*$|$*"
- trigger: ":strike:"
replace: "~~$|$~~"
- trigger: ":url:"
replace: "[$|$]()"
- triggers: [":image:", ":img:"]
replace: "![]($|$)"
- triggers: [":horizontal:", ":mh:"]
replace: "___"
- triggers: [":task:", ":mt:"]
replace: "- [ ] "
- triggers: [":taskdone:", ":mtd:"]
replace: "- [x] "
- triggers: [":collapse:", ":mcol:"]
replace: |-
<details>
<summary></summary>
$|$
</details>
force_clipboard: true

View File

@@ -0,0 +1,27 @@
Copyright (c) 2019 Timo Runge <me@timorunge.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@@ -0,0 +1,22 @@
# misspell-en
misspell-en is a espanso package which is replacing commonly misspelled english words.
The package is based on [github.com/client9/misspell](https://github.com/client9/misspell).
## Installation
Install the package with:
```
espanso install misspell-en
```
## Usage
Type `yuo` and see what's happening.
## License
[BSD 3-Clause "New" or "Revised" License](LICENSE)
Misspell is [MIT](https://github.com/client9/misspell/blob/master/LICENSE).

View File

@@ -0,0 +1,7 @@
author: Timo Runge
description: Replace commonly misspelled english words.
name: misspell-en
title: Misspell EN
version: 0.1.2
homepage: "https://github.com/timorunge/espanso-misspell-en"
tags: ["spell-correction", "english"]

View File

@@ -0,0 +1,2 @@
---
hub

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,72 @@
{
"overrides": [
{
"wmClass": "jetbrains-toolbox",
"mode": "float"
},
{
"wmClass": "Com.github.amezin.ddterm",
"mode": "float"
},
{
"wmClass": "Com.github.donadigo.eddy",
"mode": "float"
},
{
"wmClass": "Conky",
"mode": "float"
},
{
"wmClass": "Gnome-initial-setup",
"mode": "float"
},
{
"wmClass": "org.gnome.Calculator",
"mode": "float"
},
{
"wmClass": "gnome-terminal-preferences",
"mode": "float"
},
{
"wmClass": "Guake",
"mode": "float"
},
{
"wmClass": "zoom",
"mode": "float"
},
{
"wmClass": "mpv",
"mode": "float"
},
{
"wmClass": "Bitwarden",
"mode": "float"
},
{
"wmClass": "Hidamari",
"mode": "float"
},
{
"wmClass": "com.mattjakeman.ExtensionManager",
"mode": "float"
},
{
"wmClass": "Cider",
"mode": "float"
},
{
"wmClass": "Ulauncher",
"mode": "float"
},
{
"wmClass": "com.nextcloud.desktopclient.nextcloud",
"mode": "float"
},
{
"wmClass": "Emulator",
"mode": "float"
}
]
}

View File

@@ -0,0 +1,72 @@
{
"overrides": [
{
"wmClass": "jetbrains-toolbox",
"mode": "float"
},
{
"wmClass": "Com.github.amezin.ddterm",
"mode": "float"
},
{
"wmClass": "Com.github.donadigo.eddy",
"mode": "float"
},
{
"wmClass": "Conky",
"mode": "float"
},
{
"wmClass": "Gnome-initial-setup",
"mode": "float"
},
{
"wmClass": "org.gnome.Calculator",
"mode": "float"
},
{
"wmClass": "gnome-terminal-preferences",
"mode": "float"
},
{
"wmClass": "Guake",
"mode": "float"
},
{
"wmClass": "zoom",
"mode": "float"
},
{
"wmClass": "mpv",
"mode": "float"
},
{
"wmClass": "Bitwarden",
"mode": "float"
},
{
"wmClass": "Hidamari",
"mode": "float"
},
{
"wmClass": "com.mattjakeman.ExtensionManager",
"mode": "float"
},
{
"wmClass": "Cider",
"mode": "float"
},
{
"wmClass": "Ulauncher",
"mode": "float"
},
{
"wmClass": "com.nextcloud.desktopclient.nextcloud",
"mode": "float"
},
{
"wmClass": "Emulator",
"mode": "float"
}
]
}

View File

@@ -0,0 +1,72 @@
{
"overrides": [
{
"wmClass": "jetbrains-toolbox",
"mode": "float"
},
{
"wmClass": "Com.github.amezin.ddterm",
"mode": "float"
},
{
"wmClass": "Com.github.donadigo.eddy",
"mode": "float"
},
{
"wmClass": "Conky",
"mode": "float"
},
{
"wmClass": "Gnome-initial-setup",
"mode": "float"
},
{
"wmClass": "org.gnome.Calculator",
"mode": "float"
},
{
"wmClass": "gnome-terminal-preferences",
"mode": "float"
},
{
"wmClass": "Guake",
"mode": "float"
},
{
"wmClass": "zoom",
"mode": "float"
},
{
"wmClass": "mpv",
"mode": "float"
},
{
"wmClass": "Bitwarden",
"mode": "float"
},
{
"wmClass": "Hidamari",
"mode": "float"
},
{
"wmClass": "com.mattjakeman.ExtensionManager",
"mode": "float"
},
{
"wmClass": "Cider",
"mode": "float"
},
{
"wmClass": "Ulauncher",
"mode": "float"
},
{
"wmClass": "com.nextcloud.desktopclient.nextcloud",
"mode": "float"
},
{
"wmClass": "Emulator",
"mode": "float"
}
]
}

View File

@@ -0,0 +1,72 @@
{
"overrides": [
{
"wmClass": "jetbrains-toolbox",
"mode": "float"
},
{
"wmClass": "Com.github.amezin.ddterm",
"mode": "float"
},
{
"wmClass": "Com.github.donadigo.eddy",
"mode": "float"
},
{
"wmClass": "Conky",
"mode": "float"
},
{
"wmClass": "Gnome-initial-setup",
"mode": "float"
},
{
"wmClass": "org.gnome.Calculator",
"mode": "float"
},
{
"wmClass": "gnome-terminal-preferences",
"mode": "float"
},
{
"wmClass": "Guake",
"mode": "float"
},
{
"wmClass": "zoom",
"mode": "float"
},
{
"wmClass": "mpv",
"mode": "float"
},
{
"wmClass": "Bitwarden",
"mode": "float"
},
{
"wmClass": "Hidamari",
"mode": "float"
},
{
"wmClass": "com.mattjakeman.ExtensionManager",
"mode": "float"
},
{
"wmClass": "Cider",
"mode": "float"
},
{
"wmClass": "Ulauncher",
"mode": "float"
},
{
"wmClass": "com.nextcloud.desktopclient.nextcloud",
"mode": "float"
},
{
"wmClass": "Emulator",
"mode": "float"
}
]
}

View File

@@ -0,0 +1,72 @@
{
"overrides": [
{
"wmClass": "jetbrains-toolbox",
"mode": "float"
},
{
"wmClass": "Com.github.amezin.ddterm",
"mode": "float"
},
{
"wmClass": "Com.github.donadigo.eddy",
"mode": "float"
},
{
"wmClass": "Conky",
"mode": "float"
},
{
"wmClass": "Gnome-initial-setup",
"mode": "float"
},
{
"wmClass": "org.gnome.Calculator",
"mode": "float"
},
{
"wmClass": "gnome-terminal-preferences",
"mode": "float"
},
{
"wmClass": "Guake",
"mode": "float"
},
{
"wmClass": "zoom",
"mode": "float"
},
{
"wmClass": "mpv",
"mode": "float"
},
{
"wmClass": "Bitwarden",
"mode": "float"
},
{
"wmClass": "Hidamari",
"mode": "float"
},
{
"wmClass": "com.mattjakeman.ExtensionManager",
"mode": "float"
},
{
"wmClass": "Cider",
"mode": "float"
},
{
"wmClass": "Ulauncher",
"mode": "float"
},
{
"wmClass": "com.nextcloud.desktopclient.nextcloud",
"mode": "float"
},
{
"wmClass": "Emulator",
"mode": "float"
}
]
}

View File

@@ -0,0 +1,72 @@
{
"overrides": [
{
"wmClass": "jetbrains-toolbox",
"mode": "float"
},
{
"wmClass": "Com.github.amezin.ddterm",
"mode": "float"
},
{
"wmClass": "Com.github.donadigo.eddy",
"mode": "float"
},
{
"wmClass": "Conky",
"mode": "float"
},
{
"wmClass": "Gnome-initial-setup",
"mode": "float"
},
{
"wmClass": "org.gnome.Calculator",
"mode": "float"
},
{
"wmClass": "gnome-terminal-preferences",
"mode": "float"
},
{
"wmClass": "Guake",
"mode": "float"
},
{
"wmClass": "zoom",
"mode": "float"
},
{
"wmClass": "mpv",
"mode": "float"
},
{
"wmClass": "Bitwarden",
"mode": "float"
},
{
"wmClass": "Hidamari",
"mode": "float"
},
{
"wmClass": "com.mattjakeman.ExtensionManager",
"mode": "float"
},
{
"wmClass": "Cider",
"mode": "float"
},
{
"wmClass": "Ulauncher",
"mode": "float"
},
{
"wmClass": "com.nextcloud.desktopclient.nextcloud",
"mode": "float"
},
{
"wmClass": "Emulator",
"mode": "float"
}
]
}

View File

@@ -0,0 +1,72 @@
{
"overrides": [
{
"wmClass": "jetbrains-toolbox",
"mode": "float"
},
{
"wmClass": "Com.github.amezin.ddterm",
"mode": "float"
},
{
"wmClass": "Com.github.donadigo.eddy",
"mode": "float"
},
{
"wmClass": "Conky",
"mode": "float"
},
{
"wmClass": "Gnome-initial-setup",
"mode": "float"
},
{
"wmClass": "org.gnome.Calculator",
"mode": "float"
},
{
"wmClass": "gnome-terminal-preferences",
"mode": "float"
},
{
"wmClass": "Guake",
"mode": "float"
},
{
"wmClass": "zoom",
"mode": "float"
},
{
"wmClass": "Bitwarden",
"mode": "float"
},
{
"wmClass": "Hidamari",
"mode": "float"
},
{
"wmClass": "com.mattjakeman.ExtensionManager",
"mode": "float"
},
{
"wmClass": "Cider",
"mode": "float"
},
{
"wmClass": "Ulauncher",
"mode": "float"
},
{
"wmClass": "com.nextcloud.desktopclient.nextcloud",
"mode": "float"
},
{
"wmClass": "mpv",
"mode": "float"
},
{
"wmClass": "Spotify",
"mode": "float"
}
]
}

View File

@@ -0,0 +1,132 @@
.tiled {
color: rgba(236, 94, 94, 1);
opacity: 1;
border-width: 3px;
}
.split {
color: rgba(255, 246, 108, 1);
opacity: 1;
border-width: 3px;
}
.stacked {
color: rgba(247, 162, 43, 1);
opacity: 1;
border-width: 3px;
}
.tabbed {
color: rgba(17, 199, 224, 1);
opacity: 1;
border-width: 3px;
}
.floated {
color: rgba(180, 167, 214, 1);
border-width: 3px;
opacity: 1;
}
.window-tiled-border {
border-width: 4px;
border-color: rgb(130,170,255);
border-style: solid;
border-radius: 14px;
}
.window-split-border {
border-width: 4px;
border-color: rgb(130,170,255);
border-style: solid;
border-radius: 14px;
}
.window-split-horizontal {
border-left-width: 0;
border-top-width: 0;
border-bottom-width: 0;
}
.window-split-vertical {
border-left-width: 0;
border-top-width: 0;
border-right-width: 0;
}
.window-stacked-border {
border-width: 4px;
border-color: rgb(130,170,255);
border-style: solid;
border-radius: 14px;
}
.window-tabbed-border {
border-width: 4px;
border-color: rgb(130,170,255);
border-style: solid;
border-radius: 14px;
}
.window-tabbed-bg {
border-radius: 8px;
}
.window-tabbed-tab {
background-color: rgba(54, 47, 45, 1);
border-color: rgba(130,170,255,0.6);
border-width: 1px;
border-radius: 8px;
color: white;
margin: 1px;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);
}
.window-tabbed-tab-active {
background-color: rgb(130,170,255);
color: black;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);
}
.window-tabbed-tab-close {
padding: 3px;
margin: 4px;
border-radius: 16px;
width: 16px;
background-color: #e06666;
}
.window-tabbed-tab-icon {
margin: 3px;
}
.window-floated-border {
border-width: 4px;
border-color: rgb(130,170,255);
border-style: solid;
border-radius: 14px;
}
.window-tilepreview-tiled {
border-width: 1px;
border-color: rgba(130,170,255,0.3);
border-style: solid;
border-radius: 14px;
background-color: rgba(130,170,255,0.2);
}
.window-tilepreview-stacked {
border-width: 1px;
border-color: rgba(130,170,255,0.3);
border-style: solid;
border-radius: 14px;
background-color: rgba(130,170,255,0.2);
}
.window-tilepreview-tabbed {
border-width: 1px;
border-color: rgba(130,170,255,0.3);
border-style: solid;
border-radius: 14px;
background-color: rgba(130,170,255,0.2);
}

31
config/dot/ghostty/config Normal file
View File

@@ -0,0 +1,31 @@
# Theme
theme = tokyonight
font-family = "VictorMono Nerd Font Mono"
#font-family-bold = "VictorMono Nerd Font Mono, Bold"
#font-family-italic = "VictorMono Nerd Font Mono, Regular Italic"
#font-family-bold-italic = "VictorMono Nerd Font Mono, Bold Italic"
font-size = 15
background-opacity = 0.92
background-blur = true
# Keybindings
keybind = ctrl+shift+r=reload_config
## Tabs
keybind = ctrl+shift+h=previous_tab
keybind = ctrl+shift+l=next_tab
keybind = ctrl+shift+j=move_tab:-1
keybind = ctrl+shift+k=move_tab:1
keybind = ctrl+shift+q=close_tab
## Splits
keybind = ctrl+shift+b=new_split:right
keybind = ctrl+shift+d=new_split:down
keybind = ctrl+shift+,=goto_split:previous
keybind = ctrl+shift+.=goto_split:next
keybind = ctrl+shift+up=goto_split:up
keybind = ctrl+shift+down=goto_split:down
keybind = ctrl+shift+left=goto_split:left
keybind = ctrl+shift+right=goto_split:right

2238
config/dot/kitty/kitty.conf Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"LuaSnip": { "branch": "master", "commit": "5a1e39223db9a0498024a77b8441169d260c8c25" },
"avante.nvim": { "branch": "main", "commit": "7f48770e66684e9a7d4d5b9c47505a23e0167a6e" },
"avante.nvim": { "branch": "main", "commit": "f8a7cd1a606460ec0a2c4ec886bc102daccf912e" },
"barbar.nvim": { "branch": "master", "commit": "53b5a2f34b68875898f0531032fbf090e3952ad7" },
"cloak.nvim": { "branch": "main", "commit": "648aca6d33ec011dc3166e7af3b38820d01a71e4" },
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
@@ -19,7 +19,7 @@
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
"cmp-tw2css": { "branch": "main", "commit": "1abe0eebcb57fcbd5538d054f0db61f4e4a1302b" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"conform.nvim": { "branch": "master", "commit": "26c02e1155a4980900bdccabca4516f4c712aae9" },
"conform.nvim": { "branch": "master", "commit": "cde4da5c1083d3527776fee69536107d98dae6c9" },
"copilot.vim": { "branch": "release", "commit": "da369d90cfd6c396b1d0ec259836a1c7222fb2ea" },
"dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" },
"fidget.nvim": { "branch": "main", "commit": "e32b672d8fd343f9d6a76944fedb8c61d7d8111a" },
@@ -27,32 +27,32 @@
"gitsigns.nvim": { "branch": "main", "commit": "20ad4419564d6e22b189f6738116b38871082332" },
"image.nvim": { "branch": "master", "commit": "446a8a5cc7a3eae3185ee0c697732c32a5547a0b" },
"img-clip.nvim": { "branch": "main", "commit": "e7e29f0d07110405adecd576b602306a7edd507a" },
"lazy.nvim": { "branch": "main", "commit": "e6a8824858757ca9cd4f5ae1a72d845fa5c46a39" },
"lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
"lspkind.nvim": { "branch": "master", "commit": "3ddd1b4edefa425fda5a9f95a4f25578727c0bb3" },
"lualine.nvim": { "branch": "master", "commit": "3946f0122255bc377d14a59b27b609fb3ab25768" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "d7b5feb6e769e995f7fcf44d92f49f811c51d10c" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "b1d9a914b02ba5660f1e272a03314b31d4576fe2" },
"mason.nvim": { "branch": "main", "commit": "ad7146aa61dcaeb54fa900144d768f040090bff0" },
"mcphub.nvim": { "branch": "main", "commit": "8ff40b5edc649959bb7e89d25ae18e055554859a" },
"mini.icons": { "branch": "main", "commit": "ff2e4f1d29f659cc2bad0f9256f2f6195c6b2428" },
"neo-tree.nvim": { "branch": "v3.x", "commit": "8cdd6b1940f333c1dd085526a9c45b30fb2dbf50" },
"neo-tree.nvim": { "branch": "v3.x", "commit": "f3df514fff2bdd4318127c40470984137f87b62e" },
"nerdcommenter": { "branch": "master", "commit": "02a3b6455fa07b61b9440a78732f1e9b7876c991" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-autopairs": { "branch": "master", "commit": "7a2c97cccd60abc559344042fefb1d5a85b3e33b" },
"nvim-cmp": { "branch": "main", "commit": "106c4bcc053a5da783bf4a9d907b6f22485c2ea0" },
"nvim-lsp-file-operations": { "branch": "master", "commit": "9744b738183a5adca0f916527922078a965515ed" },
"nvim-lspconfig": { "branch": "master", "commit": "2010fc6ec03e2da552b4886fceb2f7bc0fc2e9c0" },
"nvim-lspconfig": { "branch": "master", "commit": "c8503e63c6afab3ed34b49865a4a4edbb1ebf4a8" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-context": { "branch": "master", "commit": "ec308c7827b5f8cb2dd0ad303a059c945dd21969" },
"nvim-treesitter-context": { "branch": "master", "commit": "660861b1849256398f70450afdf93908d28dc945" },
"nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" },
"nvim-web-devicons": { "branch": "master", "commit": "8dcb311b0c92d460fac00eac706abd43d94d68af" },
"nvim-window-picker": { "branch": "main", "commit": "6382540b2ae5de6c793d4aa2e3fe6dbb518505ec" },
"playground": { "branch": "master", "commit": "ba48c6a62a280eefb7c85725b0915e021a1a0749" },
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"render-markdown.nvim": { "branch": "main", "commit": "a1b2bf029c37397947082f31969b4aec0d1b92bd" },
"snacks.nvim": { "branch": "main", "commit": "41712e3026a6d690e3c65f83b335cb34e054d2cd" },
"render-markdown.nvim": { "branch": "main", "commit": "f58c05f349d6e7650f4b40b0df1514400f0c10de" },
"snacks.nvim": { "branch": "main", "commit": "dec29f55666f8f4545835636077a86b150faf630" },
"supermaven-nvim": { "branch": "main", "commit": "07d20fce48a5629686aefb0a7cd4b25e33947d50" },
"telescope.nvim": { "branch": "master", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
"tokyonight.nvim": { "branch": "main", "commit": "b13cfc1286d2aa8bda6ce137b79e857d5a3d5739" },
"tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" },
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
"undotree": { "branch": "master", "commit": "0f1c9816975b5d7f87d5003a19c53c6fd2ff6f7f" }
}

View File

@@ -311,11 +311,9 @@ return {
require 'mason-lspconfig'.setup({
ensure_installed = {
'angularls',
'asm_lsp',
'bacon_ls',
'bashls',
'clangd',
'cmake',
'cssls',
'css_variables',
'cssmodules_ls',
@@ -334,7 +332,6 @@ return {
'ltex_plus',
'lua_ls',
'markdown_oxide',
'nginx_language_server',
'phpactor',
'postgres_lsp',
'prismals',
@@ -343,7 +340,6 @@ return {
'remark_ls',
'rust_analyzer',
'sqlls',
'superhtml',
'svelte',
'systemd_ls',
'tailwindcss',

83
config/dot/tmux/tmux.conf Normal file
View File

@@ -0,0 +1,83 @@
# True color support (crucial for kitty + neovim)
set -g default-terminal "tmux-256color"
set -ag terminal-overrides ",xterm-256color:RGB"
# Super important for osc52, images, hyperlinks, etc.
set -g allow-passthrough on
# Enable mouse support
set -g mouse on
# Renumber windows when one is closed
set -g renumber-windows on
# Set prefix to C-Space
unbind C-b
set -g prefix C-Space
bind C-Space send-prefix
# Set status bar
#set -g status-bg pink
# Tokyo Night Moon color palette
set -g mode-style "fg=#82aaff,bg=#3b4261"
set -g message-style "fg=#82aaff,bg=#3b4261"
set -g message-command-style "fg=#82aaff,bg=#3b4261"
set -g pane-border-style "fg=#82aaff"
set -g pane-active-border-style "fg=#b172b0"
set -g status-style "fg=#b172b0,bg=#3b4261"
set -g status-bg "#222436"
set -g status-left "#[fg=#1b1d2b,bg=#b172b0,bold] #S #[fg=#1b1d2b,bg=#b172b0,nobold,nounderscore,noitalics]"
set -g status-right "#[fg=#1b1d2b,bg=#82aaff,nobold,nounderscore,noitalics]#[fg=#b172b0,bg=#3b4261] #{prefix_highlight} #[fg=#3b4261,bg=#3b4261]#[fg=#b172b0,bg=#3b4261] %Y/%m/%d %I:%M %p #[fg=#82aaff,bg=#3b4261,nobold,nounderscore,noitalics]#[fg=#1b1d2b,bg=#b172b0,bold,italics] #h "
setw -g window-status-format "#[fg=#1b1d2b,bg=#3b4261,nobold,nounderscore,noitalics]#[fg=#82aaff,bg=#3b4261] #I #W #F #[fg=#1b1d2b,bg=#3b4261,nobold,nounderscore,noitalics]"
setw -g window-status-current-format "#[fg=#1b1d2b,bg=#3b4261,nobold,nounderscore,noitalics]#[fg=#b172b0,bg=#3b4261,bold] #I #W #F #[fg=#3b4261,bg=#3b4261,nobold,nounderscore,noitalics]"
setw -g window-status-separator ""
# Increase scrollback buffer
set -g history-limit 50000
# Display tmux messages for 4 seconds
set -g display-time 4000
# Refresh status bar every 5 seconds
set -g status-interval 5
# Focus events for neovim autoread
set -g focus-events on
# Aggressive resize (useful for multi-monitor)
setw -g aggressive-resize on
# Reduce escape time (better for neovim)
set -sg escape-time 10
# Split panes using | and -
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# Reload config
bind r source-file ~/.config/tmux/tmux.conf \; display "Config reloaded!"
# Switch panes with vim keys
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# Resize panes with vim keys
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5
# Vi mode for copy mode
setw -g mode-keys vi
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel

View File

@@ -6,8 +6,4 @@ source ~/.local/share/Panama/bin/ascii
read -p "What should the hostname be? " HOST_NAME
sudo hostnamectl set-hostname $HOST_NAME
# Ensure computer doesn't go to sleep while installing
gsettings set org.gnome.desktop.screensaver lock-enabled false
gsettings set org.gnome.desktop.session idle-delay 0
for script in ~/.local/share/Panama/setup/scripts/*; do source $script; done

View File

@@ -1,7 +1,6 @@
bison
clang-analyzer
clangd
cliphist
cmake
compat-lua
composer

View File

@@ -4,15 +4,21 @@
log() { echo -e "\033[1;34m[INFO]\033[0m $*"; }
exists() { command -v "$1" >/dev/null 2>&1; }
echo -e "\n--- Installing initial packages ---\n"
# --- Defined Paths ---
PANAMA_PATH="$HOME/.local/share/Panama"
echo -e "\n--- Installing relevant packages ---\n"
# --- Update all packages ---
log "Updating all packages..."
sudo dnf update -y --refresh > /dev/null 2>&1
# --- Install all initial packages ---
PACKAGES_FILE="$HOME/.local/share/Panama/setup/packages/initial-packages"
PACKAGES_FILE="$PANAMA_PATH/setup/packages/initial-packages"
if [[ -f "$PACKAGES_FILE" ]]; then
INITIAL_PACKAGES=$(tr "\n" " " <"$PACKAGES_FILE")
log "Installing $INITIAL_PACKAGES"
sudo dnf install -y "$INITIAL_PACKAGES" > /dev/null 2>&1
log "Packages installed!"
log "Initial packages installed!"
else
log "Package list was not in specified path: $PACKAGES_FILE"
fi
@@ -40,3 +46,22 @@ else
log "Installing oh-my-posh via curl..."
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d "$LOCAL_BIN_PATH" > /dev/null 2>&1
fi
# --- Install Development Packages needed for Neovim ---
DEV_FILE="$PANAMA_PATH/setup/packages/development-packages"
if [[ -f "$DEV_FILE" ]]; then
DEV_PACKAGES=$(tr "\n" " " <"$DEV_FILE")
log "Installing $DEV_PACKAGES"
sudo dnf install -y $DEV_PACKAGES > /dev/null 2>&1
log "Development packages installed!"
else
log "Package list was not in specified path: $DEV_FILE"
fi
# --- Install Bun ---
if [[ -x "$HOME/.bun/bin/bun" ]]; then
log "Bun already installed at \"$HOME/.bun/bin/bun\""
else
log "Installing Bun via curl..."
curl -fsSL https://bun.sh/install | bash > /dev/null 2>&1
fi

View File

@@ -3,15 +3,44 @@
# Define paths as they have not been defined by new bashrc yet!
PANAMA_PATH="${PANAMA_PATH:-$HOME/.local/share/Panama}"
PANAMA_BASH="${PANAMA_BASH:-$PANAMA_PATH/config/bash}"
PANAMA_DOT="$PANAMA_PATH/config/dot"
PANAMA_OLD="$PANAMA_PATH/config/old"
CONFIG="$HOME/.config"
# Make backup folder if it doesn't exist
mkdir -p "$PANAMA_OLD"
# --- Bashrc ---
# Backup existing .bashrc if it's a regular file
if [ -f "$HOME/.bashrc" ] && [ ! -L "$HOME/.bashrc" ]; then
mv "$HOME/.bashrc" "$PANAMA_BASH/.bashrc.bak"
mv "$HOME/.bashrc" "$PANAMA_OLD/.bashrc"
fi
# Remove old symlink if it exists and points somewhere else
if [ -L "$HOME/.bashrc" ]; then
rm "$HOME/.bashrc"
fi
# Symlink Panama .bashrc file to ~/.bashrc
ln -s "$PANAMA_BASH/.bashrc" "$HOME/.bashrc"
dirs=("espanso", "forge", "ghostty", "kitty", "nvim", "tmux")
for dir in "${dirs[@]}"; do
echo "--- Setting up $dir ---"
# Remove old symlink if it exists
if [ -L "$CONFIG/$dir" ]; then
rm "$CONFIG/$dir"
echo "Removed old symlink at $CONFIG/$dir"
fi
# Backup existing directory if it exists
if [ -d "$CONFIG/$dir" ]; then
mv "$CONFIG/$dir" "$PANAMA_OLD/$dir"
echo "Moved existing $dir config to $PANAMA_OLD/$dir"
fi
# Create symlink
ln -s "$PANAMA_DOT/$dir" "$CONFIG/$dir"
echo "Linked $PANAMA_DOT/$dir → $CONFIG/$dir"
echo
done