Add a beginning of home management

Julien LepillerSat Jun 08 23:23:21+0200 2019

6d33931

Add a beginning of home management

README.md

4242
------------------
4343
4444
Guix doesn't provide a nice way to configure user services (yet), so
45-
the `users` directory contains mostly data that cannot be automatically
46-
deployed by guix. That's a shame, but it still contains manifests that I
47-
use for my users, and configuration files for different software.
45+
the `homes` directory contains configuration and configuraton files, as
46+
well as manifests for users.
4847
4948
This is mostly useful for my desktop computers.
5049
50+
I found a way to manage the home directory with guix, but it's not as
51+
nice as it could be. The home directory is transformed into a guix profile,
52+
and to do that, a package is created that contains all my user configuration.
53+
54+
First, create a separate directory that will contain all your data that
55+
can be written to: `mkdir -p /data/tyreunom` in my case. Then, create
56+
a new profile, that will only contain one package:
57+
58+
```
59+
guix package -i tyreunom-home -p /var/guix/profiles/per-user/tyreunom/home \
60+
  -L homes -L modules
61+
```
62+
63+
My home directory is now read-only which a lot of software doesn't like.
64+
The package contains some tweaks to have some writable directories, but
65+
not everything will work. It's still a work in progress!
66+
67+
As an example of something that will not work properly, pulseaudio will
68+
simply refuse to run if your home directory is read-only. To work around
69+
this, I start pulseaudio from my window manager's autostart file, with
70+
a separate HOME variable set to a directory in `/tmp`.
71+
5172
What do your System Names Reference?
5273
------------------------------------
5374

homes/files/openbox/rc.xml unknown status 1

1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!-- Do not edit this file, it will be overwritten on install.
3+
        Copy the file to $HOME/.config/openbox/ instead. -->
4+
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
5+
  <resistance>
6+
    <strength>10</strength>
7+
    <screen_edge_strength>20</screen_edge_strength>
8+
  </resistance>
9+
  <focus>
10+
    <focusNew>yes</focusNew>
11+
    <!-- always try to focus new windows when they appear. other rules do
12+
       apply -->
13+
    <followMouse>yes</followMouse>
14+
    <!-- move focus to a window when you move the mouse into it -->
15+
    <focusLast>yes</focusLast>
16+
    <!-- focus the last used window when changing desktops, instead of the one
17+
       under the mouse pointer. when followMouse is enabled -->
18+
    <underMouse>no</underMouse>
19+
    <!-- move focus under the mouse, even when the mouse is not moving -->
20+
    <focusDelay>200</focusDelay>
21+
    <!-- when followMouse is enabled, the mouse must be inside the window for
22+
       this many milliseconds (1000 = 1 sec) before moving focus to it -->
23+
    <raiseOnFocus>no</raiseOnFocus>
24+
    <!-- when followMouse is enabled, and a window is given focus by moving the
25+
       mouse into it, also raise the window -->
26+
  </focus>
27+
  <placement>
28+
    <policy>Smart</policy>
29+
    <!-- 'Smart' or 'UnderMouse' -->
30+
    <monitor>Primary</monitor>
31+
    <!-- with Smart placement on a multi-monitor system, try to place new windows
32+
       on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where
33+
       the active window is, 'Primary' - only on the primary monitor -->
34+
    <primaryMonitor>1</primaryMonitor>
35+
    <!-- The monitor where Openbox should place popup dialogs such as the
36+
       focus cycling popup, or the desktop switch popup.  It can be an index
37+
       from 1, specifying a particular monitor.  Or it can be one of the
38+
       following: 'Mouse' - where the mouse is, or
39+
                  'Active' - where the active window is -->
40+
  </placement>
41+
  <theme>
42+
    <name>Arc-Dark</name>
43+
    <titleLayout>CNLIM</titleLayout>
44+
    <!--
45+
      available characters are NDSLIMC, each can occur at most once.
46+
      N: window icon
47+
      L: window label (AKA title).
48+
      I: iconify
49+
      M: maximize
50+
      C: close
51+
      S: shade (roll up/down)
52+
      D: omnipresent (on all desktops).
53+
  -->
54+
    <keepBorder>yes</keepBorder>
55+
    <animateIconify>yes</animateIconify>
56+
    <font place="ActiveWindow">
57+
      <name>progsole</name>
58+
      <size>10</size>
59+
      <!-- font size in points -->
60+
      <weight>Normal</weight>
61+
      <!-- 'bold' or 'normal' -->
62+
      <slant>Normal</slant>
63+
      <!-- 'italic' or 'normal' -->
64+
    </font>
65+
    <font place="InactiveWindow">
66+
      <name>progsole</name>
67+
      <size>10</size>
68+
      <!-- font size in points -->
69+
      <weight>Bold</weight>
70+
      <!-- 'bold' or 'normal' -->
71+
      <slant>Normal</slant>
72+
      <!-- 'italic' or 'normal' -->
73+
    </font>
74+
    <font place="MenuHeader">
75+
      <name>CodingFontTobi</name>
76+
      <size>12</size>
77+
      <!-- font size in points -->
