[nix] initial commit
This commit is contained in:
parent
0fc00abcd7
commit
ee3dfbdcee
15
clipse/custom_theme.json
Normal file
15
clipse/custom_theme.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"useCustomTheme": true,
|
||||
"DimmedDesc": "#ffffff",
|
||||
"DimmedTitle": "#ffffff",
|
||||
"FilteredMatch": "#528bff",
|
||||
"NormalDesc": "#ffffff",
|
||||
"NormalTitle": "#ffffff",
|
||||
"SelectedDesc": "#3465a4",
|
||||
"SelectedTitle": "#528bff",
|
||||
"SelectedBorder": "#528bff",
|
||||
"SelectedDescBorder": "#528bff",
|
||||
"TitleFore": "#ffffff",
|
||||
"Titleback": "#528bff",
|
||||
"StatusMsg": "#ffffff"
|
||||
}
|
65
flake.lock
Normal file
65
flake.lock
Normal file
@ -0,0 +1,65 @@
|
||||
{
|
||||
"nodes": {
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710888565,
|
||||
"narHash": "sha256-s9Hi4RHhc6yut4EcYD50sZWRDKsugBJHSbON8KFwoTw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "f33900124c23c4eca5831b9b5eb32ea5894375ce",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-23.11",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1711048004,
|
||||
"narHash": "sha256-fI9nyTXbQsZYNre67OXz0nNgcXXlNfN470WJv8Qw3eE=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "8c2a8f922ff4eb12bc2d6d1486f247ee3f02279e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "release-23.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1710806803,
|
||||
"narHash": "sha256-qrxvLS888pNJFwJdK+hf1wpRCSQcqA6W5+Ox202NDa0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b06025f1533a1e07b6db3e75151caa155d1c7eb3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-unstable",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
109
flake.nix
Normal file
109
flake.nix
Normal file
@ -0,0 +1,109 @@
|
||||
{
|
||||
description = "siempie's special";
|
||||
|
||||
# inputs
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/release-23.11";
|
||||
nixpkgs-unstable.url = "nixpkgs/nixos-unstable";
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-23.11";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
# outputs
|
||||
outputs = { self, nixpkgs, nixpkgs-unstable,home-manager, ...} @ inputs: let
|
||||
inherit (self) outputs;
|
||||
system = "x86_64-linux";
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
unstableOverlay = final: prev: {
|
||||
unstable = import nixpkgs-unstable {
|
||||
system = "x86_64-linux";
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
lib = nixpkgs.lib;
|
||||
in {
|
||||
nixosConfigurations = {
|
||||
|
||||
# laptop - itclt75
|
||||
itclt75 = lib.nixosSystem {
|
||||
specialArgs = {inherit inputs outputs;};
|
||||
specialArgs.channels = { inherit nixpkgs nixpkgs-unstable; };
|
||||
inherit system;
|
||||
modules = [
|
||||
({
|
||||
nixpkgs = {
|
||||
overlays = [ unstableOverlay ];
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
})
|
||||
./nix/systems/itclt75/configuration.nix
|
||||
home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.simon = {
|
||||
imports = [
|
||||
./nix/home
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
# laptop - talathiel
|
||||
talathiel = lib.nixosSystem {
|
||||
specialArgs = {inherit inputs outputs;};
|
||||
specialArgs.channels = { inherit nixpkgs nixpkgs-unstable; };
|
||||
inherit system;
|
||||
modules = [
|
||||
({
|
||||
nixpkgs = {
|
||||
overlays = [ unstableOverlay ];
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
})
|
||||
./nix/systems/talathiel/configuration.nix
|
||||
home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.simon = {
|
||||
imports = [
|
||||
./nix/home
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
# desktop - phaedra
|
||||
phaedra = lib.nixosSystem {
|
||||
specialArgs = {inherit inputs outputs;};
|
||||
specialArgs.channels = { inherit nixpkgs nixpkgs-unstable; };
|
||||
inherit system;
|
||||
modules = [
|
||||
({
|
||||
nixpkgs = {
|
||||
overlays = [ unstableOverlay ];
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
})
|
||||
./nix/systems/phaedra/configuration.nix
|
||||
home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.simon = {
|
||||
imports = [
|
||||
./nix/home
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
36
hyprland/centre_app.sh
Executable file
36
hyprland/centre_app.sh
Executable file
@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# manage arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--class)
|
||||
app_class="$2"
|
||||
shift 2
|
||||
;;
|
||||
--title)
|
||||
app_title="$2"
|
||||
shift 2
|
||||
;;
|
||||
*)
|
||||
echo "Invalid option: $1"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
# function to center the app
|
||||
handle() {
|
||||
event="${1%%>>*}"
|
||||
edata="${1#*>>}"
|
||||
IFS=',' read -ra array <<< "$edata"
|
||||
|
||||
if [[ $event = "openwindow" && ${array[2]} = "${app_class}" && ${array[3]} = "${app_title}" ]]; then
|
||||
hyprctl dispatch centerwindow
|
||||
fi
|
||||
}
|
||||
|
||||
# read the socket and activate the function
|
||||
while IFS= read -r line; do
|
||||
handle "$line"
|
||||
done < <(socat -U - UNIX-CONNECT:/tmp/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock)
|
84
hyprland/conf.d/bindings.conf
Normal file
84
hyprland/conf.d/bindings.conf
Normal file
@ -0,0 +1,84 @@
|
||||
binds {
|
||||
workspace_back_and_forth = true
|
||||
}
|
||||
|
||||
# bindings
|
||||
$mainMod = SUPER
|
||||
|
||||
# basic key bindings
|
||||
bind = $mainMod, Return, exec, alacritty
|
||||
bind = $mainMod, B, exec, blueman-manager
|
||||
bind = $mainMod, C, exec, alacritty --class clipse --command clipse $PPID
|
||||
bind = $mainMod, D, exec, ~/.dotfiles/wofi/wofi.sh
|
||||
bind = $mainMod, E, exec, nautilus --new-window
|
||||
bind = $mainMod, F, fullscreen
|
||||
bind = $mainMod, J, togglesplit
|
||||
bind = $mainMod, K, exec, alacritty --class scratchbox
|
||||
bind = $mainMod, M, exit,
|
||||
bind = $mainMod, N, exec, alacritty --class nmtui --command ~/.dotfiles/hyprland/nmtui.sh
|
||||
bind = $mainMod, P, pseudo
|
||||
bind = $mainMod, Q, killactive
|
||||
bind = $mainMod, S, exec, $screenshot
|
||||
bind = $mainMod, T, exec, alacritty --class nostt --command nostt
|
||||
bind = $mainMod, V, togglefloating
|
||||
|
||||
# manage lockscreen
|
||||
bind = $mainMod, L, exec, ~/.dotfiles/swaylock/lock.sh
|
||||
bindl = ,switch:on:Lid Switch, exec, ~/.dotfiles/swaylock/lock.sh
|
||||
|
||||
# focus bindings
|
||||
bind = $mainMod, up, movefocus, u
|
||||
bind = $mainMod, down, movefocus, d
|
||||
bind = $mainMod, left, movefocus, l
|
||||
bind = $mainMod, right, movefocus, r
|
||||
|
||||
# switch workspace bindings
|
||||
bind = $mainMod, 1, workspace, 1
|
||||
bind = $mainMod, 2, workspace, 2
|
||||
bind = $mainMod, 3, workspace, 3
|
||||
bind = $mainMod, 4, workspace, 4
|
||||
bind = $mainMod, 5, workspace, 5
|
||||
bind = $mainMod, 6, workspace, 6
|
||||
bind = $mainMod, 7, workspace, 7
|
||||
bind = $mainMod, 8, workspace, 8
|
||||
bind = $mainMod, 9, workspace, 9
|
||||
bind = $mainMod, 0, workspace, 10
|
||||
|
||||
# move window to workspaces bindings
|
||||
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||
|
||||
# move workspaces using the mouse
|
||||
bind = $mainMod, mouse_up, workspace, e+1
|
||||
bind = $mainMod, mouse_down, workspace, e-1
|
||||
|
||||
# move window using keys
|
||||
bind = ALT SHIFT, up, movewindow, u
|
||||
bind = ALT SHIFT, down, movewindow, d
|
||||
bind = ALT SHIFT, left, movewindow, l
|
||||
bind = ALT SHIFT, right, movewindow, r
|
||||
|
||||
# move windows using the mouse
|
||||
bindm = $mainMod, mouse:272, movewindow
|
||||
bindm = $mainMod, mouse:273, resizewindow
|
||||
|
||||
# resize window bindings
|
||||
bind = $mainMod SHIFT, up, resizeactive, 0 -50
|
||||
bind = $mainMod SHIFT, down, resizeactive, 0 50
|
||||
bind = $mainMod SHIFT, left, resizeactive, -50 0
|
||||
bind = $mainMod SHIFT, right, resizeactive, 50 0
|
||||
|
||||
# multimedia key bindings
|
||||
bind = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle
|
||||
bind = ,XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
|
||||
bind = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||
bind = ,XF86MonBrightnessDown, exec, brightnessctl set 10%-
|
||||
bind = ,XF86MonBrightnessUp, exec, brightnessctl set 10%+
|
41
hyprland/conf.d/executions.conf
Normal file
41
hyprland/conf.d/executions.conf
Normal file
@ -0,0 +1,41 @@
|
||||
# start waybar
|
||||
exec = ~/.dotfiles/waybar/startup.sh
|
||||
|
||||
# set monitor workspaces
|
||||
exec = ~/.dotfiles/hyprland/monitor.sh
|
||||
|
||||
# start tailscale
|
||||
exec-once = tailscale up
|
||||
|
||||
# clear and start clipse
|
||||
exec-once = clipse -clear
|
||||
exec-once = clipse -listen
|
||||
|
||||
# start blueman
|
||||
exec = blueman-tray
|
||||
|
||||
# theming
|
||||
exec = ~/.dotfiles/wallpaper/startup.sh
|
||||
|
||||
# set volume
|
||||
exec-once = wpctl set-volume @DEFAULT_AUDIO_SINK@ 80%
|
||||
|
||||
# solaar
|
||||
exec-once = ~/.dotfiles/hyprland/startup/solaar.sh
|
||||
|
||||
# nextcloud desktop
|
||||
exec-once = ~/.dotfiles/hyprland/startup/nextcloud_desktop.sh
|
||||
|
||||
# center apps
|
||||
exec = ~/.dotfiles/hyprland/centre_app.sh --class "solaar" --title "solaar"
|
||||
exec = ~/.dotfiles/hyprland/centre_app.sh --class "nostt" --title "Alacritty"
|
||||
exec = ~/.dotfiles/hyprland/centre_app.sh --class "nmtui" --title "Alacritty"
|
||||
exec = ~/.dotfiles/hyprland/centre_app.sh --class "Rofi" --title "rofi - Apps"
|
||||
exec = ~/.dotfiles/hyprland/centre_app.sh --class "scratchbox" --title "Alacritty"
|
||||
exec = ~/.dotfiles/hyprland/centre_app.sh --class "blueman-manager" --title "Bluetooth Devices"
|
||||
exec = ~/.dotfiles/hyprland/centre_app.sh --class "com.gabm.satty" --title "satty"
|
||||
|
||||
# start default apps
|
||||
exec-once = [workspace 1 silent] bitwarden
|
||||
exec-once = [workspace 2 silent] firefox
|
||||
exec-once = [workspace 3 silent] alacritty
|
23
hyprland/conf.d/general.conf
Normal file
23
hyprland/conf.d/general.conf
Normal file
@ -0,0 +1,23 @@
|
||||
# dwindle secion
|
||||
dwindle {
|
||||
pseudotile = yes
|
||||
preserve_split = yes
|
||||
}
|
||||
|
||||
# general section
|
||||
general {
|
||||
border_size = 3
|
||||
|
||||
col.active_border = rgba(528bffaa)
|
||||
col.inactive_border = rgba(595959aa)
|
||||
|
||||
gaps_in = 5
|
||||
gaps_out = 20
|
||||
|
||||
layout = dwindle
|
||||
}
|
||||
|
||||
misc {
|
||||
disable_hyprland_logo = true
|
||||
disable_splash_rendering = true
|
||||
}
|
51
hyprland/conf.d/graphics.conf
Normal file
51
hyprland/conf.d/graphics.conf
Normal file
@ -0,0 +1,51 @@
|
||||
# monitors
|
||||
monitor = eDP-1, preferred, 760x1440, 1 # laptop (native: 2560x1600@60, preffered 1920x1200)
|
||||
monitor = , preferred, 0x0, 1 # default resolution on any other screen
|
||||
|
||||
# unscale xwayland
|
||||
xwayland {
|
||||
force_zero_scaling = true
|
||||
}
|
||||
|
||||
# animation section
|
||||
animations {
|
||||
enabled = yes
|
||||
|
||||
bezier = fade, 0.05, 1, 0.1, 1
|
||||
bezier = smoothOut, 0.36, 0, 0.66, 1
|
||||
bezier = smoothIn, 0.25, 1, 0.5, 1
|
||||
|
||||
animation = windows, 1, 3, smoothIn,
|
||||
animation = windowsOut, 1, 3, smoothOut,
|
||||
animation = windowsMove, 1, 3, default
|
||||
animation = border, 1, 10, default
|
||||
animation = fade, 1, 5, smoothIn
|
||||
animation = fadeDim, 1, 5, smoothIn
|
||||
animation = workspaces, 1, 8, fade
|
||||
}
|
||||
|
||||
# decoration section
|
||||
decoration {
|
||||
|
||||
# blur
|
||||
blur {
|
||||
enabled = true
|
||||
size = 2
|
||||
passes = 2
|
||||
}
|
||||
|
||||
# windows
|
||||
rounding = 16
|
||||
|
||||
# shadows
|
||||
drop_shadow = true
|
||||
shadow_offset = 2 2
|
||||
shadow_range = 8
|
||||
shadow_render_power = 2
|
||||
shadow_ignore_window = true
|
||||
col.shadow = 0x66000000
|
||||
|
||||
# opacity
|
||||
active_opacity = 1.0
|
||||
inactive_opacity = 1.0
|
||||
}
|
19
hyprland/conf.d/input.conf
Normal file
19
hyprland/conf.d/input.conf
Normal file
@ -0,0 +1,19 @@
|
||||
# gesture secion
|
||||
gestures {
|
||||
workspace_swipe = true
|
||||
workspace_swipe_min_speed_to_force = 80
|
||||
workspace_swipe_cancel_ratio = 0.2
|
||||
}
|
||||
|
||||
# input section
|
||||
input {
|
||||
kb_layout = us
|
||||
follow_mouse = 1
|
||||
sensitivity = 0
|
||||
|
||||
touchpad {
|
||||
disable_while_typing = true
|
||||
natural_scroll = yes
|
||||
}
|
||||
|
||||
}
|
8
hyprland/conf.d/variables.conf
Normal file
8
hyprland/conf.d/variables.conf
Normal file
@ -0,0 +1,8 @@
|
||||
# variables
|
||||
|
||||
# screenshot
|
||||
$screenshot = grimblast --notify save area - | \
|
||||
satty \
|
||||
--filename - \
|
||||
--fullscreen \
|
||||
--output-filename ~/Pictures/Screenshots/satty-$(date '+%Y%m%d-%H:%M:%S').png
|
69
hyprland/conf.d/window_rules.conf
Normal file
69
hyprland/conf.d/window_rules.conf
Normal file
@ -0,0 +1,69 @@
|
||||
# master section
|
||||
master {
|
||||
new_is_master = true
|
||||
}
|
||||
|
||||
# window rules
|
||||
windowrule = float, confirm|confirmreset
|
||||
windowrule = float, dialog|download
|
||||
windowrule = float, error|eog
|
||||
windowrule = float, file-roller|file_progress
|
||||
windowrule = float, Lxappearance|notification
|
||||
windowrule = float, splash
|
||||
windowrule = float, title:branchdialog
|
||||
windowrule = float, title:Nextcloud
|
||||
|
||||
# alacritty
|
||||
windowrulev2 = float, class:(scratchbox)
|
||||
windowrulev2 = size 1200 800, class:(scratchbox)
|
||||
windowrulev2 = move center, class:(scratchbox)
|
||||
|
||||
# blueman
|
||||
windowrulev2 = float, class:(blueman-manager), title:(Bluetooth Devices)
|
||||
windowrulev2 = size 1000 800, class:(blueman-manager), title:(Bluetooth Devices)
|
||||
windowrulev2 = move center, class:(blueman-manager), title:(Bluetooth Devices)
|
||||
|
||||
# clipse
|
||||
windowrulev2 = float, class:(clipse)
|
||||
windowrulev2 = size 1000 800, class:(clipse)
|
||||
windowrulev2 = move center, class:(clipse)
|
||||
|
||||
# save as
|
||||
windowrulev2 = float, title:(Save As)
|
||||
windowrulev2 = size 1000 800, title:(Save As)
|
||||
windowrulev2 = move center, title:(Save As)
|
||||
|
||||
# open file
|
||||
windowrulev2 = float, title:(Open File)
|
||||
windowrulev2 = size 1000 800, title:(Open File)
|
||||
windowrulev2 = move center, title:(Open File)
|
||||
|
||||
# add folder to workspace
|
||||
windowrulev2 = float, title:(Add Folder to Workspace)
|
||||
windowrulev2 = size 1000 800, title:(Add Folder to Workspace)
|
||||
windowrulev2 = move center, title:(Add Folder to Workspace)
|
||||
|
||||
# network manager tui
|
||||
windowrulev2 = float, class:(nmtui), title:(Alacritty)
|
||||
windowrulev2 = size 1180 792, class:(nmtui), title:(Alacritty)
|
||||
windowrulev2 = move center, class:(nmtui), title:(Alacritty)
|
||||
|
||||
# nos teletekst
|
||||
windowrulev2 = float, class:(nostt), title:(Alacritty)
|
||||
windowrulev2 = size 455 660, class:(nostt), title:(Alacritty)
|
||||
windowrulev2 = move center, class:(nostt), title:(Alacritty)
|
||||
|
||||
# satty
|
||||
windowrulev2 = float, class:(com.gabm.satty), title:(satty)
|
||||
windowrulev2 = size 85% 80%, class:(com.gabm.satty), title:(satty)
|
||||
windowrulev2 = move center, class:(com.gabm.satty), title:(satty)
|
||||
|
||||
# solaar
|
||||
windowrulev2 = float, class:(solaar), title:(solaar)
|
||||
windowrulev2 = size 1000 800, class:(solaar), title:(solaar)
|
||||
windowrulev2 = move center, class:(solaar), title:(solaar)
|
||||
|
||||
# volume control
|
||||
windowrulev2 = float, title:(Volume Control)
|
||||
windowrulev2 = size 1000 800, title:(Volume Control)
|
||||
windowrulev2 = move center, title:(Volume Control)
|
7
hyprland/hyprland.conf
Normal file
7
hyprland/hyprland.conf
Normal file
@ -0,0 +1,7 @@
|
||||
source = ~/.dotfiles/hyprland/conf.d/variables.conf # set variables
|
||||
source = ~/.dotfiles/hyprland/conf.d/executions.conf # app executions
|
||||
source = ~/.dotfiles/hyprland/conf.d/general.conf # general hyprland
|
||||
source = ~/.dotfiles/hyprland/conf.d/graphics.conf # graphics section
|
||||
source = ~/.dotfiles/hyprland/conf.d/input.conf # input and gestures
|
||||
source = ~/.dotfiles/hyprland/conf.d/window_rules.conf # window rules
|
||||
source = ~/.dotfiles/hyprland/conf.d/bindings.conf # key bindings
|
41
hyprland/monitor.sh
Executable file
41
hyprland/monitor.sh
Executable file
@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
# sleep
|
||||
sleep 2s
|
||||
|
||||
# gather monitor count
|
||||
monitor_count=$(hyprctl monitors -j | jq '. | length')
|
||||
|
||||
# single monitor
|
||||
if [[ "$monitor_count" == 1 ]]; then
|
||||
|
||||
# set primary monitor
|
||||
primary_monitor=$(hyprctl monitors -j | jq -r '.[0].name')
|
||||
|
||||
# move all workspaces to primary monitor
|
||||
for ((ws = 1; ws <= 10; ws++)); do
|
||||
hyprctl keyword wsbind $ws,$primary_monitor > /dev/null
|
||||
hyprctl dispatch moveworkspacetomonitor $ws $primary_monitor > /dev/null
|
||||
done
|
||||
|
||||
|
||||
# dual monitor
|
||||
elif [[ "$monitor_count" == 2 ]]; then
|
||||
|
||||
# set both monitors
|
||||
primary_monitor=$(hyprctl monitors -j | jq -r '.[0].name')
|
||||
external_monitor=$(hyprctl monitors -j | jq -r '.[1].name')
|
||||
|
||||
# move workspace 1 to primary monitor
|
||||
hyprctl keyword wsbind 1,$primary_monitor > /dev/null
|
||||
hyprctl dispatch moveworkspacetomonitor 1 $primary_monitor > /dev/null
|
||||
|
||||
# move workspace 2-8 to
|
||||
for ((ws = 2; ws <= 8; ws++)); do
|
||||
hyprctl keyword wsbind $ws,$external_monitor > /dev/null
|
||||
hyprctl dispatch moveworkspacetomonitor $ws $external_monitor > /dev/null
|
||||
done
|
||||
|
||||
else # more than 2 monitors...
|
||||
echo "Not supported"
|
||||
fi
|
3
hyprland/nmtui.sh
Executable file
3
hyprland/nmtui.sh
Executable file
@ -0,0 +1,3 @@
|
||||
nmcli device wifi rescan
|
||||
read -t 0.1
|
||||
nmtui
|
10
hyprland/startup/nextcloud_desktop.sh
Executable file
10
hyprland/startup/nextcloud_desktop.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
# sleep some time
|
||||
sleep 2s
|
||||
|
||||
# check if nextcloud is already running
|
||||
pkill nextcloud
|
||||
|
||||
# start nextcloud
|
||||
nextcloud
|
10
hyprland/startup/solaar.sh
Executable file
10
hyprland/startup/solaar.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
# sleep some time
|
||||
sleep 2s
|
||||
|
||||
# check if solaar is already running
|
||||
pkill solaar
|
||||
|
||||
# start solaar
|
||||
solaar --window=hide
|
109
nix/home/alacritty/alacritty.nix
Normal file
109
nix/home/alacritty/alacritty.nix
Normal file
@ -0,0 +1,109 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
|
||||
# alacritty
|
||||
programs.alacritty = {
|
||||
enable = true;
|
||||
package = pkgs.alacritty;
|
||||
settings = {
|
||||
|
||||
# general
|
||||
live_config_reload = true;
|
||||
mouse.hide_when_typing = true;
|
||||
scrolling.history = 20000;
|
||||
shell.program = "zsh";
|
||||
|
||||
# environment
|
||||
env = {
|
||||
"TERM" = "xterm-256color";
|
||||
};
|
||||
|
||||
# colors
|
||||
colors = {
|
||||
|
||||
# bright colors
|
||||
bright = {
|
||||
black = "#545454";
|
||||
blue = "#729fcf";
|
||||
cyan = "#34e2e2";
|
||||
green = "#8ae234";
|
||||
magenta = "#ad7fa8";
|
||||
red = "#ef2929";
|
||||
white = "#eeeeec";
|
||||
yellow = "#fce94f";
|
||||
};
|
||||
|
||||
# normal colors
|
||||
normal = {
|
||||
black = "#000000";
|
||||
blue = "#3465a4";
|
||||
cyan = "#06989a";
|
||||
green = "#4e9a06";
|
||||
magenta = "#75507b";
|
||||
red = "#cc0000";
|
||||
white = "#d3d7cf";
|
||||
yellow = "#c4a000";
|
||||
};
|
||||
|
||||
# primary colors
|
||||
primary = {
|
||||
background = "#000000";
|
||||
foreground = "#ffffff";
|
||||
};
|
||||
};
|
||||
|
||||
# cursor
|
||||
cursor = {
|
||||
blink_interval = 750;
|
||||
style = {
|
||||
blinking = "always";
|
||||
shape = "underline";
|
||||
};
|
||||
};
|
||||
|
||||
# font
|
||||
font = {
|
||||
size = 14.0;
|
||||
|
||||
# normal font
|
||||
normal = {
|
||||
family = "JetBrainsMonoNL";
|
||||
style = "Light";
|
||||
};
|
||||
|
||||
# bold font
|
||||
bold = {
|
||||
family = "JetBrainsMonoNL";
|
||||
style = "Light";
|
||||
};
|
||||
|
||||
# italic font
|
||||
italic = {
|
||||
family = "JetBrainsMonoNL";
|
||||
style = "Light";
|
||||
};
|
||||
};
|
||||
|
||||
# keyboard
|
||||
keyboard.bindings = [{
|
||||
action = "SpawnNewInstance";
|
||||
key = "Return";
|
||||
mods = "Control|Shift";
|
||||
}
|
||||
];
|
||||
|
||||
# window
|
||||
window = {
|
||||
opacity = 0.75;
|
||||
class = {
|
||||
general = "Alacritty";
|
||||
instance = "Alacritty";
|
||||
};
|
||||
padding = {
|
||||
x = 7;
|
||||
y = 5;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
1
nix/home/alacritty/default.nix
Normal file
1
nix/home/alacritty/default.nix
Normal file
@ -0,0 +1 @@
|
||||
{ ... }: { imports = [ ./alacritty.nix ]; }
|
25
nix/home/default.nix
Normal file
25
nix/home/default.nix
Normal file
@ -0,0 +1,25 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
|
||||
# imports
|
||||
imports = [
|
||||
./alacritty
|
||||
./git
|
||||
./mpv
|
||||
./ssh
|
||||
./theme
|
||||
./xdg
|
||||
./zsh
|
||||
];
|
||||
|
||||
# user
|
||||
home.username = "simon";
|
||||
home.homeDirectory = "/home/simon";
|
||||
|
||||
# fonts
|
||||
fonts.fontconfig.enable = true;
|
||||
|
||||
# home-manager
|
||||
home.stateVersion = "23.05";
|
||||
programs.home-manager.enable = true;
|
||||
}
|
1
nix/home/git/default.nix
Normal file
1
nix/home/git/default.nix
Normal file
@ -0,0 +1 @@
|
||||
{ ... }: { imports = [ ./git.nix ]; }
|
39
nix/home/git/git.nix
Normal file
39
nix/home/git/git.nix
Normal file
@ -0,0 +1,39 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
|
||||
# git
|
||||
programs.git = {
|
||||
enable = true;
|
||||
userName = "Simon Cornet";
|
||||
userEmail = "simon@simoncor.net";
|
||||
aliases = {
|
||||
|
||||
# commit + message
|
||||
cam = "commit -am";
|
||||
|
||||
};
|
||||
extraConfig = {
|
||||
|
||||
# generic
|
||||
advice.addIgnoredFile = false;
|
||||
init.defaultBranch = "master";
|
||||
push.default = "matching";
|
||||
web.browser = "firefox";
|
||||
|
||||
# core config
|
||||
core = {
|
||||
editor = "vim";
|
||||
filemode = true;
|
||||
|
||||
packedGitLimit = "512m";
|
||||
packedGitWindowSize = "512m";
|
||||
compression = 0;
|
||||
};
|
||||
|
||||
# credential cache
|
||||
credential = {
|
||||
helper = "cache --timeout 172800";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
1
nix/home/mpv/default.nix
Normal file
1
nix/home/mpv/default.nix
Normal file
@ -0,0 +1 @@
|
||||
{ ... }: { imports = [ ./mpv.nix ]; }
|
13
nix/home/mpv/mpv.nix
Normal file
13
nix/home/mpv/mpv.nix
Normal file
@ -0,0 +1,13 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
|
||||
# enable mpv
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
config = {
|
||||
hwdec = "auto";
|
||||
profile = "gpu-hq";
|
||||
vo = "gpu";
|
||||
};
|
||||
};
|
||||
}
|
1
nix/home/ssh/default.nix
Normal file
1
nix/home/ssh/default.nix
Normal file
@ -0,0 +1 @@
|
||||
{ ... }: { imports = [ ./ssh.nix ]; }
|
9
nix/home/ssh/ssh.nix
Normal file
9
nix/home/ssh/ssh.nix
Normal file
@ -0,0 +1,9 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
|
||||
# ssh
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
includes = [ "${config.home.homeDirectory}/.dotfiles/ssh/config" ];
|
||||
};
|
||||
}
|
6
nix/home/theme/default.nix
Normal file
6
nix/home/theme/default.nix
Normal file
@ -0,0 +1,6 @@
|
||||
{...}: {
|
||||
imports = [
|
||||
./gtk.nix
|
||||
./qt.nix
|
||||
];
|
||||
}
|
48
nix/home/theme/gtk.nix
Normal file
48
nix/home/theme/gtk.nix
Normal file
@ -0,0 +1,48 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
# default cursor
|
||||
home.pointerCursor = {
|
||||
name = "Bibata-Modern-Ice";
|
||||
size = 24;
|
||||
package = pkgs.bibata-cursors;
|
||||
};
|
||||
|
||||
# dconf settings
|
||||
dconf.settings = {
|
||||
"org/gnome/desktop/interface" = {
|
||||
color-scheme = "prefer-dark";
|
||||
gtk-theme = "Catppuccin-Macchiato-Standard-Sky-Dark";
|
||||
cursor-theme = config.home.pointerCursor.name;
|
||||
cursor-size = config.home.pointerCursor.size;
|
||||
};
|
||||
};
|
||||
|
||||
# gtk
|
||||
gtk = {
|
||||
enable = true;
|
||||
|
||||
# theme
|
||||
theme = {
|
||||
name = "Catppuccin-Macchiato-Standard-Sky-Dark";
|
||||
package = pkgs.catppuccin-gtk.override {
|
||||
accents = [ "sky" ];
|
||||
size = "standard";
|
||||
variant = "macchiato";
|
||||
};
|
||||
};
|
||||
|
||||
# cursor
|
||||
cursorTheme = {
|
||||
name = config.home.pointerCursor.name;
|
||||
size = config.home.pointerCursor.size;
|
||||
package = config.home.pointerCursor.package;
|
||||
};
|
||||
};
|
||||
|
||||
# xdg settings
|
||||
xdg.configFile = {
|
||||
"gtk-4.0/assets".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/assets";
|
||||
"gtk-4.0/gtk.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk.css";
|
||||
"gtk-4.0/gtk-dark.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk-dark.css";
|
||||
};
|
||||
}
|
9
nix/home/theme/qt.nix
Normal file
9
nix/home/theme/qt.nix
Normal file
@ -0,0 +1,9 @@
|
||||
{ ... }: {
|
||||
|
||||
# qt
|
||||
qt = {
|
||||
enable = true;
|
||||
style.name = "adwaita-dark";
|
||||
platformTheme = "gnome";
|
||||
};
|
||||
}
|
1
nix/home/xdg/default.nix
Normal file
1
nix/home/xdg/default.nix
Normal file
@ -0,0 +1 @@
|
||||
{ ... }: { imports = [ ./xdg.nix ]; }
|
83
nix/home/xdg/xdg.nix
Normal file
83
nix/home/xdg/xdg.nix
Normal file
@ -0,0 +1,83 @@
|
||||
{ config, ... }:
|
||||
{
|
||||
|
||||
# xdg
|
||||
xdg.configFile."mimeapps.list".force = true;
|
||||
|
||||
# set defaults
|
||||
xdg.mimeApps = {
|
||||
enable = true;
|
||||
defaultApplications = {
|
||||
|
||||
# images
|
||||
"image/bmp" = [ "org.gnome.Loupe.desktop" ];
|
||||
"image/gif" = [ "org.gnome.Loupe.desktop" ];
|
||||
"image/heic" = [ "org.gnome.Loupe.desktop" ];
|
||||
"image/jpeg" = [ "org.gnome.Loupe.desktop" ];
|
||||
"image/svg+xml" = [ "org.gnome.Loupe.desktop" ];
|
||||
"image/webp" = [ "org.gnome.Loupe.desktop" ];
|
||||
"image/x-icon" = [ "org.gnome.Loupe.desktop" ];
|
||||
"image/x-panasonic-raw" = [ "org.gnome.Loupe.desktop" ];
|
||||
|
||||
# video
|
||||
"application/mxf" = [ "mpv.desktop" ];
|
||||
"application/sdp" = [ "mpv.desktop" ];
|
||||
"application/smil" = [ "mpv.desktop" ];
|
||||
"application/streamingmedia" = [ "mpv.desktop" ];
|
||||
"application/vnd.apple.mpegurl" = [ "mpv.desktop" ];
|
||||
"application/vnd.ms-asf" = [ "mpv.desktop" ];
|
||||
"application/vnd.rn-realmedia" = [ "mpv.desktop" ];
|
||||
"application/vnd.rn-realmedia-vbr" = [ "mpv.desktop" ];
|
||||
"application/x-cue" = [ "mpv.desktop" ];
|
||||
"application/x-extension-m4a" = [ "mpv.desktop" ];
|
||||
"application/x-extension-mp4" = [ "mpv.desktop" ];
|
||||
"application/x-matroska" = [ "mpv.desktop" ];
|
||||
"application/x-mpegurl" = [ "mpv.desktop" ];
|
||||
"application/x-ogm" = [ "mpv.desktop" ];
|
||||
"application/x-ogm-video" = [ "mpv.desktop" ];
|
||||
"application/x-shorten" = [ "mpv.desktop" ];
|
||||
"application/x-smil" = [ "mpv.desktop" ];
|
||||
"application/x-streamingmedia" = [ "mpv.desktop" ];
|
||||
|
||||
"video/3gp" = [ "mpv.desktop" ];
|
||||
"video/3gpp" = [ "mpv.desktop" ];
|
||||
"video/3gpp2" = [ "mpv.desktop" ];
|
||||
"video/avi" = [ "mpv.desktop" ];
|
||||
"video/divx" = [ "mpv.desktop" ];
|
||||
"video/dv" = [ "mpv.desktop" ];
|
||||
"video/fli" = [ "mpv.desktop" ];
|
||||
"video/flv" = [ "mpv.desktop" ];
|
||||
"video/mkv" = [ "mpv.desktop" ];
|
||||
"video/mp2t" = [ "mpv.desktop" ];
|
||||
"video/mp4" = [ "mpv.desktop" ];
|
||||
"video/mp4v-es" = [ "mpv.desktop" ];
|
||||
"video/mpeg" = [ "mpv.desktop" ];
|
||||
"video/msvideo" = [ "mpv.desktop" ];
|
||||
"video/ogg" = [ "mpv.desktop" ];
|
||||
"video/quicktime" = [ "mpv.desktop" ];
|
||||
"video/vnd.divx" = [ "mpv.desktop" ];
|
||||
"video/vnd.mpegurl" = [ "mpv.desktop" ];
|
||||
"video/vnd.rn-realvideo" = [ "mpv.desktop" ];
|
||||
"video/webm" = [ "mpv.desktop" ];
|
||||
|
||||
"video/x-avi" = [ "mpv.desktop" ];
|
||||
"video/x-flc" = [ "mpv.desktop" ];
|
||||
"video/x-flic" = [ "mpv.desktop" ];
|
||||
"video/x-flv" = [ "mpv.desktop" ];
|
||||
"video/x-m4v" = [ "mpv.desktop" ];
|
||||
"video/x-matroska" = [ "mpv.desktop" ];
|
||||
"video/x-mpeg2" = [ "mpv.desktop" ];
|
||||
"video/x-mpeg3" = [ "mpv.desktop" ];
|
||||
"video/x-ms-afs" = [ "mpv.desktop" ];
|
||||
"video/x-ms-asf" = [ "mpv.desktop" ];
|
||||
"video/x-ms-wmv" = [ "mpv.desktop" ];
|
||||
"video/x-ms-wmx" = [ "mpv.desktop" ];
|
||||
"video/x-ms-wvxvideo" = [ "mpv.desktop" ];
|
||||
"video/x-msvideo" = [ "mpv.desktop" ];
|
||||
"video/x-ogm" = [ "mpv.desktop" ];
|
||||
"video/x-ogm+ogg" = [ "mpv.desktop" ];
|
||||
"video/x-theora" = [ "mpv.desktop" ];
|
||||
"video/x-theora+ogg" = [ "mpv.desktop" ];
|
||||
};
|
||||
};
|
||||
}
|
1
nix/home/zsh/default.nix
Normal file
1
nix/home/zsh/default.nix
Normal file
@ -0,0 +1 @@
|
||||
{ ... }: { imports = [ ./zsh.nix ]; }
|
53
nix/home/zsh/zsh.nix
Normal file
53
nix/home/zsh/zsh.nix
Normal file
@ -0,0 +1,53 @@
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
|
||||
# zsh
|
||||
programs.zsh = {
|
||||
|
||||
# general
|
||||
enable = true;
|
||||
|
||||
# settings
|
||||
enableCompletion = true;
|
||||
enableAutosuggestions = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
|
||||
# oh-my-zsh
|
||||
oh-my-zsh = {
|
||||
enable = true;
|
||||
plugins = [ "git" ];
|
||||
theme = "bira";
|
||||
};
|
||||
|
||||
# aliasses
|
||||
shellAliases = {
|
||||
|
||||
# logout from hyprland
|
||||
tata = "hyprctl dispatch exit";
|
||||
|
||||
# git
|
||||
gfo = "git fetch origin";
|
||||
gmo = "git merge origin";
|
||||
gpo = "git push origin";
|
||||
gfu = "git fetch upstream";
|
||||
gmu = "git merge upstream";
|
||||
|
||||
# k9s
|
||||
k9s = "ssh k9s.siempie.internal -t /home/simon/.local/bin/k9s";
|
||||
|
||||
# nixos-rebuild
|
||||
system-rebuild = "sudo nixos-rebuild switch --flake ~/.dotfiles#`hostname -s`";
|
||||
system-update = "sudo nixos-rebuild switch --upgrade --flake ~/.dotfiles#`hostname -s` && sudo fwupdmgr upgrade";
|
||||
system-clean = "sudo nix-store --gc";
|
||||
system-purge = "sudo nix-collect-garbage -d";
|
||||
|
||||
# sshfs
|
||||
sj-mount-media = "sshfs nas.siempie.local:/tank/media/ /home/simon/remotedir/media";
|
||||
sj-mount-siempie = "sshfs nas.siempie.local:/tank/siempie/ /home/simon/remotedir/siempie";
|
||||
|
||||
umount-media = "sudo umount /home/simon/remotedir/media";
|
||||
umount-siempie = "sudo umount /home/simon/remotedir/siempie";
|
||||
|
||||
};
|
||||
};
|
||||
}
|
30
nix/systems/bootloader.nix
Normal file
30
nix/systems/bootloader.nix
Normal file
@ -0,0 +1,30 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# bootloader
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.systemd-boot.configurationLimit = 5;
|
||||
boot.loader.systemd-boot.consoleMode = "max";
|
||||
|
||||
# kernel stuff
|
||||
boot.kernelModules = [ "tcp_bbr" ];
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
|
||||
# network go brr
|
||||
boot.kernel.sysctl = {
|
||||
"net.ipv4.tcp_congestion_control" = "bbr";
|
||||
};
|
||||
|
||||
# make boot pretty
|
||||
boot.plymouth.enable = true;
|
||||
boot.kernelParams = [ "quiet" ];
|
||||
boot.initrd.systemd.enable = true;
|
||||
|
||||
# make console pretty
|
||||
console = {
|
||||
earlySetup = true;
|
||||
font = "${pkgs.terminus_font}/share/consolefonts/ter-132n.psf.gz";
|
||||
keyMap = "us";
|
||||
packages = with pkgs; [ terminus_font ];
|
||||
};
|
||||
}
|
19
nix/systems/default.nix
Normal file
19
nix/systems/default.nix
Normal file
@ -0,0 +1,19 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
|
||||
# imports
|
||||
imports = [
|
||||
./bootloader.nix
|
||||
./desktop.nix
|
||||
./hardware.nix
|
||||
./locality.nix
|
||||
./networking.nix
|
||||
./nix.nix
|
||||
./packages.nix
|
||||
./security.nix
|
||||
./simon.nix
|
||||
./sound.nix
|
||||
];
|
||||
|
||||
# system state version
|
||||
system.stateVersion = "23.11";
|
||||
}
|
36
nix/systems/desktop.nix
Normal file
36
nix/systems/desktop.nix
Normal file
@ -0,0 +1,36 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# x11
|
||||
services.xserver.enable = true;
|
||||
services.xserver = {
|
||||
layout = "us";
|
||||
xkbVariant = "";
|
||||
};
|
||||
|
||||
# xdg portals
|
||||
xdg.portal.enable = true;
|
||||
xdg.portal.extraPortals = with pkgs; [
|
||||
xdg-desktop-portal-wlr
|
||||
];
|
||||
|
||||
# xdg mime
|
||||
xdg.mime.enable = true;
|
||||
xdg.mime.defaultApplications = {
|
||||
"text/html" = "firefox.desktop";
|
||||
"x-scheme-handler/http" = "firefox.desktop";
|
||||
"x-scheme-handler/https" = "firefox.desktop";
|
||||
"x-scheme-handler/about" = "firefox.desktop";
|
||||
"x-scheme-handler/unknown" = "firefox.desktop";
|
||||
};
|
||||
|
||||
# gnome
|
||||
services.xserver.displayManager.gdm.enable = true;
|
||||
services.xserver.desktopManager.gnome.enable = true;
|
||||
|
||||
# hyprland
|
||||
programs.hyprland = {
|
||||
enable = true;
|
||||
package = pkgs.unstable.hyprland;
|
||||
xwayland.enable = true;
|
||||
};
|
||||
}
|
17
nix/systems/hardware.nix
Normal file
17
nix/systems/hardware.nix
Normal file
@ -0,0 +1,17 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
|
||||
# hardware
|
||||
hardware.opengl.enable = true;
|
||||
hardware.enableRedistributableFirmware = true;
|
||||
|
||||
# hardware logitech
|
||||
hardware.logitech.wireless.enable = true;
|
||||
hardware.logitech.wireless.enableGraphical = true;
|
||||
|
||||
# enable bluetooth
|
||||
hardware.bluetooth.enable = true;
|
||||
hardware.bluetooth.powerOnBoot = true;
|
||||
|
||||
# power management
|
||||
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
||||
}
|
21
nix/systems/itclt75/configuration.nix
Normal file
21
nix/systems/itclt75/configuration.nix
Normal file
@ -0,0 +1,21 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# imports
|
||||
imports = [
|
||||
../default.nix
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# opengl
|
||||
hardware.opengl = {
|
||||
extraPackages = with pkgs; [
|
||||
intel-media-driver
|
||||
intel-vaapi-driver
|
||||
vaapiVdpau
|
||||
libvdpau-va-gl
|
||||
];
|
||||
};
|
||||
|
||||
# networking
|
||||
networking.hostName = "itclt75";
|
||||
}
|
48
nix/systems/itclt75/hardware-configuration.nix
Normal file
48
nix/systems/itclt75/hardware-configuration.nix
Normal file
@ -0,0 +1,48 @@
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
{
|
||||
|
||||
# imports
|
||||
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||
|
||||
# bootloader
|
||||
boot.extraModulePackages = [ ];
|
||||
boot.initrd.kernelModules = [ "kvm-intel" ];
|
||||
boot.initrd.availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
|
||||
boot.initrd.luks = {
|
||||
devices = {
|
||||
|
||||
# encrypted root
|
||||
"luks-057d6954-2fbe-4566-a0b9-cc7b8a9f9fd8" = {
|
||||
device = "/dev/disk/by-uuid/057d6954-2fbe-4566-a0b9-cc7b8a9f9fd8";
|
||||
};
|
||||
|
||||
# encrypted swap
|
||||
"luks-4dcf40dc-d12c-43e4-8727-687451750f90" = {
|
||||
device = "/dev/disk/by-uuid/4dcf40dc-d12c-43e4-8727-687451750f90";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# filesystems - boot
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/5180-0B5A";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
# filesystems - root
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/ad8f83d1-3c00-49cc-90eb-8679d6600ddc";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
# swap device
|
||||
swapDevices = [{
|
||||
device = "/dev/disk/by-uuid/e4772fc5-e676-48e4-9c35-3934e9a178b1";
|
||||
}];
|
||||
|
||||
# networking
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
|
||||
# hardware
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
20
nix/systems/locality.nix
Normal file
20
nix/systems/locality.nix
Normal file
@ -0,0 +1,20 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# timezone
|
||||
time.timeZone = "Europe/Amsterdam";
|
||||
|
||||
# internationalisation
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
i18n.extraLocaleSettings = {
|
||||
LC_ADDRESS = "nl_NL.UTF-8";
|
||||
LC_IDENTIFICATION = "en_US.UTF-8";
|
||||
LC_MEASUREMENT = "nl_NL.UTF-8";
|
||||
LC_MONETARY = "nl_NL.UTF-8";
|
||||
LC_NAME = "en_US.UTF-8";
|
||||
LC_NUMERIC = "nl_NL.UTF-8";
|
||||
LC_PAPER = "nl_NL.UTF-8";
|
||||
LC_TELEPHONE = "nl_NL.UTF-8";
|
||||
LC_TIME = "nl_NL.UTF-8";
|
||||
};
|
||||
|
||||
}
|
7
nix/systems/networking.nix
Normal file
7
nix/systems/networking.nix
Normal file
@ -0,0 +1,7 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# networking
|
||||
networking.networkmanager.enable = true;
|
||||
networking.firewall.enable = false;
|
||||
|
||||
}
|
31
nix/systems/nix.nix
Normal file
31
nix/systems/nix.nix
Normal file
@ -0,0 +1,31 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
|
||||
# nix
|
||||
nix = {
|
||||
|
||||
# garbage collection
|
||||
gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 7d";
|
||||
};
|
||||
|
||||
# nix package with flakes
|
||||
package = pkgs.nixFlakes;
|
||||
|
||||
# nix settings
|
||||
settings = {
|
||||
auto-optimise-store = true;
|
||||
};
|
||||
|
||||
# extra options
|
||||
extraOptions = ''
|
||||
experimental-features = nix-command flakes
|
||||
keep-outputs = true
|
||||
keep-derivations = true
|
||||
'';
|
||||
};
|
||||
|
||||
# nix pkgs
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
73
nix/systems/packages.nix
Normal file
73
nix/systems/packages.nix
Normal file
@ -0,0 +1,73 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
environment.systemPackages = with pkgs; [
|
||||
|
||||
# fonts
|
||||
font-awesome
|
||||
jetbrains-mono
|
||||
ubuntu_font_family
|
||||
|
||||
# hyprland
|
||||
adwaita-qt
|
||||
brightnessctl
|
||||
unstable.grimblast
|
||||
grim
|
||||
imagemagick
|
||||
jq
|
||||
lxappearance-gtk2
|
||||
unstable.satty
|
||||
slurp
|
||||
socat
|
||||
swaybg
|
||||
swaylock
|
||||
waybar
|
||||
wofi
|
||||
xfce.xfce4-settings
|
||||
|
||||
# system
|
||||
fastfetch
|
||||
fwupd
|
||||
intel-gpu-tools
|
||||
killall
|
||||
radeontop
|
||||
pciutils
|
||||
powertop
|
||||
solaar
|
||||
spice-vdagent
|
||||
sshfs
|
||||
wl-clipboard
|
||||
|
||||
# usability
|
||||
bat
|
||||
btop
|
||||
unstable.bitwarden
|
||||
unstable.clipse
|
||||
firefox
|
||||
git
|
||||
gimp
|
||||
unstable.google-chrome
|
||||
htop
|
||||
kitty
|
||||
meld
|
||||
mpv
|
||||
unstable.microsoft-edge
|
||||
nextcloud-client
|
||||
screen
|
||||
unstable.spotify
|
||||
unstable.vscode
|
||||
vim
|
||||
wget
|
||||
];
|
||||
|
||||
# services
|
||||
services.blueman.enable = true;
|
||||
services.fwupd.enable = true;
|
||||
services.openssh.enable = true;
|
||||
services.printing.enable = true;
|
||||
services.tailscale = {
|
||||
enable = true;
|
||||
package = pkgs.unstable.tailscale;
|
||||
};
|
||||
}
|
21
nix/systems/phaedra/configuration.nix
Normal file
21
nix/systems/phaedra/configuration.nix
Normal file
@ -0,0 +1,21 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# imports
|
||||
imports = [
|
||||
../default.nix
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# opengl
|
||||
hardware.opengl = {
|
||||
extraPackages = with pkgs; [
|
||||
intel-media-driver
|
||||
intel-vaapi-driver
|
||||
vaapiVdpau
|
||||
libvdpau-va-gl
|
||||
];
|
||||
};
|
||||
|
||||
# networking
|
||||
networking.hostName = "phaedra";
|
||||
}
|
30
nix/systems/phaedra/hardware-configuration.nix
Normal file
30
nix/systems/phaedra/hardware-configuration.nix
Normal file
@ -0,0 +1,30 @@
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
{
|
||||
|
||||
# imports
|
||||
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||
|
||||
# bootloader
|
||||
boot.extraModulePackages = [ ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-amd" "amdgpu" ];
|
||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
|
||||
|
||||
# filesystems - boot
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-label/boot";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
# filesystems - root
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-label/root";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
# networking
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
|
||||
# hardware
|
||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
13
nix/systems/security.nix
Normal file
13
nix/systems/security.nix
Normal file
@ -0,0 +1,13 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# pam
|
||||
security.pam.services.swaylock = {
|
||||
text = ''auth include login'';
|
||||
};
|
||||
|
||||
# sudo
|
||||
security.sudo.wheelNeedsPassword = false;
|
||||
|
||||
# enable realtimekit
|
||||
security.rtkit.enable = true;
|
||||
}
|
14
nix/systems/simon.nix
Normal file
14
nix/systems/simon.nix
Normal file
@ -0,0 +1,14 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# enable zsh
|
||||
programs.zsh.enable = true;
|
||||
|
||||
# user simon
|
||||
users.users.simon = {
|
||||
isNormalUser = true;
|
||||
description = "Simon Cornet";
|
||||
extraGroups = [ "networkmanager" "wheel" ];
|
||||
initialPassword = "changeme";
|
||||
shell = pkgs.zsh;
|
||||
};
|
||||
}
|
24
nix/systems/sound.nix
Normal file
24
nix/systems/sound.nix
Normal file
@ -0,0 +1,24 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# enable sound
|
||||
sound = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
# disable pulseaudio
|
||||
hardware = {
|
||||
pulseaudio = {
|
||||
enable = false;
|
||||
};
|
||||
};
|
||||
|
||||
# enable pipewire
|
||||
services.pipewire = {
|
||||
alsa = {
|
||||
enable = true;
|
||||
support32Bit = true;
|
||||
};
|
||||
enable = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
}
|
21
nix/systems/talathiel/configuration.nix
Normal file
21
nix/systems/talathiel/configuration.nix
Normal file
@ -0,0 +1,21 @@
|
||||
{ config, pkgs, ... }: {
|
||||
|
||||
# imports
|
||||
imports = [
|
||||
../default.nix
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# opengl
|
||||
hardware.opengl = {
|
||||
extraPackages = with pkgs; [
|
||||
intel-media-driver
|
||||
intel-vaapi-driver
|
||||
vaapiVdpau
|
||||
libvdpau-va-gl
|
||||
];
|
||||
};
|
||||
|
||||
# networking
|
||||
networking.hostName = "talathiel";
|
||||
}
|
30
nix/systems/talathiel/hardware-configuration.nix
Normal file
30
nix/systems/talathiel/hardware-configuration.nix
Normal file
@ -0,0 +1,30 @@
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
{
|
||||
|
||||
# imports
|
||||
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||
|
||||
# bootloader
|
||||
boot.extraModulePackages = [ ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
|
||||
|
||||
# filesystems - boot
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-label/boot";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
# filesystems - root
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-label/root";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
# networking
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
|
||||
# hardware
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
99
readme.md
Normal file
99
readme.md
Normal file
@ -0,0 +1,99 @@
|
||||
# NixOS configuration for siempie
|
||||
base: NixOS 23.11
|
||||
|
||||
## Phase 1: Installation (minimal ISO)
|
||||
```
|
||||
nix-shell -p git
|
||||
```
|
||||
|
||||
Create partitions
|
||||
```
|
||||
g (gpt disk label)
|
||||
n
|
||||
1 (partition number [1/128])
|
||||
2048 first sector
|
||||
+500M last sector (boot sector size)
|
||||
t
|
||||
1 (EFI System)
|
||||
n
|
||||
2
|
||||
default (fill up partition)
|
||||
default (fill up partition)
|
||||
w (write)
|
||||
```
|
||||
|
||||
Labels and filesystems
|
||||
```
|
||||
sudo mkfs.fat -F 32 /dev/sda1
|
||||
sudo mkfs.ext4 /dev/sda2 -L root
|
||||
sudo fatlabel /dev/sda1 boot
|
||||
sudo mount /dev/disk/by-label/root /mnt
|
||||
sudo mkdir -p /mnt/boot
|
||||
sudo mount /dev/disk/by-label/boot /mnt/boot
|
||||
```
|
||||
|
||||
Clone dotfiles repo
|
||||
```
|
||||
git clone https://git.simoncor.net/siempie/dotfiles-nix.git
|
||||
```
|
||||
|
||||
Nix installation
|
||||
```
|
||||
cd dotfiles
|
||||
sudo nixos-install --flake .#<phaedra|talathiel>
|
||||
```
|
||||
|
||||
Reboot
|
||||
```
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
|
||||
## Phase 2: Finalize
|
||||
Clone dotfiles
|
||||
```
|
||||
git clone https://git.simoncor.net/siempie/dotfiles-nix.git ~/.dotfiles
|
||||
```
|
||||
|
||||
Link Hyprland
|
||||
```
|
||||
rm -rf ~/.config/hypr/hyprland
|
||||
ln -s ~/.dotfiles/hyprland/hyprland.conf ~/.config/hypr/hyprland.conf
|
||||
```
|
||||
|
||||
Login to apps
|
||||
```
|
||||
bitwarden
|
||||
firefox + bitwarden plugin
|
||||
google-chrome + bitwarden -plugin
|
||||
nextcloud
|
||||
vscode
|
||||
spotify
|
||||
```
|
||||
|
||||
Set avatar for GDM
|
||||
```
|
||||
! dont forget !
|
||||
```
|
||||
|
||||
Tailscale
|
||||
```
|
||||
sudo tailscale up --login-server=https://vpn.mirahsimon.us:443 --accept-routes --operator=$USER
|
||||
```
|
||||
|
||||
SSH keys
|
||||
```
|
||||
! dont forget !
|
||||
```
|
||||
|
||||
|
||||
## Phase 3: Maintenance
|
||||
Rebuild after changes
|
||||
```
|
||||
sudo nixos-rebuild switch --upgrade --flake ~/.dotfiles#<system_name>
|
||||
```
|
||||
|
||||
Regularly update firmware
|
||||
```
|
||||
sudo fwupdmgr update
|
||||
```
|
24
ssh/config
Normal file
24
ssh/config
Normal file
@ -0,0 +1,24 @@
|
||||
# generic
|
||||
host *
|
||||
user simon
|
||||
identityfile ~/.ssh/talathiel
|
||||
ServerAliveInterval 60
|
||||
|
||||
|
||||
# siempie lab
|
||||
host *.siempie.local
|
||||
stricthostkeychecking no
|
||||
proxyjump siempie.com
|
||||
|
||||
host *.siempie.internal
|
||||
stricthostkeychecking no
|
||||
proxyjump siempie.com
|
||||
|
||||
host *.hackerboys.internal
|
||||
stricthostkeychecking no
|
||||
proxyjump siempie.com
|
||||
|
||||
|
||||
# siempie do
|
||||
host *.do.local
|
||||
proxyjump do.siempie.com
|
54
swaylock/lock.sh
Executable file
54
swaylock/lock.sh
Executable file
@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
# get active monitors
|
||||
active_monitors=($(hyprctl monitors | grep -i monitor | awk '{print $2}'))
|
||||
home_dir=$(xdg-user-dir)
|
||||
|
||||
|
||||
# create blurred images per active screen
|
||||
for monitor in ${active_monitors}
|
||||
do
|
||||
|
||||
# variables
|
||||
image=/tmp/swaylock_$monitor.png
|
||||
image_blur=/tmp/swaylock_blur_$monitor.png
|
||||
lockargs=($lockargs --image $monitor:$image_blur)
|
||||
|
||||
# create image
|
||||
grim -o $monitor $image
|
||||
|
||||
# create blurred image
|
||||
convert $image -blur 0x5 $image_blur
|
||||
|
||||
done
|
||||
|
||||
|
||||
# lock the screen using the newly created image
|
||||
swaylock \
|
||||
--scaling center \
|
||||
--hide-keyboard-layout \
|
||||
--indicator-radius 100 \
|
||||
--indicator-thickness 5 \
|
||||
--ring-color 285577ff \
|
||||
--ring-ver-color 89b4fa \
|
||||
--ring-wrong-color f38ba8 \
|
||||
--ring-clear-color a6e3a1 \
|
||||
--key-hl-color 1e1e2e \
|
||||
--bs-hl-color eba0ac \
|
||||
--text-color 11111b \
|
||||
--text-caps-lock-color 11111b \
|
||||
--line-color 00000000 \
|
||||
--line-ver-color 00000000 \
|
||||
--line-wrong-color 00000000 \
|
||||
--line-clear-color 00000000 \
|
||||
--separator-color 00000000 \
|
||||
--inside-color 285577ff \
|
||||
--inside-ver-color 89b4fa\
|
||||
--inside-wrong-color f38ba8 \
|
||||
--inside-clear-color a6e3a1 \
|
||||
--color 1e1e2e80 \
|
||||
$lockargs
|
||||
|
||||
|
||||
# cleanup
|
||||
rm -f /tmp/swaylock*.png
|
16
wallpaper/startup.sh
Executable file
16
wallpaper/startup.sh
Executable file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
# check if swaybg is already running
|
||||
pkill swaybg
|
||||
|
||||
# config
|
||||
wallpaper=(~/Pictures/wallpaper.jpg)
|
||||
wallpaper_url='https://wallscloud.net/img/resize/3840/2160/MM/2022-03-30-blurred.jpg'
|
||||
|
||||
# download the wallpaper
|
||||
if [ ! -f ${wallpaper} ]; then
|
||||
wget -q -O ${wallpaper} ${wallpaper_url}
|
||||
fi
|
||||
|
||||
# start swaybg
|
||||
swaybg -m fill -i ${wallpaper} &
|
178
waybar/spotify.py
Normal file
178
waybar/spotify.py
Normal file
@ -0,0 +1,178 @@
|
||||
#!/usr/bin/env python3
|
||||
import gi
|
||||
gi.require_version("Playerctl", "2.0")
|
||||
from gi.repository import Playerctl, GLib
|
||||
from gi.repository.Playerctl import Player
|
||||
import argparse
|
||||
import logging
|
||||
import sys
|
||||
import signal
|
||||
import gi
|
||||
import json
|
||||
import os
|
||||
from typing import List
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def signal_handler(sig, frame):
|
||||
logger.info("Received signal to stop, exiting")
|
||||
sys.stdout.write("\n")
|
||||
sys.stdout.flush()
|
||||
# loop.quit()
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
class PlayerManager:
|
||||
def __init__(self, selected_player=None):
|
||||
self.manager = Playerctl.PlayerManager()
|
||||
self.loop = GLib.MainLoop()
|
||||
self.manager.connect(
|
||||
"name-appeared", lambda *args: self.on_player_appeared(*args))
|
||||
self.manager.connect(
|
||||
"player-vanished", lambda *args: self.on_player_vanished(*args))
|
||||
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
||||
self.selected_player = selected_player
|
||||
|
||||
self.init_players()
|
||||
|
||||
def init_players(self):
|
||||
for player in self.manager.props.player_names:
|
||||
if self.selected_player is not None and self.selected_player != player.name:
|
||||
logger.debug(f"{player.name} is not the filtered player, skipping it")
|
||||
continue
|
||||
self.init_player(player)
|
||||
|
||||
def run(self):
|
||||
logger.info("Starting main loop")
|
||||
self.loop.run()
|
||||
|
||||
def init_player(self, player):
|
||||
logger.info(f"Initialize new player: {player.name}")
|
||||
player = Playerctl.Player.new_from_name(player)
|
||||
player.connect("playback-status",
|
||||
self.on_playback_status_changed, None)
|
||||
player.connect("metadata", self.on_metadata_changed, None)
|
||||
self.manager.manage_player(player)
|
||||
self.on_metadata_changed(player, player.props.metadata)
|
||||
|
||||
def get_players(self) -> List[Player]:
|
||||
return self.manager.props.players
|
||||
|
||||
def write_output(self, text, player):
|
||||
logger.debug(f"Writing output: {text}")
|
||||
|
||||
output = {"text": text,
|
||||
"class": "custom-" + player.props.player_name,
|
||||
"alt": player.props.player_name}
|
||||
|
||||
sys.stdout.write(json.dumps(output) + "\n")
|
||||
sys.stdout.flush()
|
||||
|
||||
def clear_output(self):
|
||||
sys.stdout.write("\n")
|
||||
sys.stdout.flush()
|
||||
|
||||
def on_playback_status_changed(self, player, status, _=None):
|
||||
logger.debug(f"Playback status changed for player {player.props.player_name}: {status}")
|
||||
self.on_metadata_changed(player, player.props.metadata)
|
||||
|
||||
def get_first_playing_player(self):
|
||||
players = self.get_players()
|
||||
logger.debug(f"Getting first playing player from {len(players)} players")
|
||||
if len(players) > 0:
|
||||
# if any are playing, show the first one that is playing
|
||||
# reverse order, so that the most recently added ones are preferred
|
||||
for player in players[::-1]:
|
||||
if player.props.status == "Playing":
|
||||
return player
|
||||
# if none are playing, show the first one
|
||||
return players[0]
|
||||
else:
|
||||
logger.debug("No players found")
|
||||
return None
|
||||
|
||||
def show_most_important_player(self):
|
||||
logger.debug("Showing most important player")
|
||||
# show the currently playing player
|
||||
# or else show the first paused player
|
||||
# or else show nothing
|
||||
current_player = self.get_first_playing_player()
|
||||
if current_player is not None:
|
||||
self.on_metadata_changed(current_player, current_player.props.metadata)
|
||||
else:
|
||||
self.clear_output()
|
||||
|
||||
def on_metadata_changed(self, player, metadata, _=None):
|
||||
logger.debug(f"Metadata changed for player {player.props.player_name}")
|
||||
player_name = player.props.player_name
|
||||
|
||||
track_info = ""
|
||||
if player_name == "spotify" and "mpris:trackid" in metadata.keys() and ":ad:" in player.props.metadata["mpris:trackid"]:
|
||||
track_info = "Advertisement"
|
||||
else:
|
||||
track_info = " "
|
||||
|
||||
if track_info:
|
||||
if player.props.status == "Playing":
|
||||
track_info = "▶️"
|
||||
else:
|
||||
track_info = "⏸️"
|
||||
# only print output if no other player is playing
|
||||
current_playing = self.get_first_playing_player()
|
||||
if current_playing is None or current_playing.props.player_name == player.props.player_name:
|
||||
self.write_output(track_info, player)
|
||||
else:
|
||||
logger.debug(f"Other player {current_playing.props.player_name} is playing, skipping")
|
||||
|
||||
def on_player_appeared(self, _, player):
|
||||
logger.info(f"Player has appeared: {player.name}")
|
||||
if player is not None and (self.selected_player is None or player.name == self.selected_player):
|
||||
self.init_player(player)
|
||||
else:
|
||||
logger.debug(
|
||||
"New player appeared, but it's not the selected player, skipping")
|
||||
|
||||
def on_player_vanished(self, _, player):
|
||||
logger.info(f"Player {player.props.player_name} has vanished")
|
||||
self.show_most_important_player()
|
||||
|
||||
def parse_arguments():
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
# Increase verbosity with every occurrence of -v
|
||||
parser.add_argument("-v", "--verbose", action="count", default=0)
|
||||
|
||||
# Define for which player we"re listening
|
||||
parser.add_argument("--player")
|
||||
|
||||
parser.add_argument("--enable-logging", action="store_true")
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main():
|
||||
arguments = parse_arguments()
|
||||
|
||||
# Initialize logging
|
||||
if arguments.enable_logging:
|
||||
logfile = os.path.join(os.path.dirname(
|
||||
os.path.realpath(__file__)), "media-player.log")
|
||||
logging.basicConfig(filename=logfile, level=logging.DEBUG,
|
||||
format="%(asctime)s %(name)s %(levelname)s:%(lineno)d %(message)s")
|
||||
|
||||
# Logging is set by default to WARN and higher.
|
||||
# With every occurrence of -v it's lowered by one
|
||||
logger.setLevel(max((3 - arguments.verbose) * 10, 0))
|
||||
|
||||
logger.info("Creating player manager")
|
||||
if arguments.player:
|
||||
logger.info(f"Filtering for player: {arguments.player}")
|
||||
player = PlayerManager(arguments.player)
|
||||
player.run()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
10
waybar/startup.sh
Executable file
10
waybar/startup.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
# check if waybar is already running
|
||||
pkill waybar
|
||||
|
||||
# start waybar
|
||||
waybar \
|
||||
-c ~/.dotfiles/waybar/waybar.conf \
|
||||
-s ~/.dotfiles/waybar/style.css \
|
||||
&
|
89
waybar/style.css
Normal file
89
waybar/style.css
Normal file
@ -0,0 +1,89 @@
|
||||
* {
|
||||
border: 3px;
|
||||
border-radius: 10px;
|
||||
font-family: Ubuntu, Light;
|
||||
font-weight: normal;
|
||||
font-size: 17px;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background: rgba(21, 18, 27, 0);
|
||||
color: #cdd6f4;
|
||||
}
|
||||
|
||||
tooltip {
|
||||
background: rgba(12, 12, 12, 0.9);
|
||||
border-radius: 10px;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
border-color: #4771c9;
|
||||
}
|
||||
|
||||
#battery,
|
||||
#backlight,
|
||||
#clock,
|
||||
#cpu,
|
||||
#memory,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#workspaces,
|
||||
#custom-wireguard,
|
||||
#tray,
|
||||
#window {
|
||||
background: rgba(12, 12, 12, 0.4);
|
||||
padding: 0px 10px;
|
||||
margin: 5px 5px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 0px;
|
||||
border: 2px solid #595959;
|
||||
}
|
||||
|
||||
#backlight {
|
||||
color: #89b4fa;
|
||||
}
|
||||
|
||||
#battery {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
|
||||
#clock {
|
||||
color: #fab387;
|
||||
border: 2px solid #4771c9;
|
||||
}
|
||||
|
||||
#cpu {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
|
||||
#custom-wireguard {
|
||||
color: #89b4fa;
|
||||
}
|
||||
|
||||
#custom-spotify {
|
||||
padding: 5px 5px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#memory {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
|
||||
#network {
|
||||
color: #89b4fa;
|
||||
}
|
||||
|
||||
#pulseaudio {
|
||||
color: #89b4fa;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
#workspaces{
|
||||
color: #89b4fa;
|
||||
margin-left: 10px;
|
||||
padding: 0px 0px;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
color: #89b4fa;
|
||||
}
|
156
waybar/waybar.conf
Normal file
156
waybar/waybar.conf
Normal file
@ -0,0 +1,156 @@
|
||||
{
|
||||
|
||||
// generic
|
||||
"exclusive": true,
|
||||
"gtk-layer-shell": true,
|
||||
"height": 0,
|
||||
"layer": "top",
|
||||
"mod": "dock",
|
||||
"passthrough": false,
|
||||
"position": "top",
|
||||
|
||||
// modules location
|
||||
"modules-left": [
|
||||
"hyprland/workspaces",
|
||||
"hyprland/window",
|
||||
],
|
||||
|
||||
"modules-center": [
|
||||
"clock"
|
||||
],
|
||||
|
||||
"modules-right": [
|
||||
"custom/spotify",
|
||||
"tray",
|
||||
"cpu",
|
||||
"memory",
|
||||
"network",
|
||||
"custom/wireguard",
|
||||
"battery",
|
||||
"backlight",
|
||||
"pulseaudio",
|
||||
],
|
||||
|
||||
// modules
|
||||
"backlight": {
|
||||
"device": "intel_backlight",
|
||||
"format": "{icon} {percent}%",
|
||||
"format-icons": [
|
||||
"🔅",
|
||||
"🔆",
|
||||
"☀️"
|
||||
],
|
||||
"max-length": 7,
|
||||
"min-length": 7,
|
||||
"on-scroll-up": "brightnessctl set 5%+",
|
||||
"on-scroll-down": "brightnessctl set 5%-"
|
||||
},
|
||||
|
||||
"battery": {
|
||||
"states": {
|
||||
"good": 75,
|
||||
"warning": 50,
|
||||
"critical": 15
|
||||
},
|
||||
"format": "{icon} {capacity}%",
|
||||
"format-icons": [
|
||||
"🪫",
|
||||
"🪫",
|
||||
"🪫",
|
||||
"🔋",
|
||||
"🔋"
|
||||
],
|
||||
"max-length": 7,
|
||||
"min-length": 7
|
||||
},
|
||||
|
||||
"clock": {
|
||||
"format": "{:🕒 %R 🗓️ %d-%m}",
|
||||
"timezones": ["Europe/Amsterdam", "Asia/Kolkata"],
|
||||
"actions": { "on-click": "tz_down" },
|
||||
"tooltip-format": "<tt><small>{calendar}</small></tt>"
|
||||
},
|
||||
|
||||
"cpu": {
|
||||
"interval": 5,
|
||||
"max-length": 6,
|
||||
"min-length": 6,
|
||||
"format": "🧠 {usage:2}%"
|
||||
},
|
||||
|
||||
"custom/wireguard": {
|
||||
"interval": 2,
|
||||
"format": "{}",
|
||||
"exec": "$HOME/.dotfiles/wireguard/wireguard.sh status",
|
||||
"on-click": "$HOME/.dotfiles/wireguard/wireguard.sh switch"
|
||||
},
|
||||
|
||||
"custom/spotify": {
|
||||
"exec": "/usr/bin/python3 $HOME/.dotfiles/waybar/spotify.py --player spotify",
|
||||
"format": "{}",
|
||||
"return-type": "json",
|
||||
"max-length": 3,
|
||||
"min-length": 3,
|
||||
"on-click": "playerctl play-pause"
|
||||
},
|
||||
|
||||
"hyprland/window": {
|
||||
"format": "{}"
|
||||
},
|
||||
|
||||
"hyprland/workspaces": {
|
||||
"all-outputs": true,
|
||||
"sort-by-number": true,
|
||||
"format": "{icon}",
|
||||
"format-icons": {
|
||||
"1": "1",
|
||||
"2": "2",
|
||||
"3": "3",
|
||||
"4": "4",
|
||||
"5": "5",
|
||||
"6": "6",
|
||||
"7": "7",
|
||||
"8": "8",
|
||||
"9": "9",
|
||||
"10": "10"
|
||||
}
|
||||
},
|
||||
|
||||
"memory": {
|
||||
"interval": 5,
|
||||
"format": "🐏 {}%",
|
||||
"max-length": 6,
|
||||
"min-length": 6,
|
||||
"tooltip-format": "{used:0.1f}GB / {total:0.1f}GB",
|
||||
},
|
||||
|
||||
"network": {
|
||||
"tooltip": true,
|
||||
"format-wifi": "📡 {ipaddr}/{cidr}",
|
||||
"format-ethernet": "🌐 {ipaddr}/{cidr}",
|
||||
"tooltip-format-wifi": "SSID: {essid}\nSignal Strength: {signalStrength}%\nIP: {ipaddr}\nNetmask: {netmask} (/{cidr})\nGateway: {gwaddr}",
|
||||
"tooltip-format-ethernet": "IP: {ipaddr}\nNetmask: {netmask} (/{cidr})\nGateway: {gwaddr}",
|
||||
"on-click": "alacritty --class nmtui --command ~/.dotfiles/hyprland/nmtui.sh"
|
||||
},
|
||||
|
||||
"pulseaudio": {
|
||||
"format": "{icon} {volume:2}%",
|
||||
"format-muted": "🔇",
|
||||
"format-icons": {
|
||||
"headphones": "🎧",
|
||||
"default": [
|
||||
"🔉",
|
||||
"🔊"
|
||||
]
|
||||
},
|
||||
"scroll-step": 5,
|
||||
"max-length": 8,
|
||||
"min-length": 8,
|
||||
"on-click": "pavucontrol"
|
||||
},
|
||||
|
||||
"tray": {
|
||||
"icon-size": 13,
|
||||
"spacing": 10
|
||||
}
|
||||
}
|
50
wireguard/wireguard.sh
Executable file
50
wireguard/wireguard.sh
Executable file
@ -0,0 +1,50 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
# variables
|
||||
hostname_short=$(/usr/bin/hostname --short)
|
||||
tailscale_bin="tailscale"
|
||||
tailscale_status=$("$tailscale_bin" status)
|
||||
|
||||
# status vpn
|
||||
status_vpn () {
|
||||
vpn_status=""
|
||||
|
||||
# check for tailscale status
|
||||
if echo "$tailscale_status" | grep "$hostname_short" &> /dev/null; then
|
||||
vpn_status+='🔒 '
|
||||
else
|
||||
vpn_status+='🛡️ '
|
||||
fi
|
||||
|
||||
# check for direct connectivity
|
||||
if "$tailscale_bin" status | grep allegro | grep direct &> /dev/null; then
|
||||
vpn_status+='✅'
|
||||
else
|
||||
vpn_status+='❌'
|
||||
fi
|
||||
|
||||
echo "$vpn_status"
|
||||
}
|
||||
|
||||
# switch vpn
|
||||
switch_vpn () {
|
||||
if echo "$tailscale_status" | grep "$hostname_short" &> /dev/null; then
|
||||
"$tailscale_bin" down
|
||||
else
|
||||
"$tailscale_bin" up
|
||||
fi
|
||||
}
|
||||
|
||||
# main function
|
||||
case $1 in
|
||||
switch)
|
||||
switch_vpn &> /dev/null
|
||||
;;
|
||||
status)
|
||||
status_vpn
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {switch|status}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
51
wofi/style.css
Normal file
51
wofi/style.css
Normal file
@ -0,0 +1,51 @@
|
||||
@define-color base #222222 ;
|
||||
@define-color blue_border #528bff ;
|
||||
@define-color selected_color #444444 ;
|
||||
@define-color font_color #b6c0cd ;
|
||||
|
||||
*{
|
||||
font-family: "Ubuntu, Light";
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
window {
|
||||
border: 0px solid @blue_border;
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
#input {
|
||||
border: none;
|
||||
border-radius: 5px;
|
||||
color: @font_color;
|
||||
margin-bottom: 15px;
|
||||
padding:3px;
|
||||
}
|
||||
|
||||
#inner-box {
|
||||
background-color: @base;
|
||||
box-shadow: -4px -3px 45px 21px rgba(0,0,0,0.35);
|
||||
}
|
||||
|
||||
#outer-box {
|
||||
background-color: @base;
|
||||
border-radius: 15px;
|
||||
margin: 5px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#text {
|
||||
color: @font_color;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
#entry {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#entry:nth-child(even) {
|
||||
background-color: @base;
|
||||
}
|
||||
|
||||
#entry:selected {
|
||||
background-color: @selected_color;
|
||||
}
|
15
wofi/wofi.sh
Executable file
15
wofi/wofi.sh
Executable file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env zsh
|
||||
|
||||
# check if wofi is already running
|
||||
pkill wofi
|
||||
|
||||
# start wofi
|
||||
wofi \
|
||||
--show drun \
|
||||
--no-action \
|
||||
--width=600 \
|
||||
--height=600 \
|
||||
--normal-window \
|
||||
--allow-images \
|
||||
--prompt="Applications ..." \
|
||||
--style=/home/simon/.dotfiles/wofi/style.css
|
84
zsh/.zshrc
Normal file
84
zsh/.zshrc
Normal file
@ -0,0 +1,84 @@
|
||||
# zsh
|
||||
export ZSH=/home/simon/.oh-my-zsh
|
||||
ZSH_THEME="bira"
|
||||
plugins=(git)
|
||||
source $ZSH/oh-my-zsh.sh
|
||||
|
||||
# autocomplete
|
||||
[[ $commands[kubectl] ]] && source <(kubectl completion zsh)
|
||||
|
||||
# generic
|
||||
alias cat="bat"
|
||||
alias ccat="/usr/bin/cat"
|
||||
|
||||
# hyperland
|
||||
alias tata="hyprctl dispatch exit"
|
||||
|
||||
# git
|
||||
alias gfo="git fetch origin"
|
||||
alias gmo="git merge origin/master"
|
||||
alias gpo="git push origin"
|
||||
alias gfu="git fetch upstream"
|
||||
alias gmu="git merge upstream/master"
|
||||
|
||||
# teleport
|
||||
alias tlogin="tsh login --proxy=tele.simoncor.net --user=siempie"
|
||||
alias tssh="tsh ssh"
|
||||
|
||||
# fedora update
|
||||
alias fupdate="sudo dnf update -y && sudo flatpak update -y && sudo fwupdmgr refresh --force && sudo fwupdmgr update"
|
||||
|
||||
# wireguard
|
||||
alias wg-start="nmcli connection up wg0"
|
||||
alias wg-stop="nmcli connection down wg0"
|
||||
alias wg-status="nmcli --overview connection show wg0"
|
||||
|
||||
# manage sshfs mounts
|
||||
# media
|
||||
alias sj-mount-media="sshfs nas.siempie.local:/tank/media/ /home/simon/remotedir/media"
|
||||
alias umount-media="sudo umount /home/simon/remotedir/media"
|
||||
|
||||
# siempie
|
||||
alias sj-mount-siempie="sshfs nas.siempie.local:/tank/siempie/ /home/simon/remotedir/siempie"
|
||||
alias umount-siempie="sudo umount /home/simon/remotedir/siempie"
|
||||
|
||||
|
||||
# manage screen tunnels
|
||||
# siempie
|
||||
alias start-siempie-tunnel="screen -S siempie-tunnel -d -m ssh -N -D 9001 siempie.com"
|
||||
alias stop-siempie-tunnel="screen -S siempie-tunnel -p 0 -X quit"
|
||||
|
||||
# it creation
|
||||
alias start-itc-jump="screen -S jumphost-itc -d -m ssh -N -D 9002 jumphost-itc"
|
||||
alias stop-itc-jump="screen -S jumphost-itc -p 0 -X quit"
|
||||
|
||||
# multipost
|
||||
alias start-mp-tunnel="screen -S multipost-tunnel -d -m ssh -N -D 9003 mp-centurion"
|
||||
alias stop-mp-tunnel="screen -S multipost-tunnel -p 0 -X quit"
|
||||
|
||||
# duijvelaar-pompen
|
||||
alias start-dp-tunnel="screen -S dp-tunnel -d -m ssh -N -D 9004 dp-fw-01"
|
||||
alias stop-dp-tunnel="screen -S dp-tunnel -p 0 -X quit"
|
||||
|
||||
# pharmeon
|
||||
alias start-pharmeon-tunnel="screen -S pharmeon-tunnel -d -m ssh -N -D 9005 jumphost-ph"
|
||||
alias stop-pharmeon-tunnel="screen -S pharmeon-tunnel -p 0 -X quit"
|
||||
|
||||
|
||||
# force language
|
||||
export LC_ALL="en_US.UTF-8"
|
||||
|
||||
|
||||
# weather
|
||||
function weather() {
|
||||
if [ "$1" != "" ]
|
||||
then
|
||||
curl https://wttr.in/$1
|
||||
else
|
||||
curl https://wttr.in/Krimpen_Aan_Den_IJssel
|
||||
fi
|
||||
}
|
||||
|
||||
# k9s
|
||||
alias k9s="ssh k9s.siempie.internal -t /home/simon/.local/bin/k9s"
|
||||
[ -s "$HOME/.config/envman/load.sh" ] && source "$HOME/.config/envman/load.sh"
|
Reference in New Issue
Block a user