Compare commits

...

52 Commits

Author SHA1 Message Date
020c32e8fe adds fastmail pwa via firefox to autostart
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 32s
Nix Format Check / check-format (push) Failing after 1m44s
Python Lint Check / check-python (push) Failing after 23s
2025-06-04 13:31:29 +02:00
4d90224772 Bump Zen browser version to 1.12.10b
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 32s
Nix Format Check / check-format (push) Failing after 1m42s
Python Lint Check / check-python (push) Failing after 23s
2025-06-04 12:08:03 +02:00
ef89381337 Add Zed editor settings and symlink configuration
Some checks failed
Ansible Lint Check / check-ansible (push) Has been cancelled
Nix Format Check / check-format (push) Has been cancelled
Python Lint Check / check-python (push) Has been cancelled
2025-06-04 12:07:55 +02:00
52cb2e3bc1 Update flake.lock and rotate secrets
Some checks failed
Nix Format Check / check-format (push) Failing after 1m44s
Python Lint Check / check-python (push) Failing after 23s
Ansible Lint Check / check-ansible (push) Failing after 12m18s
2025-06-03 16:03:12 +02:00
caf13e5126 Add DistroShelf, MissionCenter, and distrobox
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 36s
Nix Format Check / check-format (push) Failing after 1m27s
Python Lint Check / check-python (push) Failing after 19s
2025-05-27 17:14:52 +02:00
49c7149ed9 Add cliphist clipboard manager setup for workstations 2025-05-21 15:58:55 +02:00
30569c4019 feat: enhance flitsmeister utility with improved CSV parsing and statistics calculation
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 27s
Nix Format Check / check-format (push) Failing after 1m33s
Python Lint Check / check-python (push) Failing after 19s
2025-05-21 12:08:17 +02:00
f8d426ce1a feat: remove Zed Editor tasks from workstation setup
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 26s
Nix Format Check / check-format (push) Failing after 1m29s
Python Lint Check / check-python (push) Failing after 19s
2025-05-21 11:39:16 +02:00
7dba7b00a7 feat: add flitsmeister utility for processing flitsmeister CSV files 2025-05-21 11:39:06 +02:00
1e6bb83c21 feat: remove GCC 13 default compiler settings for Pop!_OS
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 23s
Nix Format Check / check-format (push) Failing after 1m19s
Python Lint Check / check-python (push) Failing after 17s
2025-05-20 23:46:32 +02:00
40c13563bc feat: disable ansible lightspeed features in VSCode settings 2025-05-20 23:23:38 +02:00
7aee9d0294 feat: add golang to the list of common packages in Ansible global tasks
Some checks failed
Nix Format Check / check-format (push) Failing after 1m21s
Python Lint Check / check-python (push) Failing after 22s
Ansible Lint Check / check-ansible (push) Failing after 13m41s
2025-05-20 22:20:52 +02:00
30c4c5e9f5 feat: remove Go package configuration from home-manager 2025-05-20 22:20:31 +02:00
0c186365cd feat: enhance autostart configurations and add executable permissions for desktop entries
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 28s
Nix Format Check / check-format (push) Failing after 1m26s
Python Lint Check / check-python (push) Failing after 19s
2025-05-20 21:06:49 +02:00
9752355685 feat: add autostart configurations and ignition delay scripts for various applications
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 25s
Nix Format Check / check-format (push) Failing after 1m26s
Python Lint Check / check-python (push) Failing after 18s
2025-05-20 20:40:31 +02:00
9a3affe4c1 Merge branch 'master' of git.mvl.sh:vleeuwenmenno/dotfiles
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 25s
Nix Format Check / check-format (push) Failing after 1m28s
Python Lint Check / check-python (push) Failing after 19s
2025-05-20 20:21:25 +02:00
8189d9ad4e feat: add GCC 13 configuration for Pop!_OS in .bashrc 2025-05-20 20:20:34 +02:00
cfea6dda16 Merge branch 'master' of https://git.mvl.sh/vleeuwenmenno/dotfiles
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 26s
Nix Format Check / check-format (push) Failing after 1m26s
Python Lint Check / check-python (push) Failing after 19s
2025-05-20 19:04:46 +02:00
0fd68d8460 feat: add Zed Editor installation tasks and include in workstation setup 2025-05-20 19:04:24 +02:00
f4ea1957a1 feat: update Zen browser version to 1.12.6b
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 26s
Nix Format Check / check-format (push) Failing after 1m26s
Python Lint Check / check-python (push) Failing after 19s
2025-05-20 15:46:25 +02:00
b4ec02bc31 feat: remove obsolete configuration files for Cosmic desktop environment
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 29s
Nix Format Check / check-format (push) Failing after 1m31s
Python Lint Check / check-python (push) Failing after 18s
2025-05-20 15:27:42 +02:00
e000a2fd17 feat: add configuration files for Cosmic desktop environment settings 2025-05-20 15:23:18 +02:00
a77e6e264f feat: update flake.lock with latest revisions and hashes for home-manager and nixpkgs
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 25s
Nix Format Check / check-format (push) Failing after 1m28s
Python Lint Check / check-python (push) Failing after 18s
2025-05-20 15:10:46 +02:00
86900fbe7e feat: update desired Flatpak packages by adding new entries and removing obsolete ones 2025-05-20 15:10:40 +02:00
880be26270 feat: add task to purge LibreOffice and related packages 2025-05-20 15:10:30 +02:00
bc930e6f42 feat: remove bottom package from system monitoring tools 2025-05-20 15:08:49 +02:00
9fce8e4968 feat: remove Ptyxis terminal keybinding and associated settings 2025-05-20 15:08:41 +02:00
39772b7943 feat: remove ptyxis terminal emulator and vscodium from package list 2025-05-20 15:08:29 +02:00
5041d64a39 feat: remove trash-cli from package installation and update VSCode icon theme to vscode-icons
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 28s
Nix Format Check / check-format (push) Failing after 1m29s
Python Lint Check / check-python (push) Failing after 18s
2025-05-20 14:22:23 +02:00
21c4b17f76 adds popos compatibility
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 36s
Nix Format Check / check-format (push) Failing after 1m26s
Python Lint Check / check-python (push) Failing after 20s
2025-05-19 15:27:46 +02:00
ea41c83161 feat: separate hoarder.mvl.sh redirection from karakeep service configuration
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 24s
Nix Format Check / check-format (push) Successful in 1m21s
Python Lint Check / check-python (push) Failing after 18s
2025-05-13 17:25:40 +02:00
afa538af9a feat: disable arr-stack service in server configuration
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 24s
Python Lint Check / check-python (push) Failing after 20s
Nix Format Check / check-format (push) Failing after 11m59s
2025-05-13 16:45:56 +02:00
3d46ae4e6e feat: update reverse proxy for jellyseerr to point to mennos-server on port 5555 2025-05-13 16:45:49 +02:00
5e4e5f6431 feat: update karakeep service configuration and image version; adjust Caddyfile for reverse proxy
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 30s
Nix Format Check / check-format (push) Has been cancelled
Python Lint Check / check-python (push) Has been cancelled
2025-05-13 16:43:38 +02:00
1511fc06f7 feat: update Zen browser version to 1.12.3b; change default browser to Firefox in dconf and default apps configuration
Some checks failed
Ansible Lint Check / check-ansible (push) Waiting to run
Nix Format Check / check-format (push) Successful in 1m32s
Python Lint Check / check-python (push) Failing after 22s
2025-05-13 16:40:51 +02:00
c16da14152 feat: add gaming-graphics-core22, beekeeper-studio, and steam to desired Snap packages; update flake.lock with new nixpkgs revision
Some checks failed
Nix Format Check / check-format (push) Successful in 1m26s
Ansible Lint Check / check-ansible (push) Failing after 23s
Python Lint Check / check-python (push) Failing after 17s
2025-04-29 11:39:10 +02:00
5465b13ef9 feat: update .bashrc for GPU configuration and add Miniconda to PATH; remove unused packages from Nix configuration
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 27s
Nix Format Check / check-format (push) Successful in 1m24s
Python Lint Check / check-python (push) Failing after 19s
2025-04-29 11:24:31 +02:00
1f1c069da9 feat: remove Ulauncher configuration and related tasks from setup
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 22s
Nix Format Check / check-format (push) Successful in 1m19s
Python Lint Check / check-python (push) Failing after 17s
2025-04-28 10:41:17 +02:00
07887196f4 feat: remove VSCode tasks from workstation setup
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 22s
Nix Format Check / check-format (push) Successful in 1m21s
Python Lint Check / check-python (push) Failing after 18s
2025-04-28 10:38:32 +02:00
d6b88fad01 feat: update VSCode settings for icon theme and add remote platform configuration
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 24s
Nix Format Check / check-format (push) Has been cancelled
Python Lint Check / check-python (push) Has been cancelled
2025-04-28 10:37:57 +02:00
39047218ff feat: rename hoarder to karakeep 2025-04-28 10:37:41 +02:00
e87720ac2d feat: update git tags for Pano Clipboard Manager and Tiling Shell extensions 2025-04-28 10:37:20 +02:00
b92c9f7d7b feat: add 'code' snap to desired snaps and remove VSCode installation tasks 2025-04-28 10:37:05 +02:00
10c7ce4619 feat: update flake.lock with latest nixpkgs and home-manager revisions
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 1m5s
Nix Format Check / check-format (push) Successful in 1m21s
Python Lint Check / check-python (push) Failing after 17s
2025-04-28 10:17:11 +02:00
d3cc82843f feat: update Zen browser version to 1.11.5b 2025-04-28 10:17:00 +02:00
fd54b256a1 feat: update protected system snaps to include core24 and chromium 2025-04-28 10:16:56 +02:00
beb4bc1db6 feat: add Quick Settings Tweaks installation 2025-04-28 10:16:50 +02:00
ac4d0622da feat: remove NodeJS aliases and add pnpm to PATH if available
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 14s
Nix Format Check / check-format (push) Successful in 47s
Python Lint Check / check-python (push) Failing after 10s
2025-04-02 14:16:51 +02:00
ad271fe57b feat: update Caddyfile to add redirection from photos.vleeuwen.me to photos.mvl.sh
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 14s
Nix Format Check / check-format (push) Successful in 55s
Python Lint Check / check-python (push) Failing after 11s
2025-04-02 02:27:25 +02:00
0026a6d8dc feat: enable format on save and type for Nix files in VSCode settings
Some checks failed
Ansible Lint Check / check-ansible (push) Failing after 17s
Nix Format Check / check-format (push) Successful in 44s
Python Lint Check / check-python (push) Failing after 9s
2025-04-02 01:46:57 +02:00
dc0aae414e feat: update default theme to Yaru-dark and set Nemo as the default file manager 2025-04-02 01:46:52 +02:00
e9a558e3fc feat: add nemo-desktop to auto-start options 2025-04-02 01:46:42 +02:00
67 changed files with 997 additions and 459 deletions

28
.bashrc
View File