78+
      <weight>Normal</weight>
79+
      <!-- 'bold' or 'normal' -->
80+
      <slant>Normal</slant>
81+
      <!-- 'italic' or 'normal' -->
82+
    </font>
83+
    <font place="MenuItem">
84+
      <name>CodingFontTobi</name>
85+
      <size>12</size>
86+
      <!-- font size in points -->
87+
      <weight>Normal</weight>
88+
      <!-- 'bold' or 'normal' -->
89+
      <slant>Normal</slant>
90+
      <!-- 'italic' or 'normal' -->
91+
    </font>
92+
    <font place="ActiveOnScreenDisplay">
93+
      <name>Sans</name>
94+
      <size>9</size>
95+
      <!-- font size in points -->
96+
      <weight>Normal</weight>
97+
      <!-- 'bold' or 'normal' -->
98+
      <slant>Normal</slant>
99+
      <!-- 'italic' or 'normal' -->
100+
    </font>
101+
    <font place="InactiveOnScreenDisplay">
102+
      <name>Sans</name>
103+
      <size>9</size>
104+
      <!-- font size in points -->
105+
      <weight>Normal</weight>
106+
      <!-- 'bold' or 'normal' -->
107+
      <slant>Normal</slant>
108+
      <!-- 'italic' or 'normal' -->
109+
    </font>
110+
  </theme>
111+
  <desktops>
112+
    <!-- this stuff is only used at startup, pagers allow you to change them
113+
       during a session
114+
115+
       these are default values to use when other ones are not already set
116+
       by other applications, or saved in your session
117+
118+
       use obconf if you want to change these without having to log out
119+
       and back in -->
120+
    <number>8</number>
121+
    <firstdesk>1</firstdesk>
122+
    <names>
123+
      <!-- set names up here if you want to, like this:
124+
    <name>desktop 1</name>
125+
    <name>desktop 2</name>
126+
    -->
127+
    </names>
128+
    <popupTime>875</popupTime>
129+
    <!-- The number of milliseconds to show the popup for when switching
130+
       desktops.  Set this to 0 to disable the popup. -->
131+
  </desktops>
132+
  <resize>
133+
    <drawContents>yes</drawContents>
134+
    <popupShow>Nonpixel</popupShow>
135+
    <!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) -->
136+
    <popupPosition>Center</popupPosition>
137+
    <!-- 'Center', 'Top', or 'Fixed' -->
138+
    <popupFixedPosition>
139+
      <!-- these are used if popupPosition is set to 'Fixed' -->
140+
      <x>10</x>
141+
      <!-- positive number for distance from left edge, negative number for
142+
         distance from right edge, or 'Center' -->
143+
      <y>10</y>
144+
      <!-- positive number for distance from top edge, negative number for
145+
         distance from bottom edge, or 'Center' -->
146+
    </popupFixedPosition>
147+
  </resize>
148+
  <!-- You can reserve a portion of your screen where windows will not cover when
149+
     they are maximized, or when they are initially placed.
150+
     Many programs reserve space automatically, but you can use this in other
151+
     cases. -->
152+
  <margins>
153+
    <top>0</top>
154+
    <bottom>0</bottom>
155+
    <left>0</left>
156+
    <right>0</right>
157+
  </margins>
158+
  <dock>
159+
    <position>TopLeft</position>
160+
    <!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating -->
161+
    <floatingX>0</floatingX>
162+
    <floatingY>0</floatingY>
163+
    <noStrut>no</noStrut>
164+
    <stacking>Above</stacking>
165+
    <!-- 'Above', 'Normal', or 'Below' -->
166+
    <direction>Vertical</direction>
167+
    <!-- 'Vertical' or 'Horizontal' -->
168+
    <autoHide>no</autoHide>
169+
    <hideDelay>300</hideDelay>
170+
    <!-- in milliseconds (1000 = 1 second) -->
171+
    <showDelay>300</showDelay>
172+
    <!-- in milliseconds (1000 = 1 second) -->
173+
    <moveButton>Middle</moveButton>
174+
    <!-- 'Left', 'Middle', 'Right' -->
175+
  </dock>
176+
  <keyboard>
177+
    <chainQuitKey>C-g</chainQuitKey>
178+
    <!-- Keybindings for desktop switching -->
179+
    <keybind key="C-A-Left">
180+
      <action name="GoToDesktop">
181+
        <to>left</to>
182+
        <wrap>no</wrap>
183+
      </action>
184+
    </keybind>
185+
    <keybind key="C-A-Right">
186+
      <action name="GoToDesktop">
187+
        <to>right</to>
188+
        <wrap>no</wrap>
189+
      </action>
190+
    </keybind>
191+
    <keybind key="C-S-A-Left">
192+
      <action name="SendToDesktop">
193+
        <to>left</to>
194+
        <wrap>no</wrap>
195+
      </action>
196+
    </keybind>
197+
    <keybind key="C-S-A-Right">
198+
      <action name="SendToDesktop">
199+
        <to>right</to>
200+
        <wrap>no</wrap>
201+
      </action>
202+
    </keybind>
