diff --git a/base/base.clj b/base/base.clj old mode 100644 new mode 100755 index 853cb16..209e324 --- a/base/base.clj +++ b/base/base.clj @@ -3,6 +3,8 @@ (require '[clojure.string :as str]) +(def user (System/getenv "SUDO_USER")) + ;;executes shell command but throws exception on error (defn- safe-sh [& commands] (as-> (apply shell/sh commands) $ @@ -11,3 +13,4 @@ ;;executes command as user calling this script with sudo (defn- safe-sh-as-user [& commands] (safe-sh "su" "-c" (str/join " " (map #(if (str/includes? % " ") (str "\"" % "\"") %) commands)) user)) + diff --git a/configs/config-files/gtk-config b/configs/config-files/gtk-config new file mode 100644 index 0000000..20457aa --- /dev/null +++ b/configs/config-files/gtk-config @@ -0,0 +1,3 @@ +gtk-icon-theme-name = "Mint-Y" +gtk-theme-name = "Dracula-alt-style" +gtk-font-name = "Fira Code Regular 10" \ No newline at end of file diff --git a/configs/config-files/i3-config b/configs/config-files/i3-config new file mode 100644 index 0000000..bb5f6c4 --- /dev/null +++ b/configs/config-files/i3-config @@ -0,0 +1,201 @@ +# This file has been auto-generated by i3-config-wizard(1). +# It will not be overwritten, so edit it as you like. +# +# Should you change your keyboard layout some time, delete +# this file and re-run i3-config-wizard(1). +# + +# i3 config file (v4) +# +# Please see https://i3wm.org/docs/userguide.html for a complete reference! + +set $mod Mod4 + +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. +font pango:monospace 8 + +# This font is widely installed, provides lots of unicode glyphs, right-to-left +# text rendering and scalability on retina/hidpi displays (thanks to pango). +#font pango:DejaVu Sans Mono 8 + +# set desktop wallpaper +# exec --no-startup-id feh --bg-scale ~/Pictures/wallpaper.jpg + +# Start XDG autostart .desktop files using dex. See also +# https://wiki.archlinux.org/index.php/XDG_Autostart +exec --no-startup-id dex --autostart --environment i3 + +# The combination of xss-lock, nm-applet and pactl is a popular choice, so +# they are included here as an example. Modify as you see fit. + +# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the +# screen before suspend. Use loginctl lock-session to lock your screen. +exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork + +# NetworkManager is the most popular way to manage wireless networks on Linux, +# and nm-applet is a desktop environment-independent system tray GUI for it. +exec --no-startup-id nm-applet + +# Use pactl to adjust volume in PulseAudio. +set $refresh_i3status killall -SIGUSR1 i3status +bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status +bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status +bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status +bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +# move tiling windows via drag & drop by left-clicking into the title bar, +# or left-clicking anywhere into the window while holding the floating modifier. +tiling_drag modifier titlebar + +# start a terminal +bindsym $mod+Return exec i3-sensible-terminal + +# start emacs +bindsym $mod+q exec emacsclient + +# take screenshot +bindsym Print exec flameshot gui + +# kill focused window +bindsym $mod+minus kill + +# start rofi (a program launcher) +bindsym $mod+a exec --no-startup-id rofi -show drun + +# There also is i3-dmenu-desktop which only displays applications shipping a +# .desktop file. It is a wrapper around dmenu, so you need that installed. +# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop + +# change focus +#bindsym $mod+j focus left +#bindsym $mod+k focus down +#bindsym $mod+l focus up +#bindsym $mod+semicolon focus right + +# alternatively, you can use the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# move focused window +bindsym $mod+Shift+j move left +bindsym $mod+Shift+k move down +bindsym $mod+Shift+l move up +bindsym $mod+Shift+semicolon move right + +# alternatively, you can use the cursor keys: +bindsym $mod+Mod1+Left move left +bindsym $mod+Mod1+Down move down +bindsym $mod+Mod1+Up move up +bindsym $mod+Mod1+Right move right + +# window splitting +bindsym $mod+Tab split toggle +#bindsym $mod+v split v +#bindsym $mod+h split h + +# enter fullscreen mode for the focused container +#bindsym $mod+f fullscreen toggle + +# change container layout (stacked, tabbed, toggle split) +#bindsym $mod+s layout stacking +#bindsym $mod+w layout tabbed +#bindsym $mod+e layout toggle split + +# toggle tiling / floating +bindsym $mod+Shift+space floating toggle + +# change focus between tiling / floating windows +bindsym $mod+space focus mode_toggle + +# focus the parent container +#bindsym $mod+a focus parent + +# focus the child container +#bindsym $mod+d focus child + +# Define names for default workspaces for which we configure key bindings later on. +# We use variables to avoid repeating the names in multiple places. +set $ws1 "1" +set $ws2 "2" +set $ws3 "3" +set $ws4 "4" +set $ws5 "5" +set $ws6 "6" +set $ws7 "7" +set $ws8 "8" +set $ws9 "9" +set $ws10 "10" + +# switch to workspace +bindsym $mod+x workspace number $ws1 +bindsym $mod+c workspace number $ws2 +bindsym $mod+v workspace number $ws3 +bindsym $mod+s workspace number $ws4 +bindsym $mod+d workspace number $ws5 +bindsym $mod+f workspace number $ws6 +bindsym $mod+w workspace number $ws7 +bindsym $mod+e workspace number $ws8 +bindsym $mod+r workspace number $ws9 +bindsym $mod+z workspace number $ws10 + +# move focused container to workspace +bindsym $mod+Mod1+x move container to workspace number $ws1 +bindsym $mod+Mod1+c move container to workspace number $ws2 +bindsym $mod+Mod1+v move container to workspace number $ws3 +bindsym $mod+Mod1+s move container to workspace number $ws4 +bindsym $mod+Mod1+d move container to workspace number $ws5 +bindsym $mod+Mod1+f move container to workspace number $ws6 +bindsym $mod+Mod1+w move container to workspace number $ws7 +bindsym $mod+Mod1+e move container to workspace number $ws8 +bindsym $mod+Mod1+r move container to workspace number $ws9 +bindsym $mod+Mod1+z move container to workspace number $ws1 + +# reload the configuration file +bindsym $mod+Shift+c reload +# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) +bindsym $mod+Shift+r restart +# exit i3 (logs you out of your X session) +bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'" + +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + # Pressing left will shrink the window’s width. + # Pressing right will grow the window’s width. + # Pressing up will shrink the window’s height. + # Pressing down will grow the window’s height. + bindsym j resize shrink width 10 px or 10 ppt + bindsym k resize grow height 10 px or 10 ppt + bindsym l resize shrink height 10 px or 10 ppt + bindsym semicolon resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + # back to normal: Enter or Escape or $mod+r + bindsym Return mode "default" + bindsym Escape mode "default" + #bindsym $mod+r mode "default" +} + +#bindsym $mod+r mode "resize" + +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +bar { + status_command i3status +} + +# theming +# class border backgr. text indicator child_border +client.focused #786396 #786396 #ffffff #786396 #534070 \ No newline at end of file diff --git a/configs/config-files/runsvdir-USER b/configs/config-files/runsvdir-USER new file mode 100644 index 0000000..e28f1ae --- /dev/null +++ b/configs/config-files/runsvdir-USER @@ -0,0 +1,9 @@ +#!/bin/sh + +export USER="" +export HOME="/home/" + +groups="$(id -Gn "$USER" | tr ' ' ':')" +svdir="$HOME/service" + +exec chpst -u "$USER:$groups" runsvdir "$svdir" \ No newline at end of file diff --git a/configs/config-files/wallpaper.jpg b/configs/config-files/wallpaper.jpg new file mode 100644 index 0000000..0b71d59 Binary files /dev/null and b/configs/config-files/wallpaper.jpg differ diff --git a/configs/configs.clj b/configs/configs.clj index ede02c4..b9e55c3 100755 --- a/configs/configs.clj +++ b/configs/configs.clj @@ -2,9 +2,19 @@ (require '[babashka.fs :as fs] - '[clojure.string :as str]) + '[clojure.string :as str] + '[clojure.tools.cli :refer [parse-opts]]) + +(def parsed-params (parse-opts *command-line-args* {})) +(def script-base-dir (first (:arguments parsed-params))) + +(if (nil? script-base-dir) + (throw (Exception. "error: script base dir needs to be provided as first arg!"))) (def user (System/getenv "SUDO_USER")) +(if (nil? user) + (throw (Exception. "error: script needs to be executed with sudo!"))) + (def home (str "/home/" user)) ;;todo: import from base.clj @@ -20,14 +30,13 @@ (println "setting up spacemacs..") (-> (fs/file (str home "/.emacs.d")) (fs/delete-tree)) (safe-sh-as-user "git" "clone" "https://github.com/syl20bnr/spacemacs" (str home "/.emacs.d")) - (safe-sh "chown" (str user ":" user) "-R" (str home "/.emacs.d")) (println "spacemacs set up")) (defn- setup-android-scripts [] (let [android-scripts-dir (str home "/Projects/android-scripts")] (fs/create-dirs android-scripts-dir) - (safe-sh "git" "clone" "ssh://git@git.schro.fi:4242/schrofi/android-scripts.git" android-scripts-dir) - (safe-sh "chown" (str user ":" user) "-R" android-scripts-dir))) + (safe-sh "chown" "-R" (str user ":" user) android-scripts-dir) + (safe-sh-as-user "git" "clone" "ssh://git@git.schro.fi:4242/schrofi/android-scripts.git" android-scripts-dir))) (defn- setup-i3 [] (println "setting up i3..") @@ -41,7 +50,18 @@ (safe-sh-as-user "gsettings" "set" "org.mate.interface" "document-font-name" "Fira Code Regular 10.0") (safe-sh-as-user "gsettings" "set" "org.mate.interface" "monospace-font-name" "Fira Code Regular 10.0") (safe-sh-as-user "gsettings" "set" "org.mate.Marco.general" "titlebar-font" "Fira Code Bold 10.0") - (safe-sh-as-user "gsettings" "set" "org.mate.caja.desktop" "font" "Fira Code Regular 10.0")) + (safe-sh-as-user "gsettings" "set" "org.mate.caja.desktop" "font" "Fira Code Regular 10.0") + (safe-sh-as-user "ln" "-fs" (str script-base-dir "/configs/config-files/gtk-config") "~/.gtkrc-2.0") + (safe-sh-as-user "ln" "-fs" (str script-base-dir "/configs/config-files/i3-config") "~/.config/i3/config") + (println "linking wallpaper..") + (safe-sh-as-user "ln" "-fs" (str script-base-dir "/configs/config-files/wallpaper.jpg") "~/Pictures/wallpaper.jpg") + (safe-sh-as-user "gsettings" "set" "org.mate.background" "picture-filename" "~/Pictures/wallpaper.jpg")) + +(defn- setup-system-services [] + (println "setting up system services..") + ;;todo + ;;(fs/file ()) + ) ;;todo: fetch spacemacs ;;todo: disable locking when closing lid on ac diff --git a/setup.sh b/setup.sh index 7168d30..97901dc 100755 --- a/setup.sh +++ b/setup.sh @@ -1,7 +1,10 @@ -#!/bin/sh +#!/bin/bash # first install babashka which is required for the other scripts xbps-install -y babashka; +# gets the path of this script +__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + ./packages/packages.clj; -./configs/configs.clj; \ No newline at end of file +./configs/configs.clj ${__dir};