@ -3,6 +3,19 @@ HISTFILE=~/.bash_history
HISTSIZE=1000
HISTFILESIZE=2000 # Adjusted to match both histfile and size criteria
# GPU Related shenanigans
if [ "$(hostname)" = "mennos-desktop" ]; then
export DRI_PRIME=1
export MESA_VK_DEVICE_SELECT=1002:744c
fi
if [ -f /etc/os-release ]; then
distro=$(awk -F= '/^NAME/{print $ssss2}' /etc/os-release | tr -d '"')
if [[ "$distro" == *"Pop!_OS"* ]]; then
export CGO_CFLAGS="-I/usr/include"
fi
fi
# Docker Compose Alias (Mostly for old shell scripts)
alias docker-compose='docker compose'
@ -21,7 +34,6 @@ alias la='l -a'
alias cat='bat'
alias du='dust'
alias df='duf'
alias rm="trash-put"
alias augp='sudo apt update && sudo apt upgrade -y && sudo apt autopurge -y && sudo apt autoclean'
# Docker Aliases
@ -51,10 +63,6 @@ alias gcm='git commit -m'
alias gco='git checkout'
alias gcb='git checkout -b'
# NodeJS aliases
alias node='node-20'
alias npm='npm-20'
# Kubernetes aliases (Minikube)
alias kubectl="minikube kubectl --"
@ -75,6 +83,14 @@ export PATH=$PATH:$HOME/.local/bin
export PATH=$PATH:$HOME/.cargo/bin
export PATH=$PATH:$DOTFILES_PATH/bin
# Include pnpm if it exists
if [ -d "$HOME/.local/share/pnpm" ]; then
export PATH=$PATH:$HOME/.local/share/pnpm
fi
# Miniconda
export PATH="$HOME/miniconda3/bin:$PATH"
# In case $HOME/.flutter/flutter/bin is found, we can add it to the PATH
if [ -d "$HOME/.flutter/flutter/bin" ]; then
export PATH=$PATH:$HOME/.flutter/flutter/bin
@ -139,7 +155,7 @@ fi
# Source ble.sh if it exists
if [[ -f "${HOME}/.nix-profile/share/blesh/ble.sh" ]]; then
source "${HOME}/.nix-profile/share/blesh/ble.sh"
# Custom function for fzf history search
function fzf_history_search() {
local selected

View File

@ -56,7 +56,7 @@ def main():
apps = {
"vesktop": "vesktop",
"ktailctl": "flatpak run org.fkoehler.KTailctl",
"ulauncher": "ulauncher --no-window-shadow --hide-window",
"nemo-desktop": "nemo-desktop",
}
# Clean up dead sessions if any

View File

@ -1,5 +1,6 @@
[workstations]
mennos-laptop ansible_connection=local
mennos-cosmic-laptop ansible_connection=local
mennos-desktop ansible_connection=local
[servers]

View File

@ -12,7 +12,7 @@
- name: Include workstation tasks
ansible.builtin.import_tasks: tasks/workstations/workstation.yml
when: hostname in ['mennos-laptop', 'mennos-desktop']
when: hostname in ['mennos-laptop', 'mennos-cosmic-laptop', 'mennos-desktop']
- name: Include server tasks
ansible.builtin.import_tasks: tasks/servers/server.yml

View File

@ -36,7 +36,6 @@
name:
- git
- vim
- trash-cli
- curl
- wget
- httpie
@ -48,6 +47,8 @@
- black
# Package manager wrapper
- nala
# Go
- golang
state: present
become: true

View File

@ -28,6 +28,7 @@
gitconfig_mapping:
mennos-desktop: "$DOTFILES_PATH/config/git/gitconfig.linux"
mennos-laptop: "$DOTFILES_PATH/config/git/gitconfig.linux"
mennos-cosmic-laptop: "$DOTFILES_PATH/config/git/gitconfig.linux"
mennos-server: "$DOTFILES_PATH/config/git/gitconfig.mennos-server"
mennos-cloud-server: "$DOTFILES_PATH/config/git/gitconfig.mennos-server"
mennos-vm: "$DOTFILES_PATH/config/git/gitconfig.mennos-server"
@ -45,6 +46,7 @@
authorized_keys_mapping:
mennos-desktop: "$DOTFILES_PATH/config/ssh/authorized_keys/mennos-desktop"
mennos-laptop: "$DOTFILES_PATH/config/ssh/authorized_keys/mennos-laptop"
mennos-cosmic-laptop: "$DOTFILES_PATH/config/ssh/authorized_keys/mennos-laptop"
mennos-server: "$DOTFILES_PATH/config/ssh/authorized_keys/mennos-server"
mennos-cloud-server: "$DOTFILES_PATH/config/ssh/authorized_keys/mennos-server"
mennos-vm: "$DOTFILES_PATH/config/ssh/authorized_keys/mennos-server"

View File

@ -0,0 +1,328 @@
package main
import (
"encoding/csv"
"flag"
"fmt"
"math"
"os"
"sort"
"strconv"
"strings"
"time"
)
type Trip struct {
StartTime time.Time
EndTime time.Time
StartAddr string
EndAddr string
KMStart float64
KMEnd float64
Distance float64
License string
BusinessCost float64
Type string
}
type MonthStats struct {
TotalKM float64
Trips int
Longest float64
Shortest float64
TotalDuration time.Duration
LongestGap time.Duration
OdoAnomalies int
AvgSpeed float64
AvgTripDuration time.Duration
FuelCost float64
}
func main() {
fuelPrice := flag.Float64("fuelprice", 0, "Fuel price per liter (EUR)")
fuelEfficiency := flag.Float64("efficiency", 0, "Fuel efficiency (km per liter)")
lPer100km := flag.Float64("lper100km", 0, "Fuel consumption (liters per 100km)")
flag.Parse()
if len(flag.Args()) < 1 {
fmt.Println("Usage: go run main.go -fuelprice <price> [-efficiency <km/l> | -lper100km <l/100km>] <filename.csv>")
flag.PrintDefaults()
return
}
// Convert l/100km to km/l if provided
finalEfficiency := *fuelEfficiency
if *lPer100km > 0 {
finalEfficiency = 100.0 / *lPer100km
}
file, err := os.Open(flag.Arg(0))
if err != nil {
panic(err)
}
defer file.Close()
reader := csv.NewReader(file)
reader.Comma = ','
records, err := reader.ReadAll()
if err != nil {
panic(err)
}
dutchMonths := map[string]string{
"januari": "January", "februari": "February", "maart": "March",
"april": "April", "mei": "May", "juni": "June", "juli": "July",
"augustus": "August", "september": "September", "oktober": "October",
"november": "November", "december": "December",
}
tripsByMonth := make(map[string][]Trip)
startAddrCount := make(map[string]int)
endAddrCount := make(map[string]int)
fuelEnabled := *fuelPrice > 0 && finalEfficiency > 0
// Parse CSV
for _, record := range records[1:] {
if len(record) < 13 {
continue
}
// Parse start time
startTime, err := parseDutchTime(record[1], dutchMonths)
if err != nil {
continue
}
// Parse end time
endTime, err := parseDutchTime(record[2], dutchMonths)
if err != nil {
continue
}
// Parse distance data
kmStart, _ := strconv.ParseFloat(strings.ReplaceAll(record[5], ",", ""), 64)
kmEnd, _ := strconv.ParseFloat(strings.ReplaceAll(record[6], ",", ""), 64)
distance, _ := strconv.ParseFloat(strings.ReplaceAll(record[7], ",", ""), 64)
trip := Trip{
StartTime: startTime,
EndTime: endTime,
StartAddr: record[3],
EndAddr: record[4],
KMStart: kmStart,
KMEnd: kmEnd,
Distance: distance,
License: record[8],
BusinessCost: parseFloat(record[11]),
Type: strings.TrimSpace(record[12]),
}
monthKey := fmt.Sprintf("%d-%02d", startTime.Year(), startTime.Month())
tripsByMonth[monthKey] = append(tripsByMonth[monthKey], trip)
startAddrCount[trip.StartAddr]++
endAddrCount[trip.EndAddr]++
}
// Calculate stats
months := sortedKeys(tripsByMonth)
statsByMonth := calculateStats(tripsByMonth, fuelEnabled, *fuelPrice, finalEfficiency)
// Print results
printMainTable(statsByMonth, months, fuelEnabled, tripsByMonth)
printTopAddresses(startAddrCount, endAddrCount)
}
func parseDutchTime(datetime string, monthMap map[string]string) (time.Time, error) {
parts := strings.Split(datetime, " ")
if len(parts) < 4 {
return time.Time{}, fmt.Errorf("invalid time format")
}
engMonth, ok := monthMap[strings.ToLower(parts[1])]
if !ok {
return time.Time{}, fmt.Errorf("unknown month")
}
timeStr := fmt.Sprintf("%s %s %s %s", parts[0], engMonth, parts[2], parts[3])
return time.Parse("2 January 2006 15:04", timeStr)
}
func calculateStats(tripsByMonth map[string][]Trip, fuelEnabled bool, fuelPrice, fuelEfficiency float64) map[string]MonthStats {
stats := make(map[string]MonthStats)
for month, trips := range tripsByMonth {
var s MonthStats
var prevEnd time.Time
var longestGap time.Duration
sumSpeed := 0.0
speedCount := 0
sort.Slice(trips, func(i, j int) bool {
return trips[i].StartTime.Before(trips[j].StartTime)
})
for i, t := range trips {
s.TotalKM += t.Distance
s.Trips++
duration := t.EndTime.Sub(t.StartTime)
s.TotalDuration += duration
if duration.Hours() > 0 {
sumSpeed += t.Distance / duration.Hours()
speedCount++
}
if t.Distance > s.Longest {
s.Longest = t.Distance
}
if t.Distance < s.Shortest || s.Shortest == 0 {
s.Shortest = t.Distance
}
if i > 0 {
gap := t.StartTime.Sub(prevEnd)
if gap > longestGap {
longestGap = gap
}
if math.Abs(trips[i-1].KMEnd-t.KMStart) > 0.01 {
s.OdoAnomalies++
}
}
prevEnd = t.EndTime
}
s.LongestGap = longestGap
if speedCount > 0 {
s.AvgSpeed = sumSpeed / float64(speedCount)
} else {
s.AvgSpeed = 0
}
if s.Trips > 0 {
s.AvgTripDuration = time.Duration(int64(s.TotalDuration) / int64(s.Trips))
}
if fuelEnabled {
s.FuelCost = (s.TotalKM / fuelEfficiency) * fuelPrice
}
stats[month] = s
}
return stats
}
func printMainTable(stats map[string]MonthStats, months []string, fuelEnabled bool, tripsByMonth map[string][]Trip) {
fmt.Println("\n=== Monthly Driving Overview ===")
headers := []string{"Month", "Total", "Trips", "AvgKM", "Longest", "Shortest",
"DriveTime", "AvgTripDur", "OdoErr", "AvgSpeed"}
format := "%-10s | %-16s | %-7s | %-14s | %-24s | %-26s | %-18s | %-18s | %-10s | %-18s"
if fuelEnabled {
headers = append(headers, "Fuel Cost (EUR)")
format += " | %-18s"
}
fmt.Printf(format+"\n", toInterfaceSlice(headers)...) // print header
fmt.Println(strings.Repeat("-", 180))
for _, month := range months {
s := stats[month]
trips := tripsByMonth[month]
// Find longest and shortest trip durations
var longestDur, shortestDur time.Duration
var longestDist, shortestDist float64
if len(trips) > 0 {
for i, t := range trips {
dur := t.EndTime.Sub(t.StartTime)
if t.Distance > longestDist || i == 0 {
longestDist = t.Distance
longestDur = dur
}
if t.Distance < shortestDist || i == 0 {
shortestDist = t.Distance
shortestDur = dur
}
}
}
row := []interface{}{
month,
fmt.Sprintf("%.2f Km", s.TotalKM),
fmt.Sprintf("%d", s.Trips),
fmt.Sprintf("%.2f Km", safeDiv(s.TotalKM, float64(s.Trips))),
fmt.Sprintf("%.2f Km (%s)", longestDist, fmtDuration(longestDur)),
fmt.Sprintf("%.2f Km (%s)", shortestDist, fmtDuration(shortestDur)),
fmtDuration(s.TotalDuration),
fmtDuration(s.AvgTripDuration),
fmt.Sprintf("%d", s.OdoAnomalies),
fmt.Sprintf("%.2f Km/h", s.AvgSpeed),
}
if fuelEnabled {
row = append(row, fmt.Sprintf("%.2f EUR", s.FuelCost))
}
fmt.Printf(format+"\n", row...)
}
}
func toInterfaceSlice(strs []string) []interface{} {
res := make([]interface{}, len(strs))
for i, v := range strs {
res[i] = v
}
return res
}
func printTopAddresses(start, end map[string]int) {
fmt.Println("\n=== Frequent Locations ===")
fmt.Println("Top 3 Start Addresses:")
printTopN(start, 3)
fmt.Println("\nTop 3 End Addresses:")
printTopN(end, 3)
}
// Helper functions (safeDiv, fmtDuration, printTopN) remain unchanged from previous version
// [Include the helper functions from previous script here]
func safeDiv(a, b float64) float64 {
if b == 0 {
return 0
}
return a / b
}
func fmtDuration(d time.Duration) string {
h := int(d.Hours())
m := int(d.Minutes()) % 60
return fmt.Sprintf("%02dh%02dm", h, m)
}
func printTopN(counter map[string]int, n int) {
type kv struct {
Key string
Value int
}
var sorted []kv
for k, v := range counter {
sorted = append(sorted, kv{k, v})
}
sort.Slice(sorted, func(i, j int) bool { return sorted[i].Value > sorted[j].Value })
for i := 0; i < n && i < len(sorted); i++ {
fmt.Printf("%d. %s (%d)\n", i+1, sorted[i].Key, sorted[i].Value)
}
}
func sortedKeys(m map[string][]Trip) []string {
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
return keys
}
func parseFloat(s string) float64 {
f, _ := strconv.ParseFloat(strings.ReplaceAll(s, ",", ""), 64)
return f
}

View File

@ -17,7 +17,7 @@
services:
- name: caddy
enabled: true
- name: hoarder
- name: karakeep
enabled: true
- name: golink
enabled: true
@ -38,7 +38,7 @@
- name: beszel
enabled: true
- name: arr-stack
enabled: true
enabled: false
- name: downloaders
enabled: true
- name: wireguard

View File

@ -1,13 +1,22 @@
photos.vleeuwen.me photos.mvl.sh {
photos.mvl.sh {
reverse_proxy immich:2283
tls {{ caddy_email }}
}
hoarder.mvl.sh {
reverse_proxy hoarder:3000
photos.vleeuwen.me {
redir https://photos.mvl.sh{uri}
tls {{ caddy_email }}
}
karakeep.mvl.sh {
reverse_proxy karakeep:3000
tls {{ caddy_email }}
}
hoarder.mvl.sh {
redir https://karakeep.mvl.sh{uri}
}
git.vleeuwen.me git.mvl.sh {
reverse_proxy gitea:3000
tls {{ caddy_email }}
@ -49,7 +58,7 @@ df.mvl.sh {
}
overseerr.mvl.sh jellyseerr.mvl.sh overseerr.vleeuwen.me jellyseerr.vleeuwen.me {
reverse_proxy jellyseerr:5055
reverse_proxy mennos-server:5555
tls {{ caddy_email }}
}

View File

@ -1,40 +0,0 @@
---
- name: Deploy Hoarder service
block:
- name: Set Hoarder directories
ansible.builtin.set_fact:
hoarder_data_dir: "/mnt/object_storage/services/hoarder"
hoarder_service_dir: "{{ ansible_env.HOME }}/services/hoarder"
- name: Create Hoarder directories
ansible.builtin.file:
path: "{{ hoarder_dir }}"
state: directory
mode: "0755"
loop:
- "{{ hoarder_data_dir }}"
- "{{ hoarder_service_dir }}"
loop_control:
loop_var: hoarder_dir
- name: Deploy Hoarder docker-compose.yml
ansible.builtin.template:
src: docker-compose.yml.j2
dest: "{{ hoarder_service_dir }}/docker-compose.yml"
mode: "0644"
register: hoarder_compose
- name: Deploy Hoarder .env
ansible.builtin.template:
src: dotenv.j2
dest: "{{ hoarder_service_dir }}/.env"
mode: "0644"
register: hoarder_compose
- name: Stop Hoarder service
ansible.builtin.command: docker compose -f "{{ hoarder_service_dir }}/docker-compose.yml" down --remove-orphans
when: hoarder_compose.changed
- name: Start Hoarder service
ansible.builtin.command: docker compose -f "{{ hoarder_service_dir }}/docker-compose.yml" up -d
when: hoarder_compose.changed

View File

@ -1,15 +1,15 @@
services:
hoarder:
image: ghcr.io/hoarder-app/hoarder:${HOARDER_VERSION:-release}
karakeep:
image: ghcr.io/karakeep-app/karakeep:${KARAKEEP_VERSION:-release}
restart: unless-stopped
volumes:
- {{ hoarder_data_dir }}/hoarder:/data
- {{ karakeep_data_dir }}/karakeep:/data
ports:
- 3500:3000
env_file:
- .env
networks:
- hoarder
- karakeep
- caddy_network
chrome:
@ -23,20 +23,20 @@ services:
- --remote-debugging-port=9222
- --hide-scrollbars
networks:
- hoarder
- karakeep
meilisearch:
image: getmeili/meilisearch:v1.11.1
image: getmeili/meilisearch:v1.13.3
restart: unless-stopped
env_file:
- .env
volumes:
- {{ hoarder_data_dir }}/meilisearch:/meili_data
- {{ karakeep_data_dir }}/meilisearch:/meili_data
networks:
- hoarder
- karakeep
networks:
hoarder:
karakeep:
caddy_network:
external: true
name: caddy_default

View File

@ -1,4 +1,4 @@
HOARDER_VERSION=release
KARAKEEP_VERSION=release
MEILI_NO_ANALYTICS=true
MEILI_ADDR=http://meilisearch:7700

View File

@ -0,0 +1,40 @@
---
- name: Deploy Karakeep service
block:
- name: Set Karakeep directories
ansible.builtin.set_fact:
karakeep_data_dir: "/mnt/object_storage/services/karakeep"
karakeep_service_dir: "{{ ansible_env.HOME }}/services/karakeep"
- name: Create Karakeep directories
ansible.builtin.file:
path: "{{ karakeep_dir }}"
state: directory
mode: "0755"
loop:
- "{{ karakeep_data_dir }}"
- "{{ karakeep_service_dir }}"
loop_control:
loop_var: karakeep_dir
- name: Deploy Karakeep docker-compose.yml
ansible.builtin.template:
src: docker-compose.yml.j2
dest: "{{ karakeep_service_dir }}/docker-compose.yml"
mode: "0644"
register: karakeep_compose
- name: Deploy Karakeep .env
ansible.builtin.template:
src: dotenv.j2
dest: "{{ karakeep_service_dir }}/.env"
mode: "0644"
register: karakeep_compose
- name: Stop Karakeep service
ansible.builtin.command: docker compose -f "{{ karakeep_service_dir }}/docker-compose.yml" down --remove-orphans
when: karakeep_compose.changed
- name: Start Karakeep service
ansible.builtin.command: docker compose -f "{{ karakeep_service_dir }}/docker-compose.yml" up -d
when: karakeep_compose.changed

View File

@ -0,0 +1,6 @@
# Mark all files under the real autostart source as executable
- name: Mark all files under dotfiles autostart as executable
ansible.builtin.file:
path: "{{ lookup('env', 'DOTFILES_PATH') }}/config/autostart"
mode: "u+x,g+x,o+x"
recurse: true

View File

@ -0,0 +1,41 @@
---
- name: Ensure wl-clipboard and cliphist are installed
become: true
package:
name:
- wl-clipboard
- cliphist
- wofi
state: present
- name: Create systemd user service for cliphist
become: false
copy:
dest: "{{ ansible_env.HOME }}/.config/systemd/user/cliphist-store.service"
mode: "0644"
content: |
[Unit]
Description=Store clipboard history with cliphist
[Service]
ExecStart=/usr/bin/sh -c 'wl-paste --watch cliphist store'
Restart=on-failure
[Install]
WantedBy=default.target
- name: Reload systemd user daemon
become: false
systemd:
daemon_reload: yes
scope: user
# TO ENABLE READING, ADD A KEYBOARD SHORTCUT SOMEWHERE IN YOUR WM CONFIGURATION
# cliphist list | wofi -S dmenu | cliphist decode | wl-copy
- name: Enable and start cliphist-store service
become: false
systemd:
name: cliphist-store.service
enabled: yes
state: started
scope: user

View File

@ -32,9 +32,9 @@
ansible.builtin.set_fact:
desired_system_flatpaks:
# GNOME Software
- org.gnome.Extensions
- org.gnome.Weather
- org.gnome.Sudoku
- "{{ 'org.gnome.Extensions' if (ansible_facts.env.XDG_CURRENT_DESKTOP is defined and 'GNOME' in ansible_facts.env.XDG_CURRENT_DESKTOP) else omit }}"
- "{{ 'org.gnome.Weather' if (ansible_facts.env.XDG_CURRENT_DESKTOP is defined and 'GNOME' in ansible_facts.env.XDG_CURRENT_DESKTOP) else omit }}"
- "{{ 'org.gnome.Sudoku' if (ansible_facts.env.XDG_CURRENT_DESKTOP is defined and 'GNOME' in ansible_facts.env.XDG_CURRENT_DESKTOP) else omit }}"
# Games
- io.github.openhv.OpenHV
@ -48,11 +48,18 @@
- com.spotify.Client
- com.plexamp.Plexamp
- tv.plex.PlexDesktop
- io.bassi.Amberol
# Messaging
- org.telegram.desktop
- org.signal.Signal
- com.rtosta.zapzap
- io.github.equicord.equibop
# Utilities
- com.ranfdev.DistroShelf
- io.missioncenter.MissionCenter
- io.gitlab.elescoute.spacelaunch
- org.fkoehler.KTailctl
- de.haeckerfelix.AudioSharing
- com.usebottles.bottles
- com.github.tchx84.Flatseal
- com.github.wwmm.easyeffects
@ -63,10 +70,9 @@
- net.davidotek.pupgui2
- com.mastermindzh.tidal-hifi
- io.github.flattool.Warehouse
- io.github.johannesboehler2.BmiCalculator
- io.github.nokse22.Exhibit
- net.nokyan.Resources
- dev.zed.Zed
- page.tesk.Refine
- io.github.flattool.Ignition
- io.github.bytezz.IPLookup
- org.gaphor.Gaphor
@ -95,11 +101,11 @@
name: "{{ item }}"
state: present
method: system
loop: "{{ desired_system_flatpaks }}"
loop: "{{ desired_system_flatpaks | reject('equalto', omit) | list }}"
- name: Remove undesired system Flatpaks
community.general.flatpak:
name: "{{ item }}"
state: absent
method: system
loop: "{{ installed_system_flatpaks.stdout_lines | difference(desired_system_flatpaks) }}"
loop: "{{ installed_system_flatpaks.stdout_lines | difference(desired_system_flatpaks | reject('equalto', omit) | list) }}"

View File

@ -13,3 +13,6 @@
- name: Install Tiling Shell - Window Manager
ansible.builtin.import_tasks: tasks/workstations/gnome-extensions/tilingshell.yml
- name: Install Quick Settings Tweaks
ansible.builtin.import_tasks: tasks/workstations/gnome-extensions/quick-settings.yml

View File

@ -2,7 +2,7 @@
- name: Manage Pano Clipboard Manager
ansible.builtin.include_tasks: tasks/workstations/gnome-extensions/manage_gnome_extension.yml
vars:
git_tag: "v23-alpha3"
git_tag: "v23-alpha5"
ext_name: "Pano - Clipboard Manager"
ext_url: "https://github.com/oae/gnome-shell-pano/releases/download/%TAG%/pano@elhan.io.zip"
ext_id: "pano@elhan.io"

View File

@ -0,0 +1,8 @@
---
- name: Manage Quick Settings Tweaks
ansible.builtin.include_tasks: tasks/workstations/gnome-extensions/manage_gnome_extension.yml
vars:
git_tag: "2.1-stable"
ext_name: "Quick Settings Tweaks"
ext_url: "https://github.com/qwreey/quick-settings-tweaks/releases/download/2.1-stable/2.1-release.zip"
ext_id: "quick-settings-tweaks@qwreey"

View File

@ -2,7 +2,7 @@
- name: Manage Tiling Shell - Window Manager
ansible.builtin.include_tasks: tasks/workstations/gnome-extensions/manage_gnome_extension.yml
vars:
git_tag: "16.1"
git_tag: "16.3"
ext_name: "Tiling Shell - Window Manager"
ext_url: "https://github.com/domferr/tilingshell/releases/download/%TAG%/tilingshell@ferrarodomenico.com.zip"
ext_id: "tilingshell@ferrarodomenico.com"

View File

@ -0,0 +1,20 @@
---
- name: Purge LibreOffice and related packages
become: true
ansible.builtin.apt:
name:
- libreoffice*
- libreoffice-common
- libreoffice-core
- libreoffice-writer
- libreoffice-calc
- libreoffice-impress
- libreoffice-draw
- libreoffice-base
- libreoffice-math
- libreoffice-gnome
- libreoffice-gtk3
state: absent
purge: true
autoremove: true
update_cache: true

View File

@ -25,7 +25,9 @@
- core18
- core20
- core22
- core24
- bare
- chromium
- gtk-common-themes
- gnome-3-28-1804
- gnome-3-34-1804
@ -36,13 +38,14 @@
- prompting-client
- snap-store
- snapd-desktop-integration
- gaming-graphics-core22
- name: Define desired Snaps
ansible.builtin.set_fact:
desired_snaps:
- name: telegram-desktop
- name: beekeeper-studio
classic: false
- name: whatsapp-desktop-client
- name: steam
classic: false
- name: Install desired Snap packages

View File

@ -11,4 +11,12 @@
force: true
follow: false
loop:
- { src: "$DOTFILES_PATH/vscode/settings.json", dest: "~/.config/Code/User/settings.json" }
- {
src: "$DOTFILES_PATH/vscode/settings.json",
dest: "~/.config/Code/User/settings.json",
}
- {
src: "$DOTFILES_PATH/zed/settings.json",
dest: "~/.config/zed/settings.json",
}
- { src: "$DOTFILES_PATH/config/autostart", dest: "~/.config/autostart" }

View File

@ -1,104 +0,0 @@
---
- name: Ensure Ulauncher and dependencies are installed
ansible.builtin.package:
name:
- ulauncher
# - python3-pytz
- python3-tornado
- python3-docker
- python3-requests
- python3-pint
- python3-simpleeval
- python3-parsedatetime
- python3-fuzzywuzzy
# - python3-thefuzz
state: present
become: true
- name: Ensure Ulauncher config directory exists
ansible.builtin.file:
path: "~/.config/ulauncher"
state: directory
mode: "0755"
- name: Configure Ulauncher settings
ansible.builtin.copy:
content: "{{ ulauncher_settings | to_json }}"
dest: "~/.config/ulauncher/settings.json"
mode: "0644"
vars:
ulauncher_settings:
blacklisted-desktop-dirs: >
/usr/share/locale:/usr/share/app-install:/usr/share/kservices5:/usr/share/fk5:/usr/share/kservicetypes5:
/usr/share/applications/screensavers:/usr/share/kde4:/usr/share/mimelnk
clear-previous-query: true
disable-desktop-filters: false
grab-mouse-pointer: false
hotkey-show-app: "<Control>Space"
render-on-screen: "mouse-pointer-monitor"
show-indicator-icon: true
show-recent-apps: "4"
terminal-command: "ptyxis"
theme-name: "dark"
- name: Configure Ulauncher shortcuts
ansible.builtin.copy:
content: "{{ ulauncher_shortcuts | to_json }}"
dest: "~/.config/ulauncher/shortcuts.json"
mode: "0644"
vars:
ulauncher_shortcuts:
"0bab9d26-5464-4501-bc95-9995d8fa1405":
id: "0bab9d26-5464-4501-bc95-9995d8fa1405"
name: "Google Search"
keyword: "g"
cmd: "https://google.com/search?q=%s"
icon: "/usr/share/ulauncher/media/google-search-icon.png"
is_default_search: true
run_without_argument: false
added: 0
"d72834d1-5d81-4f5d-a9f6-386b12110f56":
id: "d72834d1-5d81-4f5d-a9f6-386b12110f56"
name: "Stack Overflow"
keyword: "so"
cmd: "https://stackoverflow.com/search?q=%s"
icon: "/usr/share/ulauncher/media/stackoverflow-icon.svg"
is_default_search: true
run_without_argument: false
added: 0
"4dfcffeb-879c-49b2-83bb-c16254a7ce75":
id: "4dfcffeb-879c-49b2-83bb-c16254a7ce75"
name: "GoLink"
keyword: "go"
cmd: "http://go/%s"
icon:
is_default_search: false
run_without_argument: false
added: 0
"40d1ed32-8fd3-4bf8-92f5-cbaa7cd607a1":
id: "40d1ed32-8fd3-4bf8-92f5-cbaa7cd607a1"
name: "NixOS"
keyword: "nix"
cmd: "https://search.nixos.org/packages?query=%s"
icon:
is_default_search: false
run_without_argument: false
added: 0
"40d1ed32-8fd3-4ff4-92f6-fbaa7cd607a1":
id: "42d1ed42-8dd3-2bf8-92f5-cbaa7cd607a1"
name: "Flathub"
keyword: "flat"
cmd: "https://flathub.org/apps/search?q=%s"
icon:
is_default_search: false
run_without_argument: false
added: 0
"43d1ed32-8fd3-fbf8-94f5-cffa7cd607a1":
id: "40d1ed32-8fd3-4bf8-92f5-cbaa7cd607a1"
name: "GitHub"
keyword: "gh"
cmd: "https://github.com/search?q=%s"
icon:
is_default_search: false
run_without_argument: false
added: 0

View File

@ -1,53 +0,0 @@
---
- name: Gather OS facts
ansible.builtin.setup:
filter: ansible_distribution
register: os_facts
- name: Import Microsoft GPG key (Fedora)
ansible.builtin.rpm_key:
key: https://packages.microsoft.com/keys/microsoft.asc
when: os_facts.ansible_facts.ansible_distribution == 'Fedora'
- name: Add VSCode repository (Fedora)
ansible.builtin.copy:
content: |
[code]
name=Visual Studio Code
baseurl=https://packages.microsoft.com/yumrepos/vscode
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc
dest: /etc/yum.repos.d/vscode.repo
mode: "0644"
when: os_facts.ansible_facts.ansible_distribution == 'Fedora'
- name: Add VSCode repository (Ubuntu/Debian)
ansible.builtin.apt_repository:
repo: "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"
state: present
when: os_facts.ansible_facts.ansible_distribution in ['Ubuntu', 'Debian']
- name: Import Microsoft GPG key (Ubuntu/Debian)
ansible.builtin.apt_key:
url: https://packages.microsoft.com/keys/microsoft.asc
state: present
when: os_facts.ansible_facts.ansible_distribution in ['Ubuntu', 'Debian']
- name: Check if VSCode is installed
ansible.builtin.command: code --version
register: vscode_check
changed_when: false
failed_when: false
- name: Install VSCode (Fedora)
ansible.builtin.package:
name: code
state: present
when: vscode_check.rc != 0 and os_facts.ansible_facts.ansible_distribution == 'Fedora'
- name: Install VSCode (Ubuntu/Debian)
ansible.builtin.apt:
name: code
state: present
when: vscode_check.rc != 0 and os_facts.ansible_facts.ansible_distribution in ['Ubuntu', 'Debian']

View File

@ -4,22 +4,23 @@
- name: Include workstation symlinks tasks
ansible.builtin.import_tasks: tasks/workstations/symlinks.yml
- name: Include workstation cliphist tasks
ansible.builtin.import_tasks: tasks/workstations/cliphist.yml
- name: Include GNOME Extensions tasks
ansible.builtin.import_tasks: tasks/workstations/gnome-extensions.yml
when: ansible_facts.env.XDG_CURRENT_DESKTOP is defined and 'GNOME' in ansible_facts.env.XDG_CURRENT_DESKTOP
- name: Include Firefox APT installation tasks
ansible.builtin.import_tasks: tasks/workstations/firefox-apt.yml
when: ansible_pkg_mgr == 'apt'
when: ansible_pkg_mgr == 'apt' and ansible_facts.packages.snapd is defined
- name: Include flatpaks tasks
ansible.builtin.import_tasks: tasks/workstations/flatpaks.yml
- name: Include snaps tasks
ansible.builtin.import_tasks: tasks/workstations/snaps.yml
- name: Include VSCode tasks
ansible.builtin.import_tasks: tasks/workstations/vscode.yml
become: true
when: ansible_facts.packages.snapd is defined
- name: Include Zen browser tasks
ansible.builtin.import_tasks: tasks/workstations/zen-browser.yml
@ -33,8 +34,11 @@
- name: Include Firefox PWA tasks
ansible.builtin.import_tasks: tasks/workstations/firefoxpwa.yml
- name: Include Ulauncher tasks
ansible.builtin.import_tasks: tasks/workstations/ulauncher.yml
- name: Include purge LibreOffice tasks
ansible.builtin.import_tasks: tasks/workstations/purge-libreoffice.yml
- name: Include autostart tasks
ansible.builtin.import_tasks: tasks/workstations/autostart.yml
- name: Ensure workstation common packages are installed
ansible.builtin.package:
@ -57,5 +61,7 @@
- nemo-font-manager
- nemo-gtkhash
- nemo-python
# DistroBox
- distrobox
state: present
become: true

View File

@ -1,7 +1,7 @@
---
- name: Set Zen browser version
ansible.builtin.set_fact:
zen_browser_version: "1.10.3b"
zen_browser_version: "1.12.10b"
- name: Create directory for browser
ansible.builtin.file:

View File

@ -0,0 +1,12 @@
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=1Password
Exec=/home/menno/.config/autostart/1password.ignition_delay.sh
Terminal=false
Type=Application
Icon=1password
StartupWMClass=1Password
Comment=Password manager and secure wallet
MimeType=x-scheme-handler/onepassword;x-scheme-handler/onepassword8;
Categories=Office;
Hidden=false

View File

@ -0,0 +1,2 @@
#!/usr/bin/env sh
sleep 3 && /opt/1Password/1password %U

View File

@ -0,0 +1,35 @@
[Desktop Entry]
Type=Application
Version=1.4
Name=Fastmail
Comment=Email + calendar made better
Keywords=email;messaging;
Categories=GTK;Chat;ContactManagement;Email;InstantMessaging;Network;Office;
Icon=FFPWA-01JWXB8PY7AXJTNFRNWQN995PX
Exec=/home/menno/.config/autostart/FFPWA-01JWXB8PY7AXJTNFRNWQN995PX.ignition_delay.sh
Actions=0;1;2;3;
MimeType=
Terminal=false
StartupNotify=true
StartupWMClass=FFPWA-01JWXB8PY7AXJTNFRNWQN995PX
Hidden=false
[Desktop Action 0]
Name=Compose
Icon=FFPWA-01JWXB8PY7AXJTNFRNWQN995PX-0
Exec=/usr/bin/firefoxpwa site launch 01JWXB8PY7AXJTNFRNWQN995PX --url "https://app.fastmail.com/mail/Inbox/compose"
[Desktop Action 1]
Name=Mail
Icon=FFPWA-01JWXB8PY7AXJTNFRNWQN995PX-1
Exec=/usr/bin/firefoxpwa site launch 01JWXB8PY7AXJTNFRNWQN995PX --url "https://app.fastmail.com/mail/Inbox"
[Desktop Action 2]
Name=Contacts
Icon=FFPWA-01JWXB8PY7AXJTNFRNWQN995PX-2
Exec=/usr/bin/firefoxpwa site launch 01JWXB8PY7AXJTNFRNWQN995PX --url "https://app.fastmail.com/contacts/"
[Desktop Action 3]
Name=Calendar
Icon=FFPWA-01JWXB8PY7AXJTNFRNWQN995PX-3
Exec=/usr/bin/firefoxpwa site launch 01JWXB8PY7AXJTNFRNWQN995PX --url "https://app.fastmail.com/calendar/"

View File

@ -0,0 +1,2 @@
#!/usr/bin/env sh
sleep 1 && /usr/bin/firefoxpwa site launch 01JWXB8PY7AXJTNFRNWQN995PX --protocol %u

View File

@ -0,0 +1,18 @@
[Desktop Entry]
Version=1.0
Name=ZapZap
Comment[pt_BR]=Whatsapp Desktop para Linux
Comment=Whatsapp Desktop for Linux
Exec=/home/menno/.config/autostart/com.rtosta.zapzap.ignition_delay.sh
Icon=com.rtosta.zapzap
Type=Application
Categories=Chat;Network;InstantMessaging;Qt;
Keywords=Whatsapp;Chat;ZapZap;
StartupWMClass=zapzap
MimeType=x-scheme-handler/whatsapp
Terminal=false
SingleMainWindow=true
X-GNOME-UsesNotifications=true
X-GNOME-SingleWindow=true
X-Flatpak=com.rtosta.zapzap
Hidden=false

View File

@ -0,0 +1,2 @@
#!/usr/bin/env sh
sleep 7 && /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=zapzap --file-forwarding com.rtosta.zapzap @@u %u @@

View File

@ -0,0 +1,15 @@
[Desktop Entry]
Type=Application
Name=Spotify
GenericName=Music Player
Icon=com.spotify.Client
Exec=/home/menno/.config/autostart/com.spotify.Client.ignition_delay.sh
Terminal=false
MimeType=x-scheme-handler/spotify;
Categories=Audio;Music;Player;AudioVideo;
StartupWMClass=spotify
X-GNOME-UsesNotifications=true
X-Flatpak-Tags=proprietary;
X-Flatpak=com.spotify.Client
Hidden=false
Comment=

View File

@ -0,0 +1,2 @@
#!/usr/bin/env sh
sleep 6 && /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=spotify --file-forwarding com.spotify.Client @@u %U @@

View File

@ -0,0 +1,16 @@
[Desktop Entry]
Name=Equibop
Exec=/home/menno/.config/autostart/io.github.equicord.equibop.ignition_delay.sh
Terminal=false
Type=Application
Icon=io.github.equicord.equibop
StartupWMClass=Equibop
X-AppImage-Version=2.1.4
GenericName=Internet Messenger
Categories=Network;
Keywords=discord;equibop;vesktop;vencord;equicord;electron;chat;
MimeType=x-scheme-handler/discord;
Comment=A fork of Vesktop pre-packaged with Equicord
X-Desktop-File-Install-Version=0.28
X-Flatpak=io.github.equicord.equibop
Hidden=false

View File

@ -0,0 +1,2 @@
#!/usr/bin/env sh
sleep 4 && /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=startequibop io.github.equicord.equibop

View File

@ -0,0 +1,15 @@
[Desktop Entry]
Icon=/home/menno/.local/share/JetBrains/Toolbox/toolbox.svg
Exec=/home/menno/.local/share/JetBrains/Toolbox/bin/jetbrains-toolbox --minimize
Version=1.0
Type=Application
Categories=Development
Name=JetBrains Toolbox
StartupWMClass=jetbrains-toolbox
Terminal=false
MimeType=x-scheme-handler/jetbrains;
X-GNOME-Autostart-enabled=true
StartupNotify=false
X-GNOME-Autostart-Delay=10
X-MATE-Autostart-Delay=10
X-KDE-autostart-after=panel

11
config/autostart/mimeinfo.cache Executable file
View File

@ -0,0 +1,11 @@
[MIME Cache]
x-scheme-handler/discord=io.github.equicord.equibop.desktop;
x-scheme-handler/jetbrains=jetbrains-toolbox.desktop;
x-scheme-handler/onepassword=1password.desktop;
x-scheme-handler/onepassword8=1password.desktop;
x-scheme-handler/sgnl=org.signal.Signal.desktop;
x-scheme-handler/signalcaptcha=org.signal.Signal.desktop;
x-scheme-handler/spotify=com.spotify.Client.desktop;
x-scheme-handler/tg=org.telegram.desktop.desktop;
x-scheme-handler/tonsite=org.telegram.desktop.desktop;
x-scheme-handler/whatsapp=com.rtosta.zapzap.desktop;

View File

@ -0,0 +1,11 @@
[Desktop Entry]
Name=KTailctl
Comment=GUI for tailscale on the KDE Plasma desktop
Version=1.5
Exec=/home/menno/.config/autostart/org.fkoehler.KTailctl.ignition_delay.sh
Icon=org.fkoehler.KTailctl
Type=Application
Terminal=false
Categories=Qt;KDE;System;
X-Flatpak=org.fkoehler.KTailctl
Hidden=false

View File

@ -0,0 +1,2 @@
#!/usr/bin/env sh
sleep 5 && /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=ktailctl org.fkoehler.KTailctl

View File

@ -0,0 +1,15 @@
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Signal
Exec=/home/menno/.config/autostart/org.signal.Signal.ignition_delay.sh
Terminal=false
Type=Application
Icon=org.signal.Signal
StartupWMClass=Signal
Comment=Private messaging from your desktop
MimeType=x-scheme-handler/sgnl;x-scheme-handler/signalcaptcha;
Categories=Network;InstantMessaging;Chat;
X-Desktop-File-Install-Version=0.28
X-Flatpak-RenamedFrom=signal-desktop.desktop;
X-Flatpak=org.signal.Signal
Hidden=false

View File

@ -0,0 +1,2 @@
#!/usr/bin/env sh
sleep 2 && /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=signal-desktop --file-forwarding org.signal.Signal @@u %U @@

View File

@ -0,0 +1,23 @@
[Desktop Entry]
Name=Telegram
Comment=New era of messaging
Exec=/home/menno/.config/autostart/org.telegram.ignition_delay.sh.desktop
Icon=org.telegram.desktop
Terminal=false
StartupWMClass=TelegramDesktop
Type=Application
Categories=Chat;Network;InstantMessaging;Qt;
MimeType=x-scheme-handler/tg;x-scheme-handler/tonsite;
Keywords=tg;chat;im;messaging;messenger;sms;tdesktop;
Actions=quit;
DBusActivatable=false
SingleMainWindow=true
X-GNOME-UsesNotifications=true
X-GNOME-SingleWindow=true
X-Flatpak=org.telegram.desktop
Hidden=false
[Desktop Action quit]
Exec=/usr/bin/flatpak run --branch=stable --arch=x86_64 --command=telegram-desktop org.telegram.desktop -quit
Name=Quit Telegram
Icon=application-exit

View File

@ -0,0 +1,2 @@
#!/usr/bin/env sh
sleep 1 && /usr/bin/flatpak run --branch=stable --arch=x86_64 --command=telegram-desktop --file-forwarding org.telegram.desktop -- @@u %u @@

View File

@ -26,3 +26,11 @@
[init]
defaultBranch = main
[credential "https://github.com"]
helper =
helper = !/home/menno/.nix-profile/bin/gh auth git-credential
[credential "https://gist.github.com"]
helper =
helper = !/home/menno/.nix-profile/bin/gh auth git-credential
[gpg "ssh"]
program = /opt/1Password/op-ssh-sign

View File

@ -7,11 +7,11 @@
]
},
"locked": {
"lastModified": 1743387206,
"narHash": "sha256-24N3NAuZZbYqZ39NgToZgHUw6M7xHrtrAm18kv0+2Wo=",
"lastModified": 1747688870,
"narHash": "sha256-ypL9WAZfmJr5V70jEVzqGjjQzF0uCkz+AFQF7n9NmNc=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "15c5f9d04fabd176f30286c8f52bbdb2c853a146",
"rev": "d5f1f641b289553927b3801580598d200a501863",
"type": "github"
},
"original": {
@ -23,11 +23,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1743367904,
"narHash": "sha256-sOos1jZGKmT6xxPvxGQyPTApOunXvScV4lNjBCXd/CI=",
"lastModified": 1748810746,
"narHash": "sha256-1na8blYvU1F6HLwx/aFjrhUqpqZ0SCsnqqW9n2vXvok=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "7ffe0edc685f14b8c635e3d6591b0bbb97365e6c",
"rev": "78d9f40fd6941a1543ffc3ed358e19c69961d3c1",
"type": "github"
},
"original": {
@ -39,11 +39,11 @@
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1743315132,
"narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=",
"lastModified": 1748693115,
"narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "52faf482a3889b7619003c0daec593a1912fddc1",
"rev": "910796cabe436259a29a72e8d3f5e180fc6dfacc",
"type": "github"
},
"original": {

View File

@ -109,6 +109,19 @@
};
};
"mennos-cosmic-laptop" = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [ ./home.nix ];
extraSpecialArgs = {
inherit
pkgs
pkgs-unstable
;
isServer = false;
hostname = "mennos-cosmic-laptop";
};
};
"mennos-hobbypc" = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [ ./home.nix ];