203+
    <keybind key="S-A-Up">
204+
      <action name="SendToDesktop">
205+
        <to>up</to>
206+
        <wrap>no</wrap>
207+
      </action>
208+
    </keybind>
209+
    <keybind key="S-A-Down">
210+
      <action name="SendToDesktop">
211+
        <to>down</to>
212+
        <wrap>no</wrap>
213+
      </action>
214+
    </keybind>
215+
    <keybind key="C-A-Up">
216+
      <action name="VolumeChange">
217+
        <value>5</value>
218+
      </action>
219+
    </keybind>
220+
    <keybind key="C-A-Down">
221+
      <action name="VolumeChange">
222+
        <value>-5</value>
223+
      </action>
224+
    </keybind>
225+
    <keybind key="W-F1">
226+
      <action name="GoToDesktop">
227+
        <to>1</to>
228+
      </action>
229+
    </keybind>
230+
    <keybind key="W-F2">
231+
      <action name="GoToDesktop">
232+
        <to>2</to>
233+
      </action>
234+
    </keybind>
235+
    <keybind key="W-F3">
236+
      <action name="GoToDesktop">
237+
        <to>3</to>
238+
      </action>
239+
    </keybind>
240+
    <keybind key="W-F4">
241+
      <action name="GoToDesktop">
242+
        <to>4</to>
243+
      </action>
244+
    </keybind>
245+
    <keybind key="W-F5">
246+
      <action name="GoToDesktop">
247+
        <to>5</to>
248+
      </action>
249+
    </keybind>
250+
    <keybind key="W-F6">
251+
      <action name="GoToDesktop">
252+
        <to>6</to>
253+
      </action>
254+
    </keybind>
255+
    <keybind key="W-F7">
256+
      <action name="GoToDesktop">
257+
        <to>7</to>
258+
      </action>
259+
    </keybind>
260+
    <keybind key="W-F8">
261+
      <action name="GoToDesktop">
262+
        <to>8</to>
263+
      </action>
264+
    </keybind>
265+
    <keybind key="W-d">
266+
      <action name="ToggleShowDesktop"/>
267+
    </keybind>
268+
    <!-- Keybindings for windows -->
269+
    <keybind key="A-F4">
270+
      <action name="Close"/>
271+
    </keybind>
272+
    <keybind key="A-Escape">
273+
      <action name="Lower"/>
274+
      <action name="FocusToBottom"/>
275+
      <action name="Unfocus"/>
276+
    </keybind>
277+
    <keybind key="A-space">
278+
      <action name="ShowMenu">
279+
        <menu>client-menu</menu>
280+
      </action>
281+
    </keybind>
282+
    <!-- Keybindings for window switching -->
283+
    <keybind key="A-Tab">
284+
      <action name="NextWindow">
285+
        <finalactions>
286+
          <action name="Focus"/>
287+
          <action name="Raise"/>
288+
          <action name="Unshade"/>
289+
        </finalactions>
290+
      </action>
291+
    </keybind>
292+
    <keybind key="A-S-Tab">
293+
      <action name="PreviousWindow">
294+
        <finalactions>
295+
          <action name="Focus"/>
296+
          <action name="Raise"/>
297+
          <action name="Unshade"/>
298+
        </finalactions>
299+
      </action>
300+
    </keybind>
301+
    <keybind key="C-A-Tab">
302+
      <action name="NextWindow">
303+
        <panels>yes</panels>
304+
        <desktop>yes</desktop>
305+
        <finalactions>
306+
          <action name="Focus"/>
307+
          <action name="Raise"/>
308+
          <action name="Unshade"/>
309+
        </finalactions>
310+
      </action>
311+
    </keybind>
312+
    <!-- Keybindings for window switching with the arrow keys -->
313+
    <keybind key="W-S-Right">
314+
      <action name="DirectionalCycleWindows">
315+
        <direction>right</direction>
316+
      </action>
317+
    </keybind>
318+
    <keybind key="W-S-Left">
319+
      <action name="DirectionalCycleWindows">
320+
        <direction>left</direction>
321+
      </action>
322+
    </keybind>
323+
    <keybind key="W-S-Up">
324+
      <action name="DirectionalCycleWindows">
325+
        <direction>up</direction>
326+
      </action>
327+
    </keybind>
328+
    <keybind key="W-S-Down">
329+
      <action name="DirectionalCycleWindows">
330+
        <direction>down</direction>
331+
      </action>
332+
    </keybind>
333+
    <!-- Keybindings for running applications -->
334+
    <keybind key="W-e">
335+
      <action name="Execute">
336+
        <startupnotify>
337+
          <enabled>true</enabled>
338+
          <name>Konqueror</name>
339+
        </startupnotify>
340+
        <command>kfmclient openProfile filemanagement</command>
341+
      </action>
342+
    </keybind>
343+
    <keybind key="W-Up">
344+
      <action name="MoveResizeTo">
345+
        <y>15</y>
346+
      </action>
347+
    </keybind>
348+
    <keybind key="W-Right">
349+
      <action name="MoveResizeTo">
350+
        <x>-15</x>
351+
      </action>