View File

@ -1,12 +0,0 @@
{
config,
pkgs,
pkgs-unstable,
...
}:
{
programs.go = {
enable = true;
package = pkgs-unstable.go;
};
}

View File

@ -59,7 +59,6 @@
duf # Modern df
zip
unzip
bottom # Modern top/htop
glances # Advanced system monitoring tool
procs # Modern ps
hyperfine # Benchmarking tool
@ -75,7 +74,6 @@
# System monitoring and process management
procs # Modern ps
bottom # Modern top/htop
hyperfine # Benchmarking tool
bandwhich # Network utilization tool
doggo # Modern dig

View File

@ -13,31 +13,17 @@ in
# GUI Application
## Utilities
tea # A Gitea official CLI client
mission-center # Task Manager like Windows 11
gnome-tweaks
pinta # Paint.NET alternative
bottles # Wine manager
spacedrive # Virtual filesystem manager
smile # Emoji picker
gnome-boxes # Virtual machine manager
deja-dup # Backup tool
sqlitebrowser # SQLite database manager
wmctrl # Window manager control (Used in ulauncher)
gparted # Used to nuke Windows off of my system
rpi-imager # Raspberry Pi OS image writer
pavucontrol # PulseAudio volume control
qrencode # qr code generator
grimblast # Screenshot tool
ptyxis # Terminal emulator
gpredict # Satellite tracking
## Dev tools
vscodium
## Chat Apps
vesktop
signal-desktop
## Multimedia
plex-media-player
vlc
@ -50,7 +36,6 @@ in
openra
xonotic
mindustry
wesnoth
shattered-pixel-dungeon
### Games launchers