352+
    </keybind>
353+
    <keybind key="W-Down">
354+
      <action name="MoveResizeTo">
355+
        <y>-15</y>
356+
      </action>
357+
    </keybind>
358+
    <keybind key="W-Left">
359+
      <action name="MoveResizeTo">
360+
        <x>15</x>
361+
      </action>
362+
    </keybind>
363+
    <keybind key="W-KP_5">
364+
      <action name="MoveResizeTo">
365+
        <x>center</x>
366+
        <y>center</y>
367+
      </action>
368+
    </keybind>
369+
    <keybind key="A-W-Up">
370+
      <action name="MoveResizeTo">
371+
        <height client="yes">738</height>
372+
        <y>center</y>
373+
      </action>
374+
    </keybind>
375+
    <keybind key="A-W-Down">
376+
      <action name="MoveResizeTo">
377+
        <height client="yes">100%</height>
378+
        <y>center</y>
379+
      </action>
380+
    </keybind>
381+
    <keybind key="A-W-Right">
382+
      <action name="MoveResizeTo">
383+
        <width client="yes">1336</width>
384+
        <x>15</x>
385+
      </action>
386+
    </keybind>
387+
    <keybind key="A-W-Left">
388+
      <action name="MoveResizeTo">
389+
        <width client="yes">100%</width>
390+
        <x>center</x>
391+
      </action>
392+
    </keybind>
393+
    <keybind key="W-m">
394+
      <action name="ShowMenu">
395+
        <menu>root-menu</menu>
396+
      </action>
397+
    </keybind>
398+
    <keybind key="W-q">
399+
      <action name="Close"/>
400+
    </keybind>
401+
    <keybind key="W-S-q">
402+
      <action name="Exit">
403+
        <prompt>yes</prompt>
404+
      </action>
405+
    </keybind>
406+
  </keyboard>
407+
  <mouse>
408+
    <dragThreshold>1</dragThreshold>
409+
    <!-- number of pixels the mouse must move before a drag begins -->
410+
    <doubleClickTime>500</doubleClickTime>
411+
    <!-- in milliseconds (1000 = 1 second) -->
412+
    <screenEdgeWarpTime>400</screenEdgeWarpTime>
413+
    <!-- Time before changing desktops when the pointer touches the edge of the
414+
       screen while moving a window, in milliseconds (1000 = 1 second).
415+
       Set this to 0 to disable warping -->
416+
    <screenEdgeWarpMouse>false</screenEdgeWarpMouse>
417+
    <!-- Set this to TRUE to move the mouse pointer across the desktop when
418+
       switching due to hitting the edge of the screen -->
419+
    <context name="Frame">
420+
      <mousebind action="Press" button="W-Left">
421+
        <action name="Focus"/>
422+
        <action name="Raise"/>
423+
      </mousebind>
424+
      <mousebind action="DoubleClick" button="W-Left">
425+
        <action name="Focus"/>
426+
        <action name="Raise"/>
427+
        <action name="ToggleMaximizeFull"/>
428+
      </mousebind>
429+
      <mousebind action="Drag" button="W-A-Left">
430+
        <action name="Resize"/>
431+
      </mousebind>
432+
      <mousebind action="Press" button="W-Right">
433+
        <action name="Focus"/>
434+
        <action name="Raise"/>
435+
        <action name="ShowMenu">
436+
          <menu>client-menu</menu>
437+
        </action>
438+
      </mousebind>
439+
      <mousebind action="Drag" button="W-Left">
440+
        <action name="Move"/>
441+
      </mousebind>
442+
      <mousebind button="A-Left" action="Press">
443+
        <action name="Focus"/>
444+
        <action name="Raise"/>
445+
      </mousebind>
446+
      <mousebind button="A-Left" action="Click">
447+
        <action name="Unshade"/>
448+
      </mousebind>
449+
      <mousebind button="A-Left" action="Drag">
450+
        <action name="Move"/>
451+
      </mousebind>
452+
      <mousebind button="A-Right" action="Press">
453+
        <action name="Focus"/>
454+
        <action name="Raise"/>
455+
        <action name="Unshade"/>
456+
      </mousebind>
457+
      <mousebind button="A-Right" action="Drag">
458+
        <action name="Resize"/>
459+
      </mousebind>
460+
      <mousebind button="A-Middle" action="Press">
461+
        <action name="Lower"/>
462+
        <action name="FocusToBottom"/>
463+
        <action name="Unfocus"/>
464+
      </mousebind>
465+
      <mousebind button="A-Up" action="Click">
466+
        <action name="GoToDesktop">
467+
          <to>previous</to>
468+
        </action>
469+
      </mousebind>
470+
      <mousebind button="A-Down" action="Click">
471+
        <action name="GoToDesktop">
472+
          <to>next</to>
473+
        </action>
474+
      </mousebind>
475+
      <mousebind button="C-A-Up" action="Click">
476+
        <action name="GoToDesktop">
477+
          <to>previous</to>
478+
        </action>
479+
      </mousebind>
480+
      <mousebind button="C-A-Down" action="Click">
481+
        <action name="GoToDesktop">
482+
          <to>next</to>
483+
        </action>
484+
      </mousebind>
485+
      <mousebind button="A-S-Up" action="Click">
486+
        <action name="SendToDesktop">
487+
          <to>previous</to>
488+
        </action>
489+
      </mousebind>
490+
      <mousebind button="A-S-Down" action="Click">
491+
        <action name="SendToDesktop">
492+
          <to>next</to>
493+
        </action>
494+
      </mousebind>
495+
    </context>
496+
    <context name="Titlebar">
497+
      <mousebind button="Left" action="Drag">
498+
        <action name="Move"/>
499+
      </mousebind>
500+
      <mousebind button="Left" action="DoubleClick">
501+
        <action name="ToggleShade"/>
502+
      </mousebind>
503+
      <mousebind button="Up" action="Click">
504+
        <action name="if">
505+
          <shaded>no</shaded>
506+
          <then>
507+
            <action name="Shade"/>
508+
            <action name="FocusToBottom"/>
509+
            <action name="Unfocus"/>
510+
            <action name="Lower"/>
511+
          </then>
512+
        </action>
513+
      </mousebind>
514+
      <mousebind button="Down" action="Click">
515+
        <action name="if">
516+
          <shaded>yes</shaded>
517+
          <then>
518+
            <action name="Unshade"/>
519+
            <action name="Raise"/>
520+
          </then>
521+
        </action>
522+
      </mousebind>
523+
    </context>
524+
    <context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner">
525+
      <mousebind button="Left" action="Press">
526+
        <action name="Focus"/>
527+
        <action name="Raise"/>
528+
        <action name="Unshade"/>
529+
      </mousebind>
530+
      <mousebind button="Middle" action="Press">
531+
        <action name="Lower"/>
532+
        <action name="FocusToBottom"/>
533+
        <action name="Unfocus"/>
534+
      </mousebind>
535+
      <mousebind button="Right" action="Press">
536+
        <action name="Focus"/>
537+
        <action name="Raise"/>
538+
        <action name="ShowMenu">
539+
          <menu>client-menu</menu>
540+
        </action>
541+
      </mousebind>
542+
    </context>
543+
    <context name="Top">
544+
      <mousebind button="Left" action="Drag">
545+
        <action name="Resize">
546+
          <edge>top</edge>
547+
        </action>
548+
      </mousebind>
549+
    </context>
550+
    <context name="Left">
551+
      <mousebind button="Left" action="Drag">
552+
        <action name="Resize">
553+
          <edge>left</edge>
554+
        </action>
555+
      </mousebind>
556+
    </context>
557+
    <context name="Right">
558+
      <mousebind button="Left" action="Drag">
559+
        <action name="Resize">
560+
          <edge>right</edge>
561+
        </action>
562+
      </mousebind>
563+
    </context>
564+
    <context name="Bottom">
565+
      <mousebind button="Left" action="Drag">
566+
        <action name="Resize">
567+
          <edge>bottom</edge>
568+
        </action>
569+
      </mousebind>
570+
      <mousebind button="Right" action="Press">
571+
        <action name="Focus"/>
572+
        <action name="Raise"/>
573+
        <action name="ShowMenu">
574+
          <menu>client-menu</menu>
575+
        </action>
576+
      </mousebind>
577+
    </context>
578+
    <context name="TRCorner BRCorner TLCorner BLCorner">
579+
      <mousebind button="Left" action="Press">
580+
        <action name="Focus"/>
581+
        <action name="Raise"/>
582+
        <action name="Unshade"/>
583+
      </mousebind>
584+
      <mousebind button="Left" action="Drag">
585+
        <action name="Resize"/>
586+
      </mousebind>
587+
    </context>
588+
    <context name="Client">
589+
      <mousebind button="Left" action="Press">
590+
        <action name="Focus"/>
591+
        <action name="Raise"/>
592+
      </mousebind>
593+
      <mousebind button="Middle" action="Press">
594+
        <action name="Focus"/>
595+
        <action name="Raise"/>
596+
      </mousebind>
597+
      <mousebind button="Right" action="Press">
598+
        <action name="Focus"/>
599+
        <action name="Raise"/>
600+
      </mousebind>
601+
    </context>
602+
    <context name="Icon">
603+
      <mousebind button="Left" action="Press">
604+
        <action name="Focus"/>
605+
        <action name="Raise"/>
606+
        <action name="Unshade"/>
607+
        <action name="ShowMenu">
608+
          <menu>client-menu</menu>
609+
        </action>
610+
      </mousebind>
611+
      <mousebind button="Right" action="Press">
612+
        <action name="Focus"/>
613+
        <action name="Raise"/>
614+
        <action name="ShowMenu">
615+
          <menu>client-menu</menu>
616+
        </action>
617+
      </mousebind>
618+
    </context>
619+
    <context name="AllDesktops">
620+
      <mousebind button="Left" action="Press">
621+
        <action name="Focus"/>
622+
        <action name="Raise"/>
623+
        <action name="Unshade"/>
624+
      </mousebind>
625+
      <mousebind button="Left" action="Click">