View File

@ -9,7 +9,7 @@
};
theme = {
name = "Yaru";
name = "Yaru-dark";
};
cursorTheme = {
@ -28,19 +28,14 @@
'';
};
};
dconf = {
# Only apply dconf settings if running GNOME
dconf = pkgs.lib.mkIf (builtins.getEnv "XDG_CURRENT_DESKTOP" == "GNOME") {
enable = true;
settings = {
"org/gnome/desktop/background" = {
show-desktop-icons = true;
};
"org/gnome/Ptyxis" = {
use-system-font = false;
font-name = "Hack Nerd Font Mono 13";
};
"org/gnome/desktop/applications/file-manager" = {
exec = "nautilus";
};
@ -53,18 +48,17 @@
};
# Pinned apps
# add more by listing them with `dconf read /org/gnome/shell/favorite-apps | sed "s/,//g; s/'/\"/g"` then copy pasting the output here
"org/gnome/shell" = {
favorite-apps = [
"zen.desktop"
"org.gnome.Nautilus.desktop"
"firefox.desktop"
"nemo.desktop"
"com.spotify.Client.desktop"
"FFPWA-01JPMJ4K0S7JZDT2469CKNY49H.desktop"
"telegram-desktop_telegram-desktop.desktop"
"signal-desktop.desktop"
"whatsapp-desktop-client_whatsapp-desktop-client.desktop"
"vesktop.desktop"
"telegram-desktop_telegram-desktop.desktop"
"code.desktop"
"org.gnome.Ptyxis.desktop"
"vesktop.desktop"
"scrcpy.desktop"
];
};

View File

@ -5,37 +5,13 @@
enable = true;
defaultApplications = {
# default browser
"application/xhtml+xml" = [ "zen.desktop" ];
"text/html" = [ "zen.desktop" ];
"x-scheme-handler/http" = [ "zen.desktop" ];
"x-scheme-handler/https" = [ "zen.desktop" ];
"application/xhtml+xml" = [ "firefox.desktop" ];
"text/html" = [ "firefox.desktop" ];
"x-scheme-handler/http" = [ "firefox.desktop" ];
"x-scheme-handler/https" = [ "firefox.desktop" ];
# Geary
"x-scheme-handler/mailto" = [ "org.gnome.Geary.desktop" ];
# Loupe (Image Viewer)
"image/jpeg" = [ "org.gnome.Loupe.desktop" ];
"image/png" = [ "org.gnome.Loupe.desktop" ];
"image/gif" = [ "org.gnome.Loupe.desktop" ];
"image/webp" = [ "org.gnome.Loupe.desktop" ];
"image/tiff" = [ "org.gnome.Loupe.desktop" ];
"image/x-tga" = [ "org.gnome.Loupe.desktop" ];
"image/vnd-ms.dds" = [ "org.gnome.Loupe.desktop" ];
"image/x-dds" = [ "org.gnome.Loupe.desktop" ];
"image/bmp" = [ "org.gnome.Loupe.desktop" ];
"image/vnd.microsoft.icon" = [ "org.gnome.Loupe.desktop" ];
"image/vnd.radiance" = [ "org.gnome.Loupe.desktop" ];
"image/x-exr" = [ "org.gnome.Loupe.desktop" ];
"image/x-portable-bitmap" = [ "org.gnome.Loupe.desktop" ];
"image/x-portable-graymap" = [ "org.gnome.Loupe.desktop" ];
"image/x-portable-pixmap" = [ "org.gnome.Loupe.desktop" ];
"image/x-portable-anymap" = [ "org.gnome.Loupe.desktop" ];
"image/x-qoi" = [ "org.gnome.Loupe.desktop" ];
"image/svg+xml" = [ "org.gnome.Loupe.desktop" ];
"image/svg+xml-compressed" = [ "org.gnome.Loupe.desktop" ];
"image/avif" = [ "org.gnome.Loupe.desktop" ];
"image/heic" = [ "org.gnome.Loupe.desktop" ];
"image/jxl" = [ "org.gnome.Loupe.desktop" ];
# default file manager
"inode/directory" = [ "nemo.desktop" ];
# VLC (Video Player)
"video/x-ogm+ogg" = [ "vlc.desktop" ];
@ -81,13 +57,6 @@
"video/x-ogm" = [ "vlc.desktop" ];
"video/avi" = [ "vlc.desktop" ];
"video/x-mpeg-system" = [ "vlc.desktop" ];
# Totem (for those few formats that default to it)
"video/vivo" = [ "org.gnome.Totem.desktop" ];
"video/vnd.vivo" = [ "org.gnome.Totem.desktop" ];
"video/x-flic" = [ "org.gnome.Totem.desktop" ];
"video/x-mjpeg" = [ "org.gnome.Totem.desktop" ];
"video/x-totem-stream" = [ "org.gnome.Totem.desktop" ];
};
};
}