626+
        <action name="ToggleOmnipresent"/>
627+
      </mousebind>
628+
    </context>
629+
    <context name="Shade">
630+
      <mousebind button="Left" action="Press">
631+
        <action name="Focus"/>
632+
        <action name="Raise"/>
633+
      </mousebind>
634+
      <mousebind button="Left" action="Click">
635+
        <action name="ToggleShade"/>
636+
      </mousebind>
637+
    </context>
638+
    <context name="Iconify">
639+
      <mousebind button="Left" action="Press">
640+
        <action name="Focus"/>
641+
        <action name="Raise"/>
642+
      </mousebind>
643+
      <mousebind button="Left" action="Click">
644+
        <action name="Iconify"/>
645+
      </mousebind>
646+
    </context>
647+
    <context name="Maximize">
648+
      <mousebind button="Left" action="Press">
649+
        <action name="Focus"/>
650+
        <action name="Raise"/>
651+
        <action name="Unshade"/>
652+
      </mousebind>
653+
      <mousebind button="Middle" action="Press">
654+
        <action name="Focus"/>
655+
        <action name="Raise"/>
656+
        <action name="Unshade"/>
657+
      </mousebind>
658+
      <mousebind button="Right" action="Press">
659+
        <action name="Focus"/>
660+
        <action name="Raise"/>
661+
        <action name="Unshade"/>
662+
      </mousebind>
663+
      <mousebind button="Left" action="Click">
664+
        <action name="ToggleMaximize"/>
665+
      </mousebind>
666+
      <mousebind button="Middle" action="Click">
667+
        <action name="ToggleMaximize">
668+
          <direction>vertical</direction>
669+
        </action>
670+
      </mousebind>
671+
      <mousebind button="Right" action="Click">
672+
        <action name="ToggleMaximize">
673+
          <direction>horizontal</direction>
674+
        </action>
675+
      </mousebind>
676+
    </context>
677+
    <context name="Close">
678+
      <mousebind button="Left" action="Press">
679+
        <action name="Focus"/>
680+
        <action name="Raise"/>
681+
        <action name="Unshade"/>
682+
      </mousebind>
683+
      <mousebind button="Left" action="Click">
684+
        <action name="Close"/>
685+
      </mousebind>
686+
    </context>
687+
    <context name="Desktop">
688+
      <mousebind button="Up" action="Click">
689+
        <action name="GoToDesktop">
690+
          <to>previous</to>
691+
        </action>
692+
      </mousebind>
693+
      <mousebind button="Down" action="Click">
694+
        <action name="GoToDesktop">
695+
          <to>next</to>
696+
        </action>
697+
      </mousebind>
698+
      <mousebind button="A-Up" action="Click">
699+
        <action name="GoToDesktop">
700+
          <to>previous</to>
701+
        </action>
702+
      </mousebind>
703+
      <mousebind button="A-Down" action="Click">
704+
        <action name="GoToDesktop">
705+
          <to>next</to>
706+
        </action>
707+
      </mousebind>
708+
      <mousebind button="C-A-Up" action="Click">
709+
        <action name="GoToDesktop">
710+
          <to>previous</to>
711+
        </action>
712+
      </mousebind>
713+
      <mousebind button="C-A-Down" action="Click">
714+
        <action name="GoToDesktop">
715+
          <to>next</to>
716+
        </action>
717+
      </mousebind>
718+
      <mousebind button="Left" action="Press">
719+
        <action name="Focus"/>
720+
        <action name="Raise"/>
721+
      </mousebind>
722+
      <mousebind button="Right" action="Press">
723+
        <action name="Focus"/>
724+
        <action name="Raise"/>
725+
      </mousebind>
726+
    </context>
727+
    <context name="Root">
728+
      <!-- Menus -->
729+
      <mousebind button="Middle" action="Press">
730+
        <action name="ShowMenu">
731+
          <menu>client-list-combined-menu</menu>
732+
        </action>
733+
      </mousebind>
734+
      <mousebind button="Right" action="Press">
735+
        <action name="ShowMenu">
736+
          <menu>root-menu</menu>
737+
        </action>
738+
      </mousebind>
739+
    </context>
740+
    <context name="MoveResize">
741+
      <mousebind button="Up" action="Click">
742+
        <action name="GoToDesktop">
743+
          <to>previous</to>
744+
        </action>
745+
      </mousebind>
746+
      <mousebind button="Down" action="Click">
747+
        <action name="GoToDesktop">
748+
          <to>next</to>
749+
        </action>
750+
      </mousebind>
751+
      <mousebind button="A-Up" action="Click">
752+
        <action name="GoToDesktop">
753+
          <to>previous</to>
754+
        </action>
755+
      </mousebind>
756+
      <mousebind button="A-Down" action="Click">
757+
        <action name="GoToDesktop">
758+
          <to>next</to>
759+
        </action>
760+
      </mousebind>
761+
    </context>
762+
  </mouse>
763+
  <menu>
764+
    <!-- You can specify more than one menu file in here and they are all loaded,
765+
       just don't make menu ids clash or, well, it'll be kind of pointless -->
766+
    <!-- default menu file (or custom one in $HOME/.config/openbox/) -->
767+
    <file>menu.xml</file>
768+
    <hideDelay>200</hideDelay>
769+
    <!-- if a press-release lasts longer than this setting (in milliseconds), the
770+
       menu is hidden again -->
771+
    <middle>no</middle>
772+
    <!-- center submenus vertically about the parent entry -->
773+
    <submenuShowDelay>100</submenuShowDelay>
774+
    <!-- time to delay before showing a submenu after hovering over the parent
775+
       entry.
776+
       if this is a negative value, then the delay is infinite and the
777+
       submenu will not be shown until it is clicked on -->
778+
    <submenuHideDelay>400</submenuHideDelay>
779+
    <!-- time to delay before hiding a submenu when selecting another
780+
       entry in parent menu
781+
       if this is a negative value, then the delay is infinite and the
782+
       submenu will not be hidden until a different submenu is opened -->
783+
    <showIcons>yes</showIcons>
784+
    <!-- controls if icons appear in the client-list-(combined-)menu -->
785+
    <manageDesktops>yes</manageDesktops>
786+
    <!-- show the manage desktops section in the client-list-(combined-)menu -->
787+
  </menu>
788+
  <applications>
789+
    <application class="*">
790+
      <decor>no</decor>
791+
    </application>
792+
    <!--
793+
  # this is an example with comments through out. use these to make your
794+
  # own rules, but without the comments of course.
795+
  # you may use one or more of the name/class/role/title/type rules to specify
796+
  # windows to match
797+
798+
  <application name="the window's _OB_APP_NAME property (see obxprop)"
799+
              class="the window's _OB_APP_CLASS property (see obxprop)"
800+
          groupname="the window's _OB_APP_GROUP_NAME property (see obxprop)"
801+
         groupclass="the window's _OB_APP_GROUP_CLASS property (see obxprop)"
802+
               role="the window's _OB_APP_ROLE property (see obxprop)"
803+
              title="the window's _OB_APP_TITLE property (see obxprop)"
804+
               type="the window's _OB_APP_TYPE property (see obxprob)..
805+
                      (if unspecified, then it is 'dialog' for child windows)">
806+
  # you may set only one of name/class/role/title/type, or you may use more
807+
  # than one together to restrict your matches.
808+
809+
  # the name, class, role, and title use simple wildcard matching such as those
810+
  # used by a shell. you can use * to match any characters and ? to match
811+
  # any single character.
812+
813+
  # the type is one of: normal, dialog, splash, utility, menu, toolbar, dock,
814+
  #    or desktop
815+
816+
  # when multiple rules match a window, they will all be applied, in the
817+
  # order that they appear in this list
818+
819+
820+
    # each rule element can be left out or set to 'default' to specify to not 
821+
    # change that attribute of the window
822+
823+
    <decor>yes</decor>
824+
    # enable or disable window decorations
825+
826+
    <shade>no</shade>
827+
    # make the window shaded when it appears, or not
828+
829+
    <position force="no">
830+
      # the position is only used if both an x and y coordinate are provided
831+
      # (and not set to 'default')
832+
      # when force is "yes", then the window will be placed here even if it
833+
      # says you want it placed elsewhere.  this is to override buggy
834+
      # applications who refuse to behave
835+
      <x>center</x>
836+
      # a number like 50, or 'center' to center on screen. use a negative number
837+
      # to start from the right (or bottom for <y>), ie -50 is 50 pixels from
838+
      # the right edge (or bottom). use 'default' to specify using value
839+
      # provided by the application, or chosen by openbox, instead.
840+
      <y>200</y>
841+
      <monitor>1</monitor>
842+
      # specifies the monitor in a xinerama setup.
843+
      # 1 is the first head, or 'mouse' for wherever the mouse is
844+
    </position>
845+
846+
    <size>
847+
      # the size to make the window.
848+
      <width>20</width>
849+
      # a number like 20, or 'default' to use the size given by the application.
850+
      # you can use fractions such as 1/2 or percentages such as 75% in which
851+
      # case the value is relative to the size of the monitor that the window
852+
      # appears on.
853+
      <height>30%</height>
854+
    </size>
855+
856+
    <focus>yes</focus>
857+
    # if the window should try be given focus when it appears. if this is set
858+
    # to yes it doesn't guarantee the window will be given focus. some
859+
    # restrictions may apply, but Openbox will try to
860+
861+
    <desktop>1</desktop>
862+
    # 1 is the first desktop, 'all' for all desktops
863+
864+
    <layer>normal</layer>
865+
    # 'above', 'normal', or 'below'
866+
867+
    <iconic>no</iconic>
868+
    # make the window iconified when it appears, or not
869+
870+
    <skip_pager>no</skip_pager>
871+
    # asks to not be shown in pagers
872+
873+
    <skip_taskbar>no</skip_taskbar>
874+
    # asks to not be shown in taskbars. window cycling actions will also
875+
    # skip past such windows
876+
877+
    <fullscreen>yes</fullscreen>
878+
    # make the window in fullscreen mode when it appears
879+
880+
    <maximized>true</maximized>
881+
    # 'Horizontal', 'Vertical' or boolean (yes/no)
882+
  </application>
883+
884+
  # end of the example
885+
-->
886+
  </applications>
887+
</openbox_config>

homes/tyreunom.scm unknown status 1

1+
;;; Tyreunom's system administration and configuration tools.
2+
;;;
3+
;;; Copyright ?? 2019 Julien Lepiller <julien@lepiller.eu>
4+
;;;
5+
;;; This program is free software: you can redistribute it and/or modify
6+
;;; it under the terms of the GNU General Public License as published by
7+
;;; the Free Software Foundation, either version 3 of the License, or
8+
;;; (at your option) any later version.
9+
;;;
10+
;;; This program is distributed in the hope that it will be useful,
11+
;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13+
;;; GNU General Public License for more details.
14+
;;;
15+
;;; You should have received a copy of the GNU General Public License
16+
;;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
17+
18+
(define-module (tyreunom)
19+
  #:use-module (guix packages)
20+
  #:use-module (guix gexp)
21+
  #:use-module (guix build-system trivial)
22+
  #:use-module (guix build utils)
23+
  #:use-module (guix licenses)
24+
  #:use-module (gnu packages)
25+
  #:use-module (gnu packages image-viewers)
26+
  #:use-module (gnu packages pulseaudio))
27+
28+
(define bashrc
29+
  (computed-file "bashrc"
30+
    #~(with-output-to-file #$output
31+
        (lambda _
32+
          (format #t "export SHELL
33+
34+
if [[ $- != *i* ]]; then
35+
      # Non intercative shell. For SSH session, load /etc/profile to get
36+
      # PATH and other variables set up.
37+
        [[ -n \"$SSH_CLIENT\" ]] && source /etc/profile
38+
      return
39+
fi
40+
41+
source /etc/bashrc
42+
43+
if [ -n \"$GUIX_ENVIRONMENT\" ]; then
44+
        PS1='\\u@\\h \\w [env]\\$ '
45+
else
46+
        PS1='\\u@\\h \\w\\$ '
47+
fi
48+
alias ls='ls -p --color=auto'
49+
alias ll='ls -l'
50+
alias grep='grep --color=auto'")))))
51+
52+
(define bash_profile
53+
  (plain-file "bash_profile" "if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
54+
"))
55+
56+
(define-public tyreunom-home
57+
  (package
58+
    (name "tyreunom-home")
59+
    (version "0")
60+
    (source #f)
61+
    (build-system trivial-build-system)
62+
    (arguments
63+
     `(#:modules ((guix build utils) (home utils))
64+
       #:builder
65+
       (begin
66+
         (use-modules (guix build utils) (home utils))
67+
         ;; Install openbox
68+
         (mkdir-p (home-file %outputs ".config/openbox"))
69+
         (copy-file (assoc-ref %build-inputs "openbox-rc.xml")
70+
                    (home-file %outputs ".config/openbox/rc.xml"))
71+
         (copy-file (assoc-ref %build-inputs "openbox-autostart")
72+
                    (home-file %outputs ".config/openbox/autostart"))
73+
         (for-each
74+
           (lambda (file)
75+
             (symlink (assoc-ref %build-inputs file)
76+
                      (home-file %outputs file)))
77+
           '(".bashrc" ".bash_profile"))
78+
         ;; TODO: manage profiles, plugins, etc through guix.
79+
         (symlink "/data/tyreunom/.mozilla"
80+
                  (home-file %outputs ".mozilla"))
81+
         ;; For guix
82+
         (symlink "/data/tyreunom/.config/guix"
83+
                  (home-file %outputs ".config/guix"))
84+
         (symlink "/data/tyreunom/.guix-profile"
85+
                  (home-file %outputs ".guix-profile"))
86+
         ;; symlink writeable directories
87+
         (symlink "/data/tyreunom/.local"
88+
                  (home-file %outputs ".local"))
89+
         (symlink "/data/tyreunom/.cache"
90+
                  (home-file %outputs ".cache")))))
91+
    (inputs
92+
     `((".bashrc" ,bashrc)
93+
       (".bash_profile" ,bash_profile)
94+
       ("openbox-rc.xml" ,(local-file "files/openbox/rc.xml"))
95+
       ("openbox-autostart"
96+
        ,(computed-file "autostart"
97+
           #~(with-output-to-file #$output
98+
               (lambda _
99+
                 (format #t "HOME=/tmp/pa ~a --start~%" #$(file-append pulseaudio "/bin/pulseaudio"))
100+
                 (format #t "~a --bg-fill ~a~%" #$(file-append feh "/bin/feh")
101+
                         #$(local-file "/data/tyreunom/background.png"))))))))
102+
    (home-page "")
103+
    (synopsis "")
104+
    (description "")
105+
    (license gpl3+)))

modules/home/utils.scm unknown status 1

1+
(define-module (home utils)
2+
  #:export (home-file))
3+
4+
(define (home-file outputs . path)
5+
  (apply string-append (assoc-ref outputs "out") "/" path))