View File

@ -1,10 +1,6 @@
{
config,
pkgs-unstable,
pkgs,
...
}:
{
{ config, pkgs-unstable, pkgs, lib, ... }:
lib.mkIf (builtins.match ".*GNOME.*" (builtins.getEnv "XDG_CURRENT_DESKTOP") != null) {
# We run most extensions from unstable because they are more up-to-date
home.packages =
with pkgs.gnomeExtensions;
@ -86,22 +82,22 @@
enabled-extensions = [
"pano@elhan.io"
"tilingshell@ferrarodomenico.com"
"tiling-assistant@ubuntu.com"
"ubuntu-appindicators@ubuntu.com"
"launch-new-instance@gnome-shell-extensions.gcampax.github.com"
"native-window-placement@gnome-shell-extensions.gcampax.github.com"
"user-theme@gnome-shell-extensions.gcampax.github.com"
"appindicatorsupport@rgcjonas.gmail.com"
"arcmenu@arcmenu.com"
"blur-my-shell@aunetx"
"burn-my-windows@schneegans.github.com"
"gsconnect@andyholmes.github.io"
"gtk4-ding@smedius.gitlab.com"
"dash-to-panel@jderose9.github.com"
"just-perfection-desktop@just-perfection"
"kimpanel@kde.org"
"lilypad@shendrew.github.io"
"native-window-placement@gnome-shell-extensions.gcampax.github.com"
"smile-extension@mijorus.it"
"tailscale@joaophi.github.com"
"user-theme@gnome-shell-extensions.gcampax.github.com"
"weatheroclock@CleoMenezesJr.github.io"
"dash-to-panel@jderose9.github.com"
"arcmenu@arcmenu.com"
];
};

View File

@ -1,5 +1,6 @@
{ pkgs, ... }:
{
{ pkgs, lib, ... }:
lib.mkIf (builtins.match ".*GNOME.*" (builtins.getEnv "XDG_CURRENT_DESKTOP") != null) {
dconf.settings = {
"org/gnome/shell/keybindings" = {
show-screenshot-ui = [
@ -29,20 +30,10 @@
command = "missioncenter";
name = "missioncenter";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/terminal" = {
binding = "<Ctrl><Alt>t";
command = "ptyxis --new-window";
name = "terminal";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/emotes" = {
binding = "<Super>e";
command = "smile";
name = "emotes";
};
"org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/ulauncher" = {
binding = "<Control>Space";
command = "ulauncher-toggle";
name = "ulauncher";
};
};
}

View File

@ -1,9 +1,9 @@
-----BEGIN PGP MESSAGE-----
jA0ECQMIpdkDIGDj9kX/0sATAdd7n+uHUV6xJmWmJLZV0Xbx/UEKh/P3YlAq9yuE
hl7N8z45+xv0h+KD4XPekiEt5BNlpNMT4+yPHiCi9N0A48NJtiznAr5NsfbVw/zW
GLAz58nunLNfJPnXqc2+SrmWQwUG3WZvju3qnMZgUW+K7gythiN113jVgskn/a/T
S8NwxyxwkbsMlRbvX2bc7AB6dRr9HN5OMa6NgfZzbZSuGF50INWT5BHjaCu1VQ2p
zocXt3kdD/17YsEK35iOdRiFRBTx3pAYAVrJ9ltqOX954/92yQ==
=+CUk
jA0ECQMIkykGu3qZJRr/0sARAbGCAuB8sou+PWCSpaKloliLGKHByVg8tsXUMKzK
FDUv9HgOfzGVwMXyRznD3iWm/ikCi4YZmX6YOeXGzg0loWT8xqhgL66Q24fZ5cu1
PilvJ7CfFYxr62Ku9iC3SRy10cL32iinF4V/HRx1uO2LDsUpmJVdbjDGo1/tYYgs
X+z/FIhhE1NOLXgCB2BN9k4sqYgmW33ddtkUi+V/njAaQcNH6/0Jk8bw+toriIJY
9/F7oUBl3hYkXvhDWzcCT2EHYC0VN7fwIXrUCYAwXWX0Nks=
=9V4e
-----END PGP MESSAGE-----

View File

@ -1,13 +1,13 @@
-----BEGIN PGP MESSAGE-----
jA0ECQMIeej6lu722Zv/0sDHAQ0MzthVX79iU9sPV0Cydzz+pFCjxUzr70fIL/sf
6xTKToDbOMYvwr6N6F8W3Tn+F/wzRzGezixsDITiAH/kgSQSP1I89tF+nbR4LXlp
yW5fKr6VBYxYLXj4w5kiKo4yOvn8iIdIPC5v94VDxKiz87OpVyw1ZRhChi45Qz4P
fIC7E2b6mXoMYy4jj5NtkyceCrMeuhPzg4GQqUkcZCjVv6R4FYSkJIigj6IxiWEs
2Aqndn+V90jUZkpw0ExpMtvFSuCHhcTO7UCyWp9CR6mCl/Lonlt9M4Ypy8FhvTwE
1ehEtKsKbRGgKAd2WldedjQZO5DewVN/l26urJDEZrVsHWcO49f6l3REzhRIuRg4
hXzna7eR1QWKP9DGEfZTTFixQoNn/VUN+mLkgXnxR18f61w3ZTQIB56ygefAFWFs
qvSHgLo7v8PvYKnu4c3akPcsq6znXXhsUp+lCYHJCs0lZzz1xPi81dIq7Qvhq83g
Z4rAv4BCuTf81I6p51MraYAzGJVMbxco0g==
=Uy5p
jA0ECQMIoYDi7gX56AH/0sDGAR9lknep3lba3qW1v/uYsxSDdYDtmX6zlqxOj28O
Wzsn56j22wVE1X+DCsRTTAz0gmr5qBfP1qDR/kHCdks4Rrzcc/gaufDOzhcc6li2
PCdRIjNf1b+Rg20GDPWttYHYtytxHr+s9p9qyaV5JWqNqOeHU9B1MaAHkcB61oMp
b3hiy3/M398vfbloKw+mBMUYiP6DRopRUCjwKcexvljMYBLw84fHuRU6hF2X/3W6
yvtIXYxdNjp0IVmM3003gPilWNezcpVRT4iQ8I6TKISiYajCD/ayow4O/M0lsL0g
/AhureIfNo41gylw0bIoRrO82KKzyW2foI2MQBDEi9pYRpgZIoncu26CR9/zCCfw
GMGB+3Uw6kYzVhjKM1zmsFhmc6VWMltS52Vbio6xiLhGH7tRl7rTY5aiSwvtaVWB
0ZtAjJOUxqmCzrmiarT84v8EzVZuyBZ2nGmW8nkZFCU3trJi5HxPq4ya7g6cdiz2
yyYlMT3fGGhtgno2cvuegW00NkSsTwaW
=gk8Q
-----END PGP MESSAGE-----

View File

@ -1,10 +1,10 @@
-----BEGIN PGP MESSAGE-----
jA0ECQMIBh7ZmqMOfob/0sAlAVk5rCnFzVGdyoNlAN2XNuYqzfmzBYY10x0eDBs7
TErCSOYLdvqSRLS4h5uqogIgP6EUgIEsUnmR8AguZz29h01puj+4zRidUrN3V3JU
ai80YEqeN0E3X0qsenrbksStorcDB3c6WqLfuwAcPBunQEh1hamAkU06e/g7vfmN
PIuNL2tG5ZyKYhR7Xp7U4t0fgx/Txv+DUg29OMbm/T3hEaKGKBYm8nSoi5zrul1q
BgWq1bvJRBzZzEsJNAOMcC6KlcfXd4uBq59vb6ZJ9INV7Y1HDjDdyAJ4LnMf+yCM
X4JY0w+DsA==
=Dq4O
jA0ECQMIZdwcS80hM57/0sAsARQWk+Wy0/WBjLKSEQEEH4ny1P7NoyDhWCSiKsG8
Uhe0KrEe2I8e5mCPzhFVYTfKqdZHdjLNa9vAj9FZLww6HilAa6KHvki+6++LW0nU
t1y+KWO/l8JyL1pwBLvTQoMEByJ2PbupUBglRvaQmllpnIsahlVXy93iJuC/bB/b
IwsATpbg3/eUTjtHXGja9uyWArZQ+kcHavBaC2YaDui/7OqsZvCQRk7oTNFxAglP
UHjEbu4lY0Ntr1tRcRzzlCHjPpJOP8WkbzOzyjZ13xXtJ/lw3NC3yBQIY2+mumit
mF//S3yRdSH2KgtkhLw=
=mJLc
-----END PGP MESSAGE-----

View File

@ -1,14 +1,14 @@
-----BEGIN PGP MESSAGE-----
jA0ECQMIxDtGmF58WC//0sDrAY1mR45SCNXhDQL67JRC910ZPhjoU3y8a7h3KjMo
ousVzqq1C+S9VKj1wIdiDyftjdq3Z1EIIqpEoe2rML8EIuzYhkqcvNhhx5M8n3SF
DTvD7AMWWYXl93W544Ha4hhkMiKkqm+SBR6vYyfr3DALPgGgd8UmvI+XC8Ph+NZZ
ng7/6NVVCIjqSoFP39S53Wpd3fb9kDncQfH6HcVOR8RxRcQyTJ+ZQo9y4G3jPG+0
K5ayZaVA8SjXswIz2dDa4iyEn/rZnV3mDIPU+CKw+rB+lKHC/9IsldJ3oM9FJNs4
NLMXsbW5ZdTdTSOxIlrzsDSQasafyH+Vdp5EkrTn1mHQuz5EB0K4/hXtvOGOXBbq
TNv0lEH63JgIRwhiNqtg5BnBHTyUe1qM9gTVe3Dsxi/qGijij+I1NHlcIaRa6dHj
+HMiUtljpl3JJwlwVuKuVE+TjM4CkavSodwi4MNmZK+Mgi3jo9nR7SdHr7NHhf3o
9Et247kkC+OAieQkbsIkGFrvKUDjvq1AAPvcj/B7e0aS+rjhYU7WGFjEy/vmlDdM
00f4YFO3bowZIRhSpw==
=aTn3
jA0ECQMI7o++qCHU40L/0sDsAYN0bt93G/ceYFtCUI6R/DEvMB9GSzISN2pi5XbB
ll5Ghz5EsbgShG1mFbWsvWki0b8K+v4OEhXXxJjskBimLW4zJphfS/LWJqPoU4sY
gpZNrjF2+BnmzZ8R3JQmWhXaACddZECgYUGjGrCrs3OW256cQcP7hnrUqDtRYR7a
lA9xIKGJEu5Bx2SjezOIIHjCSEwpNcQWnCpsCFMzst/Wa+1yRHthdg+QRWtyrYzD
qqSbNSJEfJaBtmcXNwjzLUVMhaGQgca+bhfEo9j1Ma/C3su0i/r/6LoeDAHjWnqB
UIqf7h6CGoVL+K3IqfoZtXi9EsnJLDd9CvfaK7/uJkNoIVQEHu+oFaxuHIjH6E4M
NTJo99mZVEqY7r4pBeyJ0mdmaOTuC/JNwL5ticAVWAUOzdI4f20lgdI3Gtab4bIh
eEM6T0+LmjIaLRZ3urL9RacV2T4O4s2f01Yltyuh1zpxcYFCJkGTl7N1VVb9ZjyY
SwFeNO7ucd7WSwRc05EXveSETjffa9YFANyMF4pkUzHhk4mtlM4yWIYrgcl5i0Mt
6ba0fxRKwAzSJrnl3Fs=
=Ugjj
-----END PGP MESSAGE-----

View File

@ -1,8 +1,8 @@
-----BEGIN PGP MESSAGE-----
jA0ECQMITTNvBkR+1JH/0p4B/pMnjeHz6IQtrbddsuRlDTNKsVH5L8LndcTaPTE5
fh8vflrcE4dBnob4IWzUyQoepvyr+BoTk4VF58zh3/WMGH+guHrP5iAPCJNb0vaO
fkeFXZ8Cef+EB7610v3EXlVcYn0CZe9z7wPo0bCXvg/ZRTxs/tk9ycyznWrxHZEb
k2/2FJ5Y9pQRuPsMJCIsJ1CymUzCfsFZrd8NVgRMtQ==
=Vmb1
jA0ECQMIiiOoV7V1Baj/0p0BN0vbH+0DDxppbEvuRu1GSmFq+5ImE+2MqcHf8nn7
N+r6EkidkZFHpoQxy8Dy7uf5UpfamfxGP/OvFOPLIMNAvAkz8dYHihBQyWnNdgcV
c9QSOV2CDd2zElkRyJsdr4mf9YJFO6s70PjjKJXtd9stTQpo7VUDNfjCRpmBNATl
qqONDGtohquBhBbAQn9/3cJ3ueUfuVdeJr2Omy1g
=Ep+K
-----END PGP MESSAGE-----

View File

@ -1,34 +1,34 @@
-----BEGIN PGP MESSAGE-----
jA0ECQMIhSYGmg9E2Gr/0uoB+OcCrsEmrxdxF0yFgqRzXCz6bjf6Qsaaf3Yola4J
0Jxl3rE8sCkKSHg0k5fuHpkBG8PgUxna/XQvcLfPpPEQhVOXznOLvk+oaFVnTV0a
45wLpHH5YMDl3Kxsky29XijTUc9agVXzzPYGIL0xCTmvCPGVbtkNLBvP/mwIyanX
kcFNt7qX4AhPh8LeYSYRH4j+jtug6QlZ5OLBbXNncNSk3Uz4VGSUJt9F8a8Di8EO
+IRrfKnKmQ9sKcpMHsgLUyo50VPxbe2aVRma+LZxnHQ6dA7jy6yim1C3tAp16pmk
S2UisEEcVxshwmeFdaChluSoViekExH3WjWYHbDMttOqBxwLSywnYX+oDsvWMIYj
HTc+gSjHWWDZNcsRZ/cUitSD+JVVTlYCZ8NADNuX8SZTTCWBXG4LKEcRK47+szA/
MiAYwuf7yfmjv0F269ID703p00JVkX6jZNEwF9FMAN//dMRbH0qcbWeVezpyFuRa
zmzCwsR58R4z06TvawD4kpTAZOiaTMLiDikFixpmoZAI45E4o1GVYiLcf77UBX79
3XPFE+I6OErRw65Qol88KTusasS7Uv9UiZoEcXYjasGSvS5eZ5acv+qKUVbsCSng
xmQhqEE9W21cZb4+eYjQwWUwn7g01JFkXG15BncXDuB4KGJopZr0I2F+8gxutD2F
b35Q3WT8/TSjB3eEeWP3lv4ZWJwXJYuDR1kpdGitstfcHjmzv+WvvG9VH1HpWBsT
hHmYPVj3JtBSvBdVssSvBBcc5rLdrkFW/wKrfrtP2Gk9fJJv565UJDcR+bLzSSHv
EJtx85t8MtmHUIOSiGGvpXTOCQtY5NPBtUcm6/4A5MzPuh6MubeQg5Lo+ngE7SxX
zugqbh8APclqWs0j23yyC+/bGrzX9nCfNS9pg+vr+kBR0aHP4YCjZ/0+A+MB3nhb
82bpkLhky4Glb5QyW1OT8RzAquqZnQwMcv769DXoE95PS47sLFiXhapYsZUDzFkw
LzDMWELowwjQr6gV5OE8yD/BP2L/NaPDmEqNGWfoTg7P5dawd0+/GO4pEbmMlFFr
J4Svq9kg+UfHMXOLO+cIcK5jMMIeuHyd0oFEPRiaYkZV/OOzyuLlvfzTGrra/CRg
d1UsJFQCiz06ZQfh6WU7knhAaHkeF0fWV/aUj5vx8jvxiA4imd/dHQcDuPpb5dtz
okv4C8hFqk0sw7Pks/TK2VcOM6zrx8BvCwZ32IO3A1I2mN7Ko2IKNPpo9gUMznNz
/p20rAXRXvKTbO4UHu5LHUo2to7iKJwGbwQ892crMR06C1ShjnGig8TT71FdsBRc
V+yo4q1Ql1+cT436oVKXMnK2YS8NTQFSU1ESqvG9BJ3OwKykO0paz9nd+2JkCUoN
+NXW7j2JqZA4yCbGfTB/sZBl4EQoXOxyUn5Z9qWg/WGPdq0fEbjQa2l0gd437B42
k8alzg5VnY27+Ow0LJSAu6vlOB8WGxIy3cqvX4FIRQXlhuB59I/RtxKOEIl6LCGM
Qt9ZxU6/iBo71jIANiLtuSMidav/cQg6Iz4UK4Fugs0aW9oi+seQUBD4y1YOJrnc
ngr5Quy6yrgDwFH4scrDJSY0SRQ9KIRL2BAveZcqL1Yla8MyJ6i6avyb3JUwQWpW
WsSH2e7aaRmsy9lCrNxRQs2w4f4OKXDFfzkv4XHCusWLRWieEJjFbBknv01W/smp
dDGTRSglRWJDg20MnYUTeLaz2x5xRwsEqnk1d0/e4/G/dic2xd7klgh9/xMhh2po
uqC+reN0AASA/L+cNbt2n30lRgathEc3dAySL+2vN1hPOySm6fdlO2Rs+7wxOzl0
HkGWCDezV0yDBIvsBt0B
=luHb
jA0ECQMIBBgcWvSGPT3/0uoBlYW70t2tacrg5ryzWSV/O0t5G99SUhqf0EiXYuez
0neGiEANjXqys/9LtqFjtzGOmeoji/RItg59NfZbvX6t61GrDnpWL0CptXZCXmqc
A9dZc4Yayr1XwIH2ujJpuPmCeHSdlq1tiWYiupMP547L94SHQ/nLzwoTM1troD7U
F2MaKH/B4uyfTThFb1+wBxWAOXV2o1OJLJanj4HugoUw3GNtAG5pPecCZKwcKJ//
ufHWSCJXDUo7ae8TK9fZ5qGmFKuPOMP5AjQq1BJhAfLwszRaFnu2DVdIn1jTmGqF
7Fa7sBop/ol0/7Ri5tjhr9XuUfoC/IGB+FQ2vcJG7HSfW+yneQrdobQWAVhPwp2g
J66aJgmw55ttXTEG+jvedVfVkoAHkXhk6gYkU5rqIM1tZDZYI9uQ8sSbORTvGGZi
UazxwBGA+g8k9UlEOrb9duhbTDOk4WXq04xrJkNYMH1GQ85snWgYwsKG2MCz5x0Y
duDsUuymq4DB1DVJ6T6bIaIp2hXPlMhoPQYrNeVwPPHkH72W6+zQ5r/HGUKUtOK9
iH4iQwDE+//bMcxeDtlMBWEeqqxQsEaQo/raYeMzz4fBVpanNohBQMsp0IuhztsA
QxNpBduAB7or0CNEIMt913lPPAtZy9acTjqPIl9IhGlmGwplJylxrc08eFZN6/nJ
waMjexeDwJbeObJdhRctOqxQagDl4GsndaAMVBE7xMtpjUWBo+6tvtja4V7Owi1R
B1ipG4L4VtZXWDL5UoxBQ4ZcWqm5KP5ohs6/HwtBg3HbAyA1jerPReFIks9rN1s0
uIW8GEu+j60PRWRQv5j/nmedtMfRpPdei0xIPo7wvk64MSKtxIE/IU5hifUyeEgL
Bz2bkbI01Z/iZQtsRkEDjybTevwJLIspk/P7sS+Q5+DmK3fR2y+Stch9Cam34KuW
CgyLGyVt1/gpJQuGGHPirHWnyoq5qZ//Td85+tsPbVRtGcFCuAkGfQqFnL2tV/Rw
62nku7DwDcjgJZGHFijaXfrrhPN+Hy8Lpgms8KRwvV+PZ/HTGU9PK4KvCLGcBl65
SG2QS6RCbb3Gf7PhwK/uEhPxx4EBbKdiHTmjOHSf7wIw+bkpVpXORydfgiBQ/MHD
4x3D5DvmxhY09qIkDsaQcX11d0mSml4RQXpWM/1oxJygygCwco6FWPWxiMvBz9c0
hHnTH2nz8m0eLC8jjiV9H59wN6hOUOYpZilAfq1oMRvlQ/MM6GMyBpnSu0Vy2pAN
nnhjDEIMYEqb0SS2d7x9UUuBJRuVgkGTwYmXVGbxW9lM35GkRA3fPhOzLhXr+ZwJ
ykhkNO1r+pcELEhmVAuNvEIM5DXkL7UK6bM9s/W0ks+wwK7Ld40uymGQ/cKpbVhc
3VLpx/rFbaXduNLkGj/dyCRwkk21I90vfedO045bKv6IRl77B5GHul33NqAMlWe5
5jBhu7tT+F1qqfSFf813qCluTLTLcTqiCs7sSGrfNrU0bZ3QwnW+Txh20Jo59sLz
JAIEJewdDZYu/7ZnvvaZ1esmOmHDC/iqBapYJvqMJN0cwH/Ug+TuvF2uzH1KsUnt
KbbBSx7ftLu2xGU0vP4aeRRDOshRWUXpArLMIKHiAWNGfnVtRLrUHS6p53ANyAR3
YrUU74PrCo//py797uaKHjaMEUXqcmmSFsN3n/0eqWARqGghoasnMKqg6APA/xaJ
Lo4osLsK0YRawthkRWa+Xd27Ee+YhUcIboe5n8oNm5MME1Wu4zOmdLUkCFrIZBnM
xlG7N7ba3gOk29ItSvTXmk9bguEH2CFTPbTuD8JIKwPDK1y0MwnhQ6xhSBaOYAOB
6Wy3YjZH1Ep+zeNfFX/peDw=
=ky7Q
-----END PGP MESSAGE-----

View File

@ -1,12 +1,12 @@
-----BEGIN PGP MESSAGE-----
jA0ECQMIJNlCENll2m//0sCXAcYc5kn7UOW/7hEy80E6Sgkr4kFrenZ7btyaeFt+
6L9pm8gRAyyAIvbTV+5ABrg35k6ZRZITebZXG7Z/FohCWLk4fzpWr9yHk3KB31d3
maCdfL+Yj+s5ihBcJop5KSUmKWxe+Z3QTdNGR4WE+My7/NnmRMQrxqWpuhDEh1GT
NRWUxY+QP4BEYDLUqlJghhk3lVIqA5+PsDV2m0Ks5VaUjkW9+DAaiVy79+hvJEoj
8E5wW+aEa3O8gnAhIdvjWLViNha4eRfQROf761v3wZm6hQKtmzijezlo8akG7ov/
SQ6Ps7crOimmUEnlahanxOcvrHORUOH/0JRVa80AoT7uFTSozVov9P1RRZjhW/By
vYXMlphlXXSbVWYQhYdfak3lR09K8oVJHPk5yFQtF6sp1QEatmYNQrs0SbLl8QhQ
2rq+rPjf7t367zrdO0ekg4RthhkPCVPj0w==
=rK9W
jA0ECQMIHn8cI/5lQ/X/0sCWAVktrqgI2rFaoVa8WBwvrtTKcJSyZQRSN3yeDSwf
vYCPf5reM4L078Jcr8teG21BrzT8SpaMcVE/kNiy7nyrS+4piB9lICuFeXEUHOU9
r2E/xyeNKP3RY6sVay2c4s0QyNOnosa2iNwTGGEtZNimxV2IcEB9kI2mVKNDkm/p
rmFF9/HtOu7KNBj7mtIwqez82heZnaQXd8PWadaO4f3qenuNPDltjcgHi0dApAY9
4TR9h2fAqiQ8QjZanRKtvnsFT+/fytL+q364oxg4UiiZ6jvXtVCzF3nFjN4CiAaK
/LYfzV7wOnxgK/zg+wH/wZRZb5Y1w8gYKeLbG1joiSNjnVgmJaBSngV5DYWhNoxu
pknE+ryxGAMPJxIA6x3ZZ/XbOVIF63BIfb1nEsoTH1nEqQjw4LHYNoaodyVEptq0
C2PYnKDEkMBbMxRWj4buDspQghYlOC4y
=RaOd
-----END PGP MESSAGE-----

View File

@ -1,10 +1,10 @@
-----BEGIN PGP MESSAGE-----
jA0ECQMIBY9Ry+ogj9n/0sBBAfP0Uu4XFy4ojviLQ7vk6Qj554diK6gjT09nIjtE
fzxL/H4WkTA8c8DgowZFZjp8i+wavLf4fzx4UZgz1msxEpjrO7ImDRwz9ebAuWVu
BgUluVQ7ZhgX6L9rUz93O2XpNwx/fYyidcL5TjUAUGa/3GMgAkOzdm/7b6qUhs4p
glm5UGmsPWcd4r3876+P4WMEUfn8NqJJsAkuGGhgK8N3SgZZQEnC6ELegA54u9Vr
iW2knifImau4txTRfnNnQFL7wra9VzSqkBUo1f/K46hpEPAtXs4G9ZijehASTmCU
PPBgtZ9Pc2rkKc51dFE+1MWH6n/GiKRIA1+3EOVuxEJuFpY=
=SsRx
jA0ECQMI6ilVuKluy9z/0sBBAY2C0GhxMxdKZFeZwFZVFOlBfNfLMa0Jpubl9YU9
3v4oS9LF9PXTE9Dv5O/2WWlEcZ5cTw5Ur86L+w1YIxDE6EOITgc8nKXwzPqj7Nkx
qPFE/5K7kIPzsw0My3flol+PLDHmFcKsZknxBSQKKOjkBHGthvlFkR44Mg+gs7oc
hsVLLnvt4TH6dndEId5+5J1y5i6MtCuCpemCjmY22ZmYnaMkuxTiRWDw2+GD5YRo
AmSHSEyQ8uLq1N4Tpin68z+0iUIfgR/UbHRq5B46K0AxEsA5BpHIDpBGf52Y4hBE
y27F1Yr1AypgakMD524YBvRmaiuBJw4WAjxrwLHjZnrJpIg=
=LF00
-----END PGP MESSAGE-----

View File

@ -1,13 +1,13 @@
-----BEGIN PGP MESSAGE-----
jA0ECQMIwZpSduIhocH/0sDMATJ/anpIxFnatcbGSfOQOe6Fkp9Cc31iSxGRGoNC
I0sJfVr5c7tZuRusLS/FmfKPqHfo8jZFZf3xNfvvqnP1d2K4OXBkAyBpaV27xWU2
AzcoEMbApGfVlLKmauRczFSnITr+NzWWPeKv1+CcFw7THj7uOMa6zCnepNdrbTF1
S0mNbdiohsw8Zgleywrql4h31L5YAWrvxsac4ozXEqk4NsgNInjI6m7zovyT7p7X
c88vKREtFoOT7c04D3fLM8tQ2M9jvDqTVh/Yr7pL5C/QOSfy/9tIrHCO/zIhKZid
B87J2zeiW8bcNflrLnpkQP3m3eFaBC8lGvKGlyhRmWtroCR0oM+/kF7NJ+8f5S2i
npuQTWOspDorewM6swA8/JNQrRIutCsm6fs35MfQcoMHoue41xA2ve0y0q/ZuiJi
ro8pGc/VcMwyBhbzRwepvv4GD1irch7IgJ7ZP2U6ugboiXgDesXMDe+VnIwoxGk3
pXKzGw0V4E/nfZ1RulOKgIK8RqFFSa9e9y9XCe29
=M2ve
jA0ECQMIwaGoV3WTcgH/0sDMARL6H1Ec+ap2yUA7C9c1Jg9MN84vcnT3U6Kzk6CK
CgqZ5jQTIuikmH9ZigftZpZMgrtuXx5JNqpN4H57w3SqUbfXLcfwlleb0Q55LCHg
EzmXqgB/3b8uJ6DUJiLKWyiPclhqA6JaWCIoXb0nMiPwFPLmZFg1MgytuZPDBBWn
u5iMcQUQPZw5f5CVBpUGZrycfVf52xq/EbKFlGPLychWIJATFiAR8//WRQzM7Sdk
kmIxeKIBM8ABUO25qeR8vOOlBkdsBdxRw61Y8oGFcCVjVW4/2rV86VsYfVnBe04Q
TGlLCXNX0gvPg1u9PxLrGfx0zJO1aR5LPfU8qjTi2oAiaucxtpMPzGibTyEDY5rP
yrcj4w4W9j2eCMrJoiZ8BXjO1tRSTispQukp+pT2uNoIsrhp42J//J9dGKkFfrFG
qvuSGgedqs/vnjtSJk21GUXztGCMdACv1BnaJLaj2oNXSpPg4s6GWQ4oyEYvrvn5
sMy76QEG95UjBdZaPah+pfoPcpM6tGEVv0RAoWHB
=rzNt
-----END PGP MESSAGE-----

View File

@ -301,7 +301,7 @@ warning_prompt() {
log_error "Please ensure you have a backup of your data before proceeding."
log_error "This script will modify system files and may require sudo permissions."
echo ""
log_info "This script has been tested on Ubuntu 22.04, 24.04, 24.10, Debian 12 and Fedora 41."
log_info "This script has been tested on Ubuntu 22.04, 24.04, 24.10, Pop!_OS 24.04 Alpha 7, Debian 12 and Fedora 41."
log_info "Setup starts in 10 seconds, to abort use Ctrl+C to exit NOW."
echo ""
sleep 10
@ -418,6 +418,13 @@ check_compatibility() {
sleep 5
check_command_availibility "apt"
;;
Pop!_OS*)
log_success "Detected Pop!_OS. Proceeding with setup..."
log_warning "Only COSMIC alpha is supported, other versions are not tested."
log_warning "Continueing in 5 seconds..."
sleep 5
check_command_availibility "apt"
;;
*)
die "Unsupported distribution: $distro"
;;

View File

@ -1,6 +1,5 @@
{
"security.workspace.trust.untrustedFiles": "open",
"window.zoomLevel": 1.2,
"editor.fontFamily": "Hack Nerd Font",
"terminal.integrated.fontFamily": "Hack Nerd Font",
"github.copilot.enable": {
@ -22,6 +21,11 @@
"editor.renderWhitespace": "all"
},
"[nix]": {
"editor.formatOnSave": true,
"editor.formatOnType": true
},
"[dart]": {
// Automatically format code on save and during typing of certain characters
// (like `;` and `}`).
@ -48,7 +52,8 @@
},
"remote.SSH.remotePlatform": {
"mennos-laptop": "linux",
"mennos-desktop": "linux"
"mennos-desktop": "linux",
"cloud": "linux"
},
"editor.tabSize": 2,
"editor.insertSpaces": true,
@ -65,5 +70,10 @@
"dart.debugExternalPackageLibraries": true,
"dart.debugSdkLibraries": true,
"dart.warnWhenEditingFilesOutsideWorkspace": false,
"window.confirmSaveUntitledWorkspace": false
"window.confirmSaveUntitledWorkspace": false,
"git.openRepositoryInParentFolders": "never",
"debug.toolBarLocation": "commandCenter",
"workbench.colorTheme": "Default Light+",
"ansible.lightspeed.enabled": false,
"ansible.lightspeed.suggestions.enabled": false
}

91
zed/settings.json Normal file
View File

@ -0,0 +1,91 @@
// Zed settings
//
// For information on how to configure Zed, see the Zed
// documentation: https://zed.dev/docs/configuring-zed
//
// To see all of Zed's default settings without changing your
// custom settings, run `zed: open default settings` from the
// command palette (cmd-shift-p / ctrl-shift-p)
{
// #############################################
// ## Theming ##
// #############################################
"icon_theme": "Catppuccin Frappé",
"ui_font_size": 16,
"buffer_font_size": 16,
"minimap": {
"show": "auto",
"thumb": "hover",
"current_line_highlight": "all"
},
"theme": {
"mode": "system",
"light": "Catppuccin Latte",
"dark": "Catppuccin Frappé"
},
"tabs": {
"close_position": "right",
"file_icons": true,
"git_status": true,
"activate_on_close": "history",
"show_close_button": "hover",
"show_diagnostics": "errors"
},
"toolbar": {
"code_actions": true
},
// #############################################
// ## Preferences ##
// #############################################
"restore_on_startup": "last_session",
"auto_update": true,
"base_keymap": "VSCode",
"cursor_shape": "bar",
"hide_mouse": "on_typing",
"on_last_window_closed": "quit_app",
"ensure_final_newline_on_save": true,
"format_on_save": "prettier",
// Example on language specific options:
// "languages": {
// "Shell Script": {
// "format_on_save": "off"
// }
// },
// #############################################
// ## AI Stuff ##
// #############################################
"agent": {
"model_parameters": [],
"default_model": {
"provider": "copilot_chat",
"model": "claude-3.7-sonnet"
},
"version": "2"
},
"edit_predictions": {
"mode": "subtle",
"enabled_in_text_threads": true,
"disabled_globs": [
"**/.env*",
"**/*.pem",
"**/*.key",
"**/*.cert",
"**/*.crt",
"**/.dev.vars",
"**/secrets/**"
]
},
// #############################################
// ## Extensions ##
// #############################################
"auto_install_extensions": {
"dockerfile": true,
"html": true,
"yaml": true,
"docker-compose": true,
"golang": true
}